diff --git a/pandoc.hs b/pandoc.hs
index 6281113cb..bf5f387dd 100644
--- a/pandoc.hs
+++ b/pandoc.hs
@@ -49,7 +49,7 @@ import System.Console.GetOpt
 import Data.Char ( toLower )
 import Data.List ( intercalate, isPrefixOf, isSuffixOf, sort )
 import System.Directory ( getAppUserDataDirectory, findExecutable,
-                          doesFileExist )
+                          doesFileExist, Permissions(..), getPermissions )
 import System.IO ( stdout, stderr )
 import System.IO.Error ( isDoesNotExistError )
 import qualified Control.Exception as E
@@ -104,8 +104,12 @@ externalFilter f args' d = do
                            Nothing -> do
                              exists <- doesFileExist f
                              if exists
-                                then return $
+                                then do
+                                  isExecutable <- executable `fmap`
+                                                    getPermissions f
+                                  return $
                                     case map toLower $ takeExtension f of
+                                         _ | isExecutable -> (f, args')
                                          ".py"  -> ("python", f:args')
                                          ".hs"  -> ("runhaskell", f:args')
                                          ".pl"  -> ("perl", f:args')