diff --git a/pymule/__main__.py b/pymule/__main__.py
index 4c1736805d2960f2ab21b992b56aa38cabafc3d2..4a266f299d2215d51cba595490a66241f45a4cc1 100644
--- a/pymule/__main__.py
+++ b/pymule/__main__.py
@@ -2,6 +2,7 @@ import argparse
 import createrun
 import manageruns
 import switcheroo
+import ffilter
 
 
 if __name__ == '__main__':
@@ -13,6 +14,7 @@ if __name__ == '__main__':
     manageruns.create_rm_parser(subparsers)
     manageruns.create_backup_parser(subparsers)
     switcheroo.create_parser(subparsers)
+    ffilter.create_parser(subparsers)
 
     parsed = parser.parse_args()
     parsed.func(parsed)
diff --git a/pymule/ffilter.py b/pymule/ffilter.py
new file mode 100644
index 0000000000000000000000000000000000000000..3577395ec3cc523fee0aae73eb3514d8879e484c
--- /dev/null
+++ b/pymule/ffilter.py
@@ -0,0 +1,49 @@
+import argparse
+import re
+import sys
+
+
+def create_parser(subparsers):
+    parser = subparsers.add_parser(
+        'ffilter',
+        description='returns interfaces for functions'
+    )
+    parser.add_argument(
+        'src', nargs='?',
+        type=argparse.FileType('r'),
+        default=sys.stdin
+    )
+    parser.add_argument(
+        '--name', nargs='?',
+        default=None
+    )
+    parser.add_argument(
+        'dest', nargs='?',
+        type=argparse.FileType('w'),
+        default=sys.stdout
+    )
+    parser.set_defaults(func=main)
+
+
+def main(parsed):
+    fname = parsed.src.name
+    if parsed.name:
+        name = parsed.name
+    else:
+        name = fname.split('.')[0]
+
+    buf = parsed.src.read()
+    matches = re.findall(
+        "FUNCTION ([A-Z_]+2[A-Z\d_]+)(\([^\)\n]+\))\n(( *!!.*\n)+)",
+        buf,
+        re.I
+    )
+    if len(matches) > 0:
+      parsed.dest.write("  !! From file %s\n" % fname)
+      parsed.dest.write('\n'.join(
+          '  use %s, only: %s!!%s\n%s' % (
+              name, func.lower(), args, comments
+          )
+          for func, args, comments, _ in matches
+      ))
+      parsed.dest.write("\n\n")