diff --git a/haiji.cabal b/haiji.cabal
--- a/haiji.cabal
+++ b/haiji.cabal
@@ -2,7 +2,7 @@
 --  see http://haskell.org/cabal/users-guide/
 
 name:                haiji
-version:             0.2.1.0
+version:             0.2.1.1
 synopsis:            A typed template engine, subset of jinja2
 description:         Haiji is a template engine which is subset of jinja2.
                      This is designed to free from the unintended rendering result
diff --git a/src/Text/Haiji/Dictionary.hs b/src/Text/Haiji/Dictionary.hs
--- a/src/Text/Haiji/Dictionary.hs
+++ b/src/Text/Haiji/Dictionary.hs
@@ -21,7 +21,7 @@
 import Data.Dynamic
 import qualified Data.HashMap.Strict as M
 import Data.Maybe
-import Data.Monoid
+import Data.Monoid ()
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as LT
 import qualified Data.Text.Lazy.Encoding as LT
diff --git a/src/Text/Haiji/Parse.hs b/src/Text/Haiji/Parse.hs
--- a/src/Text/Haiji/Parse.hs
+++ b/src/Text/Haiji/Parse.hs
@@ -6,7 +6,6 @@
        ( Jinja2(..)
        , parseString
        , parseFile
-       , runQWF
        ) where
 
 #if MIN_VERSION_base(4,8,0)
@@ -39,15 +38,12 @@
 parseString = (toJinja2 <$>) . either error readAllFile . parseOnly parser . T.pack
 
 class Quasi q => QuasiWithFile q where
-  runQWF :: q a -> Q a
   withFile :: FilePath -> q LT.Text
 
 instance QuasiWithFile IO where
-  runQWF = runIO
   withFile file = LT.readFile file
 
 instance QuasiWithFile Q where
-  runQWF = id
   withFile file = runQ (addDependentFile file >> runIO (withFile file))
 
 parseFileWith :: QuasiWithFile q => (LT.Text -> LT.Text) -> FilePath -> q Jinja2
@@ -79,9 +75,7 @@
 parseFile = parseFileWith deleteLastOneLF where
   deleteLastOneLF :: LT.Text -> LT.Text
   deleteLastOneLF xs
-    | "%}\n" `LT.isSuffixOf` xs     = LT.init xs
-    | "\n\n" `LT.isSuffixOf` xs     = LT.init xs
-    | not ("\n" `LT.isSuffixOf` xs) = xs `LT.append` "\n"
+    | "\n" `LT.isSuffixOf` xs       = LT.init xs
     | otherwise                     = xs
 
 parseIncludeFile :: QuasiWithFile q => FilePath -> q Jinja2
diff --git a/src/Text/Haiji/Runtime.hs b/src/Text/Haiji/Runtime.hs
--- a/src/Text/Haiji/Runtime.hs
+++ b/src/Text/Haiji/Runtime.hs
@@ -49,30 +49,33 @@
      obj <- eval x
      case obj of
        JSON.String s -> return $ (`escapeBy` esc) $ toLT s
-       JSON.Number n -> case floatingOrInteger n of
-         Left  r -> undefined
+       JSON.Number n -> case floatingOrInteger (n :: Scientific) of
+         Left  r -> let _ = (r :: Double) in error "invalid value type"
          Right i -> return $ (`escapeBy` esc) $ toLT (i :: Integer)
        _ -> undefined
 haijiAST  env  parentBlock  children (Condition p ts fs) =
-  do JSON.Bool cond <- eval p
-     if cond
-     then haijiASTs env parentBlock children ts
-     else maybe (return "") (haijiASTs env parentBlock children) fs
+  do b <- eval p
+     case b of
+       JSON.Bool True  -> haijiASTs env parentBlock children ts
+       JSON.Bool False -> maybe (return "") (haijiASTs env parentBlock children) fs
+       _               -> error "invalid condition type"
 haijiAST  env  parentBlock  children (Foreach k xs loopBody elseBody) =
-  do JSON.Array dicts <- eval xs
-     p <- ask
-     let len = V.length dicts
-     if 0 < len
-     then return $ LT.concat
-                   [ runReader (haijiASTs env parentBlock children loopBody)
-                     (let JSON.Object obj = p
-                      in  JSON.Object
-                          $ HM.insert "loop" (loopVariables len ix)
-                          $ HM.insert (T.pack $ show k) x obj)
-                   | (ix, x) <- zip [0..] (V.toList dicts)
-                   ]
-     else maybe (return "") (haijiASTs env parentBlock children) elseBody
-
+  do arr <- eval xs
+     case arr of
+       JSON.Array dicts -> do
+         p <- ask
+         let len = V.length dicts
+         if 0 < len
+         then return $ LT.concat
+              [ runReader (haijiASTs env parentBlock children loopBody)
+                          (let JSON.Object obj = p
+                           in  JSON.Object
+                               $ HM.insert "loop" (loopVariables len ix)
+                               $ HM.insert (T.pack $ show k) x obj)
+              | (ix, x) <- zip [0..] (V.toList dicts)
+              ]
+         else maybe (return "") (haijiASTs env parentBlock children) elseBody
+       _                -> error "invalid array type"
 haijiAST _env _parentBlock _children (Raw raw) = return $ LT.pack raw
 haijiAST _env _parentBlock _children (Base _asts) = undefined
 haijiAST  env  parentBlock  children (Block _base name _scoped body) =
diff --git a/test/tests.hs b/test/tests.hs
--- a/test/tests.hs
+++ b/test/tests.hs
@@ -17,7 +17,7 @@
 import Text.Haiji.Runtime
 import Data.Aeson
 import Data.Default
-import Data.Monoid
+import Data.Monoid ()
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as LT
 import qualified Data.Text.Lazy.IO as LT
@@ -31,17 +31,16 @@
 
 jinja2 :: Show a => FilePath -> a -> IO LT.Text
 jinja2 template dict = do
-  (code, out, err) <- readProcessWithExitCode "python2" [] script
+  (code, out, err) <- readProcessWithExitCode "python3" [] script
   unless (code == ExitSuccess) $ LT.putStrLn err
   return out where
     script = LT.unlines
-             [ "import sys, codecs, json"
+             [ "import json"
              , "from jinja2 import Environment, PackageLoader"
-             , "sys.stdout = codecs.lookup('utf_8')[-1](sys.stdout)"
              , "env = Environment(loader=PackageLoader('example', '.'),autoescape=True)"
              , "template = env.get_template('" <> LT.pack template <> "')"
              , "object = json.loads(" <> LT.pack (show $ show dict) <> ")"
-             , "print template.render(object),"
+             , "print(template.render(object),end='')"
              , "exit()"
              ]
 
@@ -75,44 +74,44 @@
 case_empty :: Assertion
 case_empty = do
   expected <- jinja2 "test/empty.tmpl" empty
-  expected @=? render $(haijiFile def "test/empty.tmpl") empty
   tmpl <- readTemplateFile def "test/empty.tmpl"
   expected @=? render tmpl (toJSON empty)
+  expected @=? render $(haijiFile def "test/empty.tmpl") empty
 
 case_lf1 :: Assertion
 case_lf1 = do
   expected <- jinja2 "test/lf1.tmpl" empty
-  expected @=? render $(haijiFile def "test/lf1.tmpl") empty
   tmpl <- readTemplateFile def "test/lf1.tmpl"
   expected @=? render tmpl (toJSON empty)
+  expected @=? render $(haijiFile def "test/lf1.tmpl") empty
 
 case_lf2 :: Assertion
 case_lf2 = do
   expected <- jinja2 "test/lf2.tmpl" empty
-  expected @=? render $(haijiFile def "test/lf2.tmpl") empty
   tmpl <- readTemplateFile def "test/lf2.tmpl"
   expected @=? render tmpl (toJSON empty)
+  expected @=? render $(haijiFile def "test/lf2.tmpl") empty
 
 case_line_without_newline :: Assertion
 case_line_without_newline = do
   expected <- jinja2 "test/line_without_newline.tmpl" empty
-  expected @=? render $(haijiFile def "test/line_without_newline.tmpl") empty
   tmpl <- readTemplateFile def "test/line_without_newline.tmpl"
   expected @=? render tmpl (toJSON empty)
+  expected @=? render $(haijiFile def "test/line_without_newline.tmpl") empty
 
 case_line_with_newline :: Assertion
 case_line_with_newline = do
   expected <- jinja2 "test/line_with_newline.tmpl" empty
-  expected @=? render $(haijiFile def "test/line_with_newline.tmpl") empty
   tmpl <- readTemplateFile def "test/line_with_newline.tmpl"
   expected @=? render tmpl (toJSON empty)
+  expected @=? render $(haijiFile def "test/line_with_newline.tmpl") empty
 
 case_variables :: Assertion
 case_variables = do
   expected <- jinja2 "test/variables.tmpl" dict
-  expected @=? render $(haijiFile def "test/variables.tmpl") dict
   tmpl <- readTemplateFile def "test/variables.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/variables.tmpl") dict
     where
       dict = [key|foo|] ("normal" :: T.Text) `merge`
              [key|_foo|] ("start '_'" :: LT.Text) `merge`
@@ -123,9 +122,9 @@
 case_HTML_escape :: Assertion
 case_HTML_escape = do
   expected <- jinja2 "test/HTML_escape.tmpl" dict
-  expected @=? render $(haijiFile def "test/HTML_escape.tmpl") dict
   tmpl <- readTemplateFile def "test/HTML_escape.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/HTML_escape.tmpl") dict
     where
       dict = [key|foo|] ([' '..'\126'] :: String)
 
