diff --git a/src/Blog.hs b/src/Blog.hs
index d7a53e1f4..538dd9212 100644
--- a/src/Blog.hs
+++ b/src/Blog.hs
@@ -1,25 +1,20 @@
-{-# LANGUAGE OverloadedStrings, ScopedTypeVariables, DeriveDataTypeable, RecordWildCards #-}
+{-# LANGUAGE OverloadedStrings, ScopedTypeVariables, DeriveDataTypeable, QuasiQuotes, RecordWildCards #-}
 
 module Blog where
 
-import           Control.Monad (when, unless)
-import           Data.Data (Data, Typeable)
-import           Data.List (intersperse)
-import           Data.Monoid (mempty)
-import           Data.Text (Text)
-import qualified Data.Text as T
-import           Data.Time
-import           Network.Captcha.ReCaptcha
-import           System.Locale (defaultTimeLocale)
-import           Text.Blaze (toValue, preEscapedText, preEscapedString)
-import           Text.Blaze.Html5 (Html, (!), a, form, input, p, toHtml, label)
-import           Text.Blaze.Html5.Attributes (action, enctype, href, name, size, type_, value)
-import qualified Text.Blaze.Html5 as H
-import qualified Text.Blaze.Html5.Attributes as A
-import           Text.XHtml.Strict (showHtmlFragment)
+import Control.Monad (when, unless)
+import Data.Data (Data, Typeable)
+import Data.List (intersperse)
+import Data.Monoid (mempty)
+import Data.Text (Text, append, pack, empty)
+import Data.Time
+import Network.Captcha.ReCaptcha
+import System.Locale (defaultTimeLocale)
+import Text.Hamlet
+import Locales
+import BlogDB
 
-import           Locales
-import           BlogDB
+import qualified Data.Text as T
 
 -- custom list functions
 intersperse' :: a -> [a] -> [a]
@@ -28,21 +23,12 @@ intersperse' sep l = sep : intersperse sep l
 replace :: Eq a => a -> a -> [a] -> [a]
 replace x y = map (\z -> if z == x then y else z)
 
+show' :: Show a => a -> Text
+show' = pack . show
+
+data BlogURL = BlogURL
+
 -- javascript and others
-
-captcha :: Html
-captcha = H.div ! A.class_ "cCaptcha" $
-          do H.script ! A.src "http://api.recaptcha.net/challenge?k=6LfQXccSAAAAAIjKm26XlFnBMAgvaKlOAjVWEEnM" ! A.type_ "text/javascript" $ ""
-             H.noscript $ H.iframe ! A.src "http://api.recaptcha.net/noscript?k=6LfQXccSAAAAAIjKm26XlFnBMAgvaKlOAjVWEEnM" ! A.height "300" !
-                               A.width "500" ! A.seamless "" $ do
-                                    H.br
-                                    H.textarea ! A.name "recaptcha_challenge_field" ! A.rows "3" ! A.cols "40" $ ""
-                                    H.input ! A.type_ "hidden" ! A.name "recaptcha_response_field" ! A.value "manual_challenge"
-
-captchaOptions :: BlogLang ->  Html
-captchaOptions lang = H.script ! A.type_ "text/javascript" $ toHtml $ 
-                        T.concat ["var RecaptchaOptions = { theme: 'clean', lang: '", showLangText lang, "'};"]
-
 analytics :: Text
 analytics = T.pack $ unlines [""]
 
 -- blog HTML
-
 blogTemplate :: BlogLang -> Text -> Html -> Html
-blogTemplate lang t_append body = H.docTypeHtml $ do --add body
-    H.head $ do
-        H.title $ (toHtml $ blogTitle lang t_append)
-        H.link ! A.rel "alternate" ! A.type_ "application/rss+xml" ! A.title "RSS-Feed" ! A.href (toValue feedURL)
-        H.link ! A.rel "stylesheet" ! A.type_ "text/css" ! A.href "/static/blogv33.css" ! A.media "all"
-        --H.link ! A.rel "stylesheet" ! A.type_ "text/css" ! A.href "/res/blogstyle.css" ! A.media "all"
-        H.meta ! A.httpEquiv "content-type" ! A.content "text/html;charset=UTF-8"
-        --H.style ! A.type_ "text/css" ! A.title "iOS iMessage" ! A.media "screen and (max-device-width: 1024px)" $ "#cosx{display:none;}"
-        preEscapedText analytics
-    H.body $ do
-        H.div ! A.class_ "header" $ do
-            H.a ! A.class_ "btitle" ! A.href (toValue $ "/" ++ show lang) $ 
-                toHtml $ blogTitle lang ""
-            H.p ! A.style "clear: both;" $ do
-                H.span ! A.class_ "contacts" ! A.id "cosx" $ contactInfo iMessage
-                -- H.span ! A.id "cios" ! A.style "display:none;" $ H.b $ contactInfo "sms:tazjin@me.com"
-                H.span ! A.class_ "righttext" $ preEscapedText $ rightText lang
-        H.div ! A.class_ "middle" $ do
-            body
-            H.div ! A.class_ "footer" $ do
-                showFooter lang $ T.pack version
-                H.div ! A.class_ "centerbox" $
-                    H.span ! A.style "font-size: 17px; font-family: Helvetica;" $ "ಠ_ಠ"
-                    --H.img ! A.src "http://cl.ly/F9m4/idiots.png" ! A.alt ""
-    where
-        contactInfo (imu :: Text) = do
-            toHtml $ contactText lang
-            H.a ! A.class_ "link" ! A.href (toValue mailTo) $ "Mail"
-            ", "
-            H.a ! A.class_ "link" ! A.href (toValue twitter) ! A.target "_blank" $ "Twitter"
-            toHtml $ orText lang
-            H.a ! A.class_ "link" ! A.href (toValue imu) ! A.target "_blank" $ "iMessage"
-            "."
-        feedURL = "/" ++ show lang ++ "/rss.xml"
-
-renderEntries :: Bool -> [Entry] -> Text -> Maybe Html -> Html
-renderEntries showAll entries topText footerLinks = do
-    H.span ! A.class_ "innerTitle" $ toHtml topText
-    H.div ! A.class_ "innerContainer" $ do
-        H.ul ! A.style "max-width: 57em;" $ if' showAll
-            (mapM_ showEntry entries)
-            (mapM_ showEntry $ take 6 entries)
-        getFooterLinks footerLinks
-    where
-        showEntry :: Entry -> Html
-        showEntry e = H.li $ do 
-            entryLink e $ T.pack $ show(length $ comments e)
-            preEscapedText $ T.append " " $ btext e
-            when ( mtext e /= T.empty ) $
-                H.p $ entryLink e $ readMore $ lang e
-            unless ( mtext e /= T.empty ) $
-                preEscapedText "
 "
-        entryLink :: Entry -> Text -> Html
-        entryLink e s = H.a ! A.href (toValue $ concat $ intersperse' "/" $ linkElems e) $
-                        toHtml (T.concat ["[", s, "]"])
-        linkElems e = [show(lang e), show $ entryId e]
-        getFooterLinks (Just h) = h
-        getFooterLinks Nothing = mempty
-
-renderEntry :: Entry -> Html
-renderEntry (Entry{..}) = do
-    H.span ! A.class_ "innerTitle" $ toHtml $ title
-    H.span ! A.class_ "righttext" $ H.i $ toHtml $ woText
-    H.div ! A.class_ "innerContainer" $ do
-        H.article $ H.ul ! A.style "max-width: 57em;" $ H.li $ do
-            preEscapedText $ btext
-            H.p $ preEscapedText $ mtext
-        H.div ! A.class_ "innerBoxComments" $ do
-            H.div ! A.class_ "cHead" $ toHtml $ cHead lang -- ! A.style "font-size:large;font-weight:bold;"
-            H.ul ! A.style "max-width: 57em;" $ renderComments comments lang
-            renderCommentBox lang entryId
-  where
-    woText = flip T.append author $ T.pack $ (formatTime defaultTimeLocale (eTimeFormat lang) edate) 
-
-renderCommentBox :: BlogLang -> EntryId -> Html
-renderCommentBox cLang cId = do
-    H.div ! A.class_ "cHead" $ toHtml $ cwHead cLang
-    captchaOptions cLang
-    H.form ! A.method "POST" ! A.action (toValue $ "/" ++ (show cLang) ++  "/postcomment/" ++ show cId) $ do
-        H.p $ H.input ! A.name "cname" ! A.placeholder "Name" ! A.class_ "cInput"
-        H.p $ H.label $ H.textarea ! A.name "ctext" ! A.cols "50" ! A.rows "13" ! A.class_ "cInput" !
-                        A.placeholder (toValue $ cTextPlaceholder cLang) $ mempty
-        -- H.p $ H.label $ captcha
-        H.p $ H.input ! A.class_ "cInput" ! A.style "width: 120px;" ! A.type_ "submit" ! A.value (toValue $ cSend cLang)
-
-renderComments :: [Comment] -> BlogLang -> Html
-renderComments [] lang = H.li $ toHtml $ noComments lang
-renderComments comments lang = mapM_ showComment comments
-    where
-        showComment :: Comment -> Html
-        showComment (Comment{..}) = H.li $ do
-            H.i $ toHtml $ T.append cauthor ": "
-            preEscapedText ctext
-            H.p ! A.class_ "tt" $ toHtml $ timeString cdate
-        timeString t = formatTime defaultTimeLocale (cTimeFormat lang) t
-
-showLinks :: Maybe Int -> BlogLang -> Html
-showLinks (Just i) lang
-    | ( i > 1) = H.div ! A.class_ "centerbox" $ do
-        H.a ! A.href (toValue $ "/" ++ show lang ++ "/?page=" ++ show (i+1)) $ 
-                                toHtml $ backText lang
-        toHtml (" -- " :: Text)
-        H.a ! A.href (toValue $ "/" ++ show lang ++ "/?page=" ++ show (i-1)) $
-                                toHtml $ nextText lang
-    | ( i <= 1 ) = showLinks Nothing lang 
-showLinks Nothing lang = H.div ! A.class_ "centerbox" $
-    H.a ! A.href (toValue $ "/" ++ show lang ++ "/?page=2") $ 
-                                toHtml $  backText lang
+blogTemplate lang t_append body = [shamlet|
+$doctype 5
+ 
+  #{blogTitle lang t_append}
+  
+  
+  
+  #{analytics}
+ 
+