diff --git a/loopy/frontend/fortran/__init__.py b/loopy/frontend/fortran/__init__.py
index 1cd7aa6f3e4945c306442ec09f4077d65759050d..f2bbb288249332dc6a333f95fa2600fa48967e60 100644
--- a/loopy/frontend/fortran/__init__.py
+++ b/loopy/frontend/fortran/__init__.py
@@ -25,7 +25,7 @@ THE SOFTWARE.
 from loopy.diagnostic import LoopyError
 
 
-def c_preprocess(source, defines=None, filename="<floopy source>"):
+def c_preprocess(source, defines=None, filename=None, include_paths=None):
     """
     :arg source: a string, possibly containing C preprocessor constructs
     :arg defines: a list of strings as they might occur after a
@@ -38,10 +38,22 @@ def c_preprocess(source, defines=None, filename="<floopy source>"):
     except ImportError:
         raise LoopyError("Using the C preprocessor requires PLY to be installed")
 
+    input_dirname = None
+    if filename is None:
+        filename = "<floopy source>"
+    else:
+        from os.path import dirname
+        input_dirname = dirname(filename)
+
     lexer = lex.lex(cpp)
 
     from ply.cpp import Preprocessor
     p = Preprocessor(lexer)
+    if input_dirname is not None:
+        p.add_path(input_dirname)
+    if include_paths:
+        for inc_path in include_paths:
+            p.add_path(inc_path)
 
     if defines:
         for d in defines: