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
@@ -14,7 +14,7 @@
 
 module Language.Javascript.JMacro.QQ(jmacro,jmacroE,parseJM,parseJME) where
 import Prelude hiding (tail, init, head, last, minimum, maximum, foldr1, foldl1, (!!), read)
-import Control.Applicative hiding ((<|>),many,optional,(<*))
+import Control.Applicative hiding ((<|>),many,optional)
 import Control.Arrow(first)
 import Control.Monad.State.Strict
 import Data.Char(digitToInt, toLower, isUpper)
@@ -105,12 +105,13 @@
 antiIdents ss x = foldr antiIdent x ss
 
 fixIdent :: String -> String
+fixIdent "_" = "_x_"
 fixIdent css@(c:_)
     | isUpper c = '_' : escapeDollar css
     | otherwise = escapeDollar css
   where
     escapeDollar = map (\x -> if x =='$' then 'ǆ' else x)
-fixIdent _ = "_"
+fixIdent _ = "_x_"
 
 
 jm2th :: Data a => a -> TH.ExpQ
@@ -260,8 +261,8 @@
 lexeme :: JMParser a -> JMParser a
 lexeme    = P.lexeme lexer
 
-(<*) :: Monad m => m b -> m a -> m b
-x <* y = do
+(<<*) :: Monad m => m b -> m a -> m b
+x <<* y = do
   xr <- x
   _ <- y
   return xr
@@ -432,7 +433,7 @@
 
       foreignStat = do
           reserved "foreign"
-          i <- try $ identdecl <* reservedOp "::"
+          i <- try $ identdecl <<* reservedOp "::"
           t <- runTypeParser
           return [ForeignStat i t]
 
@@ -507,12 +508,14 @@
         b <- statement
         return $ jFor' before after p b
           where threeStat =
-                    liftM3 (,,) (option [] statement <* optional semi)
-                                (optionMaybe expr <* semi)
+                    liftM3 (,,) (option [] statement <<* optional semi)
+                                (optionMaybe expr <<* semi)
                                 (option [] statement)
                 jFor' :: [JStat] -> Maybe JExpr -> [JStat]-> [JStat] -> [JStat]
-                jFor' before p after bs = before ++ [WhileStat False (fromMaybe (jsv "true") p) b']
-                    where b' = BlockStat $ bs ++ after
+                jFor' before p after bs = decl ++ before ++ [WhileStat False (fromMaybe (jsv "true") p) b']
+                    where b' = BlockStat $ maybeAfter : bs
+                          maybeAfter = IfStat (InfixExpr "==" (jsv "jmId_loop") (jsv "true")) (BlockStat after) (AssignStat (jsv "jmId_loop") (jsv "true"))
+                          decl = [DeclStat (StrI "jmId_loop") Nothing, AssignStat (jsv "jmId_loop") (jsv "false")]
 
       assignOpStat = do
           let rop x = reservedOp x >> return x
@@ -568,7 +571,7 @@
 
       labelStat = do
         lbl <- try $ do
-                    l <- myIdent <* char ':'
+                    l <- myIdent <<* char ':'
                     guard (l /= "default")
                     return l
         s <- l2s <$> statblock0
@@ -702,19 +705,19 @@
               statOrEblock  = try (ReturnStat <$> expr `folBy` '}') <|> (l2s <$> statblock)
               propPair = liftM2 (,) myIdent (colon >> expr)
 
---notFolBy a b = a <* notFollowedBy (char b)
+--notFolBy a b = a <<* notFollowedBy (char b)
 folBy :: JMParser a -> Char -> JMParser a
-folBy a b = a <* (lookAhead (char b) >>= const (return ()))
+folBy a b = a <<* (lookAhead (char b) >>= const (return ()))
 
 --Parsers without Lexeme
 braces', brackets', parens', oxfordBraces :: JMParser a -> JMParser a
 brackets' = around' '[' ']'
 braces' = around' '{' '}'
 parens' = around' '(' ')'
-oxfordBraces x = lexeme (reservedOp "{|") >> (lexeme x <* reservedOp "|}")
+oxfordBraces x = lexeme (reservedOp "{|") >> (lexeme x <<* reservedOp "|}")
 
 around' :: Char -> Char -> JMParser a -> JMParser a
-around' a b x = lexeme (char a) >> (lexeme x <* char b)
+around' a b x = lexeme (char a) >> (lexeme x <<* char b)
 
 myIdent :: JMParser String
 myIdent = lexeme $ many1 (alphaNum <|> oneOf "_-!@#$%^&*()") <|> myStringLiteral '\''
diff --git a/Language/Javascript/JMacro/TypeCheck.hs b/Language/Javascript/JMacro/TypeCheck.hs
--- a/Language/Javascript/JMacro/TypeCheck.hs
+++ b/Language/Javascript/JMacro/TypeCheck.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, PatternGuards, RankNTypes #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, PatternGuards, RankNTypes, FlexibleContexts #-}
 
 module Language.Javascript.JMacro.TypeCheck where
 
diff --git a/jmacro.cabal b/jmacro.cabal
--- a/jmacro.cabal
+++ b/jmacro.cabal
@@ -1,5 +1,5 @@
 name:                jmacro
-version:             0.6.11
+version:             0.6.12
 synopsis:            QuasiQuotation library for programmatic generation of Javascript code.
 description:         Javascript syntax, functional syntax, hygienic names, compile-time guarantees of syntactic correctness, limited typechecking. Additional documentation available at <http://www.haskell.org/haskellwiki/Jmacro>
 category:            Language
@@ -7,7 +7,7 @@
 license-file:        LICENSE
 author:              Gershom Bazerman
 maintainer:          gershomb@gmail.com
-Tested-With:         GHC == 7.8.4
+Tested-With:         GHC == 7.10
 Build-Type:          Simple
 Cabal-Version:       >= 1.6
 
