diff --git a/snaplet-purescript.cabal b/snaplet-purescript.cabal
--- a/snaplet-purescript.cabal
+++ b/snaplet-purescript.cabal
@@ -1,5 +1,5 @@
 name:                snaplet-purescript
-version:             0.5.2.0
+version:             0.5.2.3
 synopsis:            Automatic (re)compilation of purescript projects
 description:         Automatic (re)compilation of purescript projects
 license:             MIT
@@ -23,7 +23,7 @@
     Paths_snaplet_purescript
   build-depends: base >=4.6 && < 5.1,
                  snap-core < 1.1.0.0,
-                 snap < 1.1.0.0,
+                 snap >= 1.1.2.0,
                  raw-strings-qq >= 1.0.2,
                  string-conv,
                  text > 0.11 && < 1.4.0.0,
@@ -33,4 +33,6 @@
                  shelly >= 0.4.1
   hs-source-dirs:
     src
+  ghc-options:
+    -Wall
   default-language:    Haskell2010
diff --git a/src/Snap/Snaplet/PureScript.hs b/src/Snap/Snaplet/PureScript.hs
--- a/src/Snap/Snaplet/PureScript.hs
+++ b/src/Snap/Snaplet/PureScript.hs
@@ -28,7 +28,6 @@
 import           Text.Printf
 import           Text.RawString.QQ
 
-
 --------------------------------------------------------------------------------
 -- | Snaplet initialization
 initPurs :: SnapletInit b PureScript
@@ -52,6 +51,8 @@
   verbosity   <- liftIO (lookupDefault Verbose config "verbosity")
   bndl        <- liftIO (lookupDefault True config "bundle")
   bundleName  <- liftIO (lookupDefault "app.js" config "bundleName")
+  bundleExe   <- liftIO (lookupDefault "psc-bundle" config "bundleExe")
+  bundleOpts  <- liftIO (lookupDefault mempty config "bundleOpts")
   modules     <- liftIO (lookupDefault ["Main"] config  "modules")
   psPath      <- liftIO (lookupDefault mempty config "pureScriptPath")
   pulpPath    <- findOrInstallPulp psPath =<< liftIO (Cfg.lookup config "pulpPath")
@@ -72,6 +73,8 @@
            , pursVerbosity       = verbosity
            , pursBundle          = bndl
            , pursBundleName      = bundleName
+           , pursBundleExe       = bundleExe
+           , pursBundleOpts      = bundleOpts
            , pursPulpPath        = pulpPath
            , pursPsPath          = psPath
            , pursPsaOpts         = psaOpts
@@ -152,15 +155,28 @@
         True -> do
           preBundleHook pursHooks
           rm_rf (fromText bundlePath)
-          let modules = T.intercalate " -m " pursModules
           echo $ "Bundling everything in " <> bundlePath
-          res <- run "psc-bundle" (["js/**/*.js", "-m"] <> (T.words modules) <>
-                                   ["-o", bundlePath, "-n", "PS"])
+          res <- case (pursBundleExe, pursBundleOpts) of
+                ("psc-bundle", []) ->
+                  let modules = T.intercalate " -m " pursModules
+                      pscBundlExe = maybeM "psc-bundle" (\x -> x <> "/" <> "psc-bundle") pursPsPath
+                  in run (fromText pscBundlExe) (["js/**/*.js", "-m"]
+                      <> (T.words modules)
+                      <> ["-o", bundlePath, "-n", "PS"])
+                ("pulp", [])       ->
+                 let modules = T.intercalate "," pursModules
+                 in run (fromString $ getPulpPath pursPulpPath) (["build", "-I", "src", "--modules"]
+                                                                 <> (T.words modules)
+                                                                 <> ["-t", bundlePath])
+                (exe, args)        -> run (fromText exe) args
           postBundleHook pursHooks
           eC <- lastExitCode
           case (eC == 0) of
             True -> return CompilationSucceeded
             False -> return $ CompilationFailed res
+  where
+    maybeM :: (Eq m, Monoid m) => m -> (m -> m) -> m -> m
+    maybeM alt f x = if x == mempty then alt else f x
 
 --------------------------------------------------------------------------------
 compileWithMode :: Handler b PureScript CompilationOutput
@@ -213,6 +229,14 @@
 # Whether bundle everything in a fat app
 #
 bundle     = true
+#
+# Override the bundle command executable
+#
+bundleExe  = "pulp"
+#
+# Override the bundle command arguments
+#
+bundleOpts = []
 #
 # The path to a specific directory containing the purescript toolchain.
 # Example: snaplet/purs/node_modules/purescript/vendor.
diff --git a/src/Snap/Snaplet/PureScript/Internal.hs b/src/Snap/Snaplet/PureScript/Internal.hs
--- a/src/Snap/Snaplet/PureScript/Internal.hs
+++ b/src/Snap/Snaplet/PureScript/Internal.hs
@@ -25,7 +25,6 @@
 import           Data.Configurator as Cfg
 import           Data.Configurator.Types
 import           Data.Maybe
-import           Data.Monoid
 import           Data.String
 import           Data.String.Conv
 import qualified Data.Text as T
@@ -77,6 +76,10 @@
   -- ^ Whether or not bundle everything in a fat app with a PS namespace.
   , pursBundleName :: !T.Text
   -- ^ The name for your bundled output.
+  , pursBundleExe :: !T.Text
+  -- ^ The name for the program used to bundle your app. (e.g. "pulp", "psc-bundle", etc)
+  , pursBundleOpts :: ![T.Text]
+  -- ^ Override the arguments passed to the bundle executable.
   , pursPulpPath :: !PulpPath
   -- ^ The absolute path to a `pulp` executable. This can be user-provided
   -- or inferred automatically by this snaplet.
