diff --git a/heist.cabal b/heist.cabal
--- a/heist.cabal
+++ b/heist.cabal
@@ -1,5 +1,5 @@
 name:           heist
-version:        0.5.2.1
+version:        0.5.3
 synopsis:       An xhtml templating system
 description:    An xhtml templating system
 license:        BSD3
@@ -68,6 +68,7 @@
     Text.Templating.Heist.Splices,
     Text.Templating.Heist.Splices.Apply,
     Text.Templating.Heist.Splices.Bind,
+    Text.Templating.Heist.Splices.BindStrict,
     Text.Templating.Heist.Splices.Cache,
     Text.Templating.Heist.Splices.Html,
     Text.Templating.Heist.Splices.Ignore,
@@ -94,7 +95,7 @@
     process,
     random,
     text >= 0.10 && < 0.12,
-    time >= 1.1 && < 1.3,
+    time >= 1.1 && < 1.4,
     transformers,
     xmlhtml == 0.1.*
 
diff --git a/src/Text/Templating/Heist.hs b/src/Text/Templating/Heist.hs
--- a/src/Text/Templating/Heist.hs
+++ b/src/Text/Templating/Heist.hs
@@ -85,6 +85,7 @@
   , setTemplates
   , loadTemplates
   , hasTemplate
+  , addTemplatePathPrefix
 
     -- * Hook functions
     -- $hookDoc
diff --git a/src/Text/Templating/Heist/Internal.hs b/src/Text/Templating/Heist/Internal.hs
--- a/src/Text/Templating/Heist/Internal.hs
+++ b/src/Text/Templating/Heist/Internal.hs
@@ -661,3 +661,12 @@
     return $ insertTemplate tp t' ts
 
 
+------------------------------------------------------------------------------
+-- | 
+addTemplatePathPrefix :: ByteString
+                      -> TemplateState m -> TemplateState m
+addTemplatePathPrefix dir ts =
+    ts { _templateMap = Map.mapKeys f $ _templateMap ts }
+  where
+    f ps = ps ++ [dir]
+
diff --git a/src/Text/Templating/Heist/Splices.hs b/src/Text/Templating/Heist/Splices.hs
--- a/src/Text/Templating/Heist/Splices.hs
+++ b/src/Text/Templating/Heist/Splices.hs
@@ -1,6 +1,7 @@
 module Text.Templating.Heist.Splices
   ( module Text.Templating.Heist.Splices.Apply
   , module Text.Templating.Heist.Splices.Bind
+  , module Text.Templating.Heist.Splices.Cache
   , module Text.Templating.Heist.Splices.Html
   , module Text.Templating.Heist.Splices.Ignore
   , module Text.Templating.Heist.Splices.Markdown
diff --git a/src/Text/Templating/Heist/Splices/Apply.hs b/src/Text/Templating/Heist/Splices/Apply.hs
--- a/src/Text/Templating/Heist/Splices/Apply.hs
+++ b/src/Text/Templating/Heist/Splices/Apply.hs
@@ -3,7 +3,6 @@
 ------------------------------------------------------------------------------
 import           Data.Maybe
 import           Data.Text (Text)
-import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import qualified Text.XmlHtml as X
 
@@ -26,6 +25,11 @@
 ------------------------------------------------------------------------------
 -- | Raw core of apply functionality.  This is abstracted for use in other
 -- places like an enhanced (from the original) bind
+rawApply :: (Monad m)
+         => [X.Node]
+         -> TPath
+         -> [X.Node]
+         -> TemplateMonad m Template
 rawApply calledNodes newContext paramNodes = do
     st <- getTS  -- Can't use localTS here because the modifier is not pure
     processedParams <- runNodeList paramNodes
diff --git a/src/Text/Templating/Heist/Splices/BindStrict.hs b/src/Text/Templating/Heist/Splices/BindStrict.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Templating/Heist/Splices/BindStrict.hs
@@ -0,0 +1,32 @@
+module Text.Templating.Heist.Splices.BindStrict where
+
+------------------------------------------------------------------------------
+import           Data.Text (Text)
+import qualified Text.XmlHtml as X
+
+------------------------------------------------------------------------------
+import           Text.Templating.Heist.Internal
+import           Text.Templating.Heist.Splices.Apply
+import           Text.Templating.Heist.Splices.Bind
+import           Text.Templating.Heist.Types
+
+-- | Default name for the bind splice.
+bindStrictTag :: Text
+bindStrictTag = "bindStrict"
+
+
+------------------------------------------------------------------------------
+-- | Implementation of the bind splice.
+bindStrictImpl :: Monad m => Splice m
+bindStrictImpl = do
+    node <- getParamNode
+    cs <- runChildren
+    maybe (return ()) (add cs)
+          (X.getAttribute bindAttr node)
+    return []
+
+  where
+    add cs nm = modifyTS $ bindSplice nm $ do
+        caller <- getParamNode
+        ctx <- getContext
+        rawApply cs ctx (X.childNodes caller)
diff --git a/src/Text/Templating/Heist/Splices/Html.hs b/src/Text/Templating/Heist/Splices/Html.hs
--- a/src/Text/Templating/Heist/Splices/Html.hs
+++ b/src/Text/Templating/Heist/Splices/Html.hs
@@ -1,7 +1,6 @@
 module Text.Templating.Heist.Splices.Html where
 
 ------------------------------------------------------------------------------
-import           Data.List
 import           Data.Maybe
 import           Data.Text (Text)
 import qualified Text.XmlHtml as X
diff --git a/test/heist-testsuite.cabal b/test/heist-testsuite.cabal
--- a/test/heist-testsuite.cabal
+++ b/test/heist-testsuite.cabal
@@ -9,7 +9,7 @@
 
   build-depends:
     QuickCheck >= 2,
-    attoparsec >= 0.8.1 && < 0.9,
+    attoparsec >= 0.8.1 && < 0.10,
     attoparsec-text >= 0.8 && < 0.9,
     base >= 4 && < 5,
     blaze-builder >= 0.2 && <0.4,
