diff --git a/heist-aeson.cabal b/heist-aeson.cabal
--- a/heist-aeson.cabal
+++ b/heist-aeson.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.4
+Version:             0.5
 
 -- A short (one-line) description of the package.
 Synopsis:            Use JSON directly from Heist templates.
@@ -57,7 +57,7 @@
 
   -- Packages needed in order to build this package.
   Build-depends:       base >= 4 && < 5, aeson, monads-fd, text, xmlhtml,
-                       bytestring, vector, containers, blaze-builder, heist
+                       bytestring, vector, containers, blaze-builder, heist >= 0.5.1.1
   
   ghc-options:         -fwarn-unused-binds -fwarn-unused-imports
 
diff --git a/src/Text/Templating/Heist/Aeson.hs b/src/Text/Templating/Heist/Aeson.hs
--- a/src/Text/Templating/Heist/Aeson.hs
+++ b/src/Text/Templating/Heist/Aeson.hs
@@ -11,17 +11,14 @@
     ) where
 
 import Data.Aeson                            ( Value(..), Array )
-import Text.Templating.Heist                 ( TemplateState, TemplateMonad
-                                             , Splice, getParamNode, MIMEType
-                                             , renderTemplate, bindSplices
-                                             , runChildren )
+import Text.Templating.Heist
 import Blaze.ByteString.Builder              ( Builder )
 import qualified Data.Map as Map             ( lookup )
 import qualified Data.Vector as V            ( forM, toList )
 
 import qualified Data.ByteString as Strict   ( ByteString )
 
-import qualified Text.XmlHtml as X           ( Node(..), elementAttrs )
+import qualified Text.XmlHtml as X
 import qualified Data.Text as T              ( Text, append, pack, splitOn )
 
 import Control.Monad.Reader                  ( ReaderT, ask, local, runReaderT )
@@ -44,7 +41,7 @@
 
 withValue :: Monad m => Value -> JsonSpliceT m -> JsonSpliceT m
 withValue value
-    = local $ \input -> input{jsonCurrent = value, jsonHistory = value : jsonHistory input}
+    = local $ \input -> input{jsonCurrent = value, jsonHistory = jsonCurrent input : jsonHistory input}
 
 jsonSplice :: Monad m => JsonSpliceT m
 jsonSplice
@@ -134,9 +131,22 @@
                   Object object | Just value <- Map.lookup key object
                     -> worker value (current:history) xs
                   _ -> Nothing
-                              
+
+bindStrict :: Monad m => Splice m
+bindStrict = do
+    node <- getParamNode
+    cs <- runChildren
+    maybe (return ()) (add cs)
+          (X.getAttribute "tag" node)
+    return []
+
+  where
+    add cs nm = modifyTS $ bindSplice nm $ do
+        return cs
+
 addHeistAeson :: Monad m => JsonState m -> JsonState m
-addHeistAeson = bindSplices [ ("json", jsonSplice)]
+addHeistAeson = bindSplices [ ("json", jsonSplice)
+                            , ("bind", bindStrict) ]
 
 renderJsonTemplate :: Monad m => JsonState m -> Strict.ByteString -> Value -> m (Maybe (Builder, MIMEType))
 renderJsonTemplate state tplName json
diff --git a/tests/bind.expected b/tests/bind.expected
new file mode 100644
--- /dev/null
+++ b/tests/bind.expected
@@ -0,0 +1,6 @@
+&#10;
+
+  
+value
+
+
diff --git a/tests/bind.json b/tests/bind.json
new file mode 100644
--- /dev/null
+++ b/tests/bind.json
@@ -0,0 +1,2 @@
+{"key": "value"
+,"level1": {"level2": {"level3": "Third level"}}}
diff --git a/tests/bind.tpl b/tests/bind.tpl
new file mode 100644
--- /dev/null
+++ b/tests/bind.tpl
@@ -0,0 +1,7 @@
+<bind tag="val">
+<json value="key"/>
+</bind>
+
+<json section="level1/level2">
+  <val/>
+</json>
