diff --git a/HJavaScript.cabal b/HJavaScript.cabal
--- a/HJavaScript.cabal
+++ b/HJavaScript.cabal
@@ -1,5 +1,5 @@
 Name:             HJavaScript
-Version:          0.4.6
+Version:          0.4.7
 License:          BSD3
 Author:           Joel Bjornson, Niklas Broberg
 Maintainer:       joel.bjornson@gmail.com, nibro@cs.chalmers.se
diff --git a/src/Language/HJavaScript/Syntax.hs b/src/Language/HJavaScript/Syntax.hs
--- a/src/Language/HJavaScript/Syntax.hs
+++ b/src/Language/HJavaScript/Syntax.hs
@@ -69,6 +69,7 @@
   ) where
    
 import Text.PrettyPrint.HughesPJ
+import Text.Printf(printf)
 import Data.Char
 import Data.Maybe
 
@@ -375,7 +376,7 @@
 sDot      = showString "." 
 sc        = showString ";"  
 sNl       = showString "\n"
-sJtr s   = showString "'" . showString s . showString "'"
+sJtr s    = showString "'" . showString (jEscape s) . showString "'"
 sMaybe Nothing  = id
 sMaybe (Just s) = showString s
 
@@ -643,7 +644,7 @@
                                   text "true" 
                                 else 
                                   text "false"
-  JString s              ->  quotes $ text s
+  JString s              ->  quotes $ text (jEscape s)
   JRec e1 e2             ->  text "{fst:" <> ppExp e1 <> comma <>
                                text "snd:" <>  ppExp e2 <> text "}"
 
@@ -718,3 +719,18 @@
   
 ppMaybe (Just s) = text $ show s
 ppMaybe Nothing = empty
+
+-- | escape a Haskell String so that it is suitable for use as a
+-- javascript string literal.
+jEscape :: String -> String
+jEscape [] = []
+jEscape ('\b' : cs)  = "\\b"  ++ jEscape cs
+jEscape ('\f' : cs)  = "\\f"  ++ jEscape cs
+jEscape ('\n' : cs)  = "\\n"  ++ jEscape cs
+jEscape ('\r' : cs)  = "\\r"  ++ jEscape cs
+jEscape ('\t' : cs)  = "\\t"  ++ jEscape cs
+jEscape ('\\'  : cs) = "\\\\" ++ jEscape cs
+jEscape ('\'' : cs)  = "\\'"  ++ jEscape cs
+jEscape (c : cs)    
+  | ' ' <= c && c <= '~' = c : jEscape cs
+  | otherwise = (printf "\\u%.4X" c) ++ jEscape cs