@@ -135,25 +134,25 @@
              [key|bar|] bar `merge`
              [key|baz|] baz
   expected <- jinja2 "test/condition.tmpl" dict
-  expected @=? render $(haijiFile def "test/condition.tmpl") dict
   tmpl <- readTemplateFile def "test/condition.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/condition.tmpl") dict
 
 case_foreach :: Assertion
 case_foreach = do
   expected <- jinja2 "test/foreach.tmpl" dict
-  expected @=? render $(haijiFile def "test/foreach.tmpl") dict
   tmpl <- readTemplateFile def "test/foreach.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/foreach.tmpl") dict
     where
       dict = [key|foo|] ([0,2..10] :: [Int])
 
 case_foreach_shadowing :: Assertion
 case_foreach_shadowing = do
   expected <- jinja2 "test/foreach.tmpl" dict
-  expected @=? render $(haijiFile def "test/foreach.tmpl") dict
   tmpl <- readTemplateFile def "test/foreach.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/foreach.tmpl") dict
   False @=? ("bar" `LT.isInfixOf` expected)
     where
       dict = [key|foo|] ([0,2..10] :: [Int]) `merge`
@@ -162,9 +161,9 @@
 case_foreach_else_block :: Assertion
 case_foreach_else_block = do
   expected <- jinja2 "test/foreach_else_block.tmpl" dict
-  expected @=? render $(haijiFile def "test/foreach_else_block.tmpl") dict
   tmpl <- readTemplateFile def "test/foreach_else_block.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/foreach_else_block.tmpl") dict
     where
       dict = [key|foo|] ([] :: [Int])
 
@@ -174,18 +173,18 @@
   testInclude (["","\n","\n\n"] :: [String]) where
     testInclude xs = do
       expected <- jinja2 "test/include.tmpl" dict
-      expected @=? render $(haijiFile def "test/include.tmpl") dict
       tmpl <- readTemplateFile def "test/include.tmpl"
       expected @=? render tmpl (toJSON dict)
+      expected @=? render $(haijiFile def "test/include.tmpl") dict
         where
           dict = [key|foo|] xs
 
 case_raw :: Assertion
 case_raw = do
   expected <- jinja2 "test/raw.tmpl" dict
-  expected @=? render $(haijiFile def "test/raw.tmpl") dict
   tmpl <- readTemplateFile def "test/raw.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/raw.tmpl") dict
     where
       dict = [key|foo|] ([0,2..10] :: [Int]) `merge`
              [key|bar|] ("bar" :: String)
@@ -193,36 +192,36 @@
 case_loop_variables :: Assertion
 case_loop_variables = do
   expected <- jinja2 "test/loop_variables.tmpl" dict
-  expected @=? render $(haijiFile def "test/loop_variables.tmpl") dict
   tmpl <- readTemplateFile def "test/loop_variables.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/loop_variables.tmpl") dict
     where
       dict = [key|foo|] ([0,2..10] :: [Integer])
 
 case_whitespace_control :: Assertion
 case_whitespace_control = do
   expected <- jinja2 "test/whitespace_control.tmpl" dict
-  expected @=? render $(haijiFile def "test/whitespace_control.tmpl") dict
   tmpl <- readTemplateFile def "test/whitespace_control.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/whitespace_control.tmpl") dict
     where
       dict = [key|seq|] ([0,2..10] :: [Integer])
 
 case_comment :: Assertion
 case_comment = do
   expected <- jinja2 "test/comment.tmpl" dict
-  expected @=? render $(haijiFile def "test/comment.tmpl") dict
   tmpl <- readTemplateFile def "test/comment.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/comment.tmpl") dict
     where
       dict = [key|seq|] ([0,2..10] :: [Integer])
 
 case_extends :: Assertion
 case_extends = do
   expected <- jinja2 "test/child.tmpl" dict
-  expected @=? render $(haijiFile def "test/child.tmpl") dict
   tmpl <- readTemplateFile def "test/child.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/child.tmpl") dict
     where
       dict = [key|foo|] ("foo" :: T.Text) `merge`
              [key|bar|] ("bar" :: T.Text) `merge`
@@ -231,9 +230,9 @@
 case_many_variables :: Assertion
 case_many_variables = do
   expected <- jinja2 "test/many_variables.tmpl" dict --
-  expected @=? render $(haijiFile def "test/many_variables.tmpl") dict
   tmpl <- readTemplateFile def "test/many_variables.tmpl"
   expected @=? render tmpl (toJSON dict)
+  expected @=? render $(haijiFile def "test/many_variables.tmpl") dict
     where
       dict = [key|a|] ("b" :: T.Text) `merge`
              [key|b|] ("b" :: LT.Text) `merge`
