diff --git a/simple-templates.cabal b/simple-templates.cabal
--- a/simple-templates.cabal
+++ b/simple-templates.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                simple-templates
-version:             1.0.0
+version:             2.0.0
 synopsis:            A basic template language for the Simple web framework
 description:
   A basic template language for the Simple web framework. The language supports
diff --git a/src/Web/Simple/Templates/Language.hs b/src/Web/Simple/Templates/Language.hs
--- a/src/Web/Simple/Templates/Language.hs
+++ b/src/Web/Simple/Templates/Language.hs
@@ -37,6 +37,8 @@
 
 import qualified Data.HashMap.Strict as H
 import Data.Aeson
+import qualified Data.Aeson.Key as K
+import qualified Data.Aeson.KeyMap as K
 import Data.Maybe
 import Data.Scientific
 import Data.Text (Text)
@@ -68,13 +70,13 @@
     ASTVar ident ->
       if ident == "@" then global else
         case global of
-          Object obj -> fromMaybe Null $ H.lookup ident obj
+          Object obj -> fromMaybe Null $ K.lookup (K.fromText ident) obj
           _ -> Null
 
     ASTIndex objAst idents ->
       foldl (\val ident -> 
         case val of
-          Object obj -> fromMaybe Null $ H.lookup ident obj
+          Object obj -> fromMaybe Null $ K.lookup (K.fromText ident) obj
           _ -> Null) (evaluateAST fm global objAst) idents
 
     ASTArray asts -> Array $ V.map (evaluateAST fm global) asts
@@ -98,7 +100,7 @@
     Bool False -> String ""
     Array vec ->
       String $ go (zip [0..(V.length vec)] $ V.toList vec) mempty
-    Object obj -> String $ go (H.toList obj) mempty
+    Object obj -> String $ go (K.toList obj) mempty
     v -> evaluateAST fm (replaceVar global valName v) body
   where sep = maybe (String "") (evaluateAST fm global) msep
         val = evaluateAST fm global lst
@@ -118,8 +120,8 @@
           maybe global (\k -> replaceVar global k $ toJSON v) mkeyName
 
 replaceVar :: Value -> Identifier -> Value -> Value
-replaceVar (Object orig) varName newVal = Object $ H.insert varName newVal orig
-replaceVar _ varName newVal = object [varName .= newVal]
+replaceVar (Object orig) varName newVal = Object $ K.insert (K.fromText varName) newVal orig
+replaceVar _ varName newVal = object [(K.fromText varName) .= newVal]
 
 evaluate :: AST -> Template
 evaluate ast = Template $ \fm global ->
