diff --git a/Language/Javascript/JMacro/Base.hs b/Language/Javascript/JMacro/Base.hs
--- a/Language/Javascript/JMacro/Base.hs
+++ b/Language/Javascript/JMacro/Base.hs
@@ -36,17 +36,24 @@
   ) where
 import Prelude hiding (tail, init, head, last, minimum, maximum, foldr1, foldl1, (!!), read)
 import Control.Applicative hiding (empty)
+import Control.Arrow (second)
+import Control.Monad.State.Strict
+import Control.Monad.Identity
+
 import Data.Function
+import Data.Char (toLower)
 import Data.Maybe (fromMaybe)
 import qualified Data.Set as S
 import qualified Data.Map as M
-import Text.PrettyPrint.HughesPJ
-import Control.Monad.State.Strict
-import Safe
-import Control.Monad.Identity
 import Data.Generics
 import Data.Monoid
 
+import Safe
+import Text.JSON
+import Text.PrettyPrint.HughesPJ
+
+import Web.Encodings
+
 import Language.Javascript.JMacro.Types
 
 {--------------------------------------------------------------------
@@ -57,7 +64,11 @@
 
 inIdentSupply f x = IS $ f (runIdentSupply x)
 
-instance Data a => Data (IdentSupply a)
+instance Data a => Data (IdentSupply a) where
+    gunfold _ _ _ = error "gunfold IdentSupply"
+    toConstr _ = error "toConstr IdentSupply"
+    dataTypeOf _ = mkNoRepType "IdentSupply"
+
 instance Functor IdentSupply where
     fmap f x = inIdentSupply (fmap f) x
 
@@ -479,7 +490,7 @@
     jsToDoc (JList xs) = brackets . fsep . punctuate comma $ map jsToDoc xs
     jsToDoc (JDouble d) = double d
     jsToDoc (JInt i) = integer i
-    jsToDoc (JStr s) = text ("\""++s++"\"")
+    jsToDoc (JStr s) = text ("\""++encodeJson s++"\"")
     jsToDoc (JRegEx s) = text ("/"++s++"/")
     jsToDoc (JHash m)
             | M.null m = text "{}"
@@ -577,8 +588,8 @@
 
 instance ToJExpr Char where
     toJExpr = ValExpr . JStr . (:[])
-    toJExprFromList = ValExpr . JStr . escQuotes
-        where escQuotes = tailDef "" . initDef "" . show
+    toJExprFromList = ValExpr . JStr
+--        where escQuotes = tailDef "" . initDef "" . show
 
 instance (ToJExpr a, ToJExpr b) => ToJExpr (a,b) where
     toJExpr (a,b) = ValExpr . JList $ [toJExpr a, toJExpr b]
@@ -703,3 +714,14 @@
 
 nullStat :: JStat
 nullStat = BlockStat []
+
+
+-- JSON instance
+instance ToJExpr JSValue where
+    toJExpr JSNull             = ValExpr $ JVar $ StrI "null"
+    toJExpr (JSBool b)         = ValExpr $ JVar $ StrI $ map toLower (show b)
+    toJExpr (JSRational b rat) = ValExpr $ JDouble $ realToFrac rat
+    toJExpr (JSString s)       = ValExpr $ JStr $ fromJSString s
+    toJExpr (JSArray vs)       = ValExpr $ JList $ map toJExpr vs
+    toJExpr (JSObject obj)     = ValExpr $ JHash $ M.fromList $ map (second toJExpr) $ fromJSObject obj
+
diff --git a/Language/Javascript/JMacro/QQ.hs b/Language/Javascript/JMacro/QQ.hs
--- a/Language/Javascript/JMacro/QQ.hs
+++ b/Language/Javascript/JMacro/QQ.hs
@@ -40,6 +40,8 @@
 import Language.Javascript.JMacro.Types
 import Language.Javascript.JMacro.ParseTH
 
+import Web.Encodings
+
 import Debug.Trace
 
 {--------------------------------------------------------------------
@@ -675,14 +677,13 @@
     _ <- char t
     x <- concat <$> many myChar
     _ <- char t
-    return x
+    return $ decodeJson x
  where myChar = do
          c <- noneOf [t]
          case c of
            '\\' -> do
                   c2 <- anyChar
                   return [c,c2]
-           '\n' -> return "\\n"
            _ -> return [c]
 
 myStringLiteralNoBr :: Char -> JMParser String
diff --git a/jmacro.cabal b/jmacro.cabal
--- a/jmacro.cabal
+++ b/jmacro.cabal
@@ -1,5 +1,5 @@
 name:                jmacro
-version:             0.4.1
+version:             0.4.2
 synopsis:            QuasiQuotation library for programmatic generation of Javascript code.
 description:         Javascript syntax, functional syntax, hygienic names, compile-time guarantees of syntactic correctness, limited typechecking.
 category:            Language
@@ -13,7 +13,7 @@
 
 
 library
-  build-depends:     base >= 4, base < 5, containers, pretty, safe >= 0.2, parsec > 3.0, template-haskell >= 2.3, mtl > 1.1 , haskell-src-exts, haskell-src-meta, bytestring >= 0.9, syb, pcre-light, json
+  build-depends:     base >= 4, base < 5, containers, pretty, safe >= 0.2, parsec > 3.0, template-haskell >= 2.3, mtl > 1.1 , haskell-src-exts, haskell-src-meta, bytestring >= 0.9, syb, pcre-light, json, web-encodings > 0.2
 
   exposed-modules:   Language.Javascript.JMacro
                      Language.Javascript.JMacro.Util
