diff --git a/BNFC-meta.cabal b/BNFC-meta.cabal
--- a/BNFC-meta.cabal
+++ b/BNFC-meta.cabal
@@ -1,5 +1,5 @@
 Name:	        BNFC-meta
-version:        0.4.0.3
+version:        0.5
 cabal-Version:  >= 1.6
 build-type:     Simple
 license:        GPL-2
@@ -37,11 +37,16 @@
   examples/typesafe/Typesafe.hs
   Bootstrap/Bootstrap.hs
 
+source-repository head
+  type:      git
+  location:  https://github.com/JonasDuregard/BNFC-meta
+
+
 Library
   Build-Depends: 
     base>=4.2&&<5
     , array>=0.4&&<0.6
-    , template-haskell >=2.4&&<2.11
+    , template-haskell >=2.11&&<2.12
     , haskell-src-meta >= 0.5 && < 1.0
     , happy-meta >= 0.2.0.4 && < 0.3
     , alex-meta >= 0.3.0.5 && < 0.4
diff --git a/Bootstrap/Bootstrap.hs b/Bootstrap/Bootstrap.hs
--- a/Bootstrap/Bootstrap.hs
+++ b/Bootstrap/Bootstrap.hs
@@ -25,6 +25,7 @@
 
 import System.FilePath
 
+-- This was required for some reason but I don't recall why /Jonas
 package = "BNFC-meta-0.2.1"
 
 nfile = file ++ ".new.bak"
@@ -32,6 +33,8 @@
 bfile = file ++ ".bak"
 bbfile = bfile ++ ".bak"
 
+-- Running this code will generate a new LBNF quasi-quoter file using 
+-- an existing installation of BNFC-meta. It's all very meta. 
 main = do
   c <- getCode ("Language.LBNF.Grammar") g
   doesFileExist bfile >>= \b -> when b $ copyFile bfile bbfile
diff --git a/Language/Haskell/TH/Hide.hs b/Language/Haskell/TH/Hide.hs
--- a/Language/Haskell/TH/Hide.hs
+++ b/Language/Haskell/TH/Hide.hs
@@ -2,6 +2,7 @@
 import Data.List(partition)
 import Language.Haskell.TH
 
+-- Takes a list of declaration and puts them all in a where-clause, exporting only some of them by pattern-matching on a tuple. 
 export :: [Name] -> [Dec] -> Q [Dec]
 export el = buildClause el . partition whereable where
   whereable :: Dec -> Bool
@@ -19,7 +20,7 @@
     (map return wh)
   return $ v : tl
 
-  
+-- GHC has a limit on tuple size...
 splitTup :: ([a] -> a) -> [a] -> a 
 splitTup tup ls = case splitAt 60 ls of
   (_,[])       -> tup ls
diff --git a/Language/LBNF/CFtoAbstract.hs b/Language/LBNF/CFtoAbstract.hs
--- a/Language/LBNF/CFtoAbstract.hs
+++ b/Language/LBNF/CFtoAbstract.hs
@@ -43,19 +43,21 @@
   
 prData :: [Name] -> Data -> Q Dec
 prData deriv (cat,rules) = 
-  dataD (return []) (mkName cat) [] (map cons rules) deriv where
+  dataD (return []) (mkName cat) [] Nothing (map cons rules) deriv' where
     cons (fun,cats) = normalC (mkName fun) $ either (map typ) (const str) cats
     typ = strictType notStrict . fixname
     str = [typ "String"]
+    deriv' = mapM conT deriv
 
+
 -- deriv = [''Eq,''Ord,''Show]
 
 prSpecialData :: [Name] -> CF -> Cat -> Q Dec
 prSpecialData deriv cf cat =
-  newtypeD (return []) (mkName cat) [] con deriv where
+  newtypeD (return []) (mkName cat) [] Nothing con deriv' where
     con = normalC (mkName cat) $ [typ]
     typ = strictType notStrict $ contentSpec cf cat
-
+    deriv' = mapM conT deriv
 
 contentSpec :: CF -> Cat -> Q Type
 contentSpec cf cat = if isPositionCat cf cat 
diff --git a/Language/LBNF/CFtoLayout.hs b/Language/LBNF/CFtoLayout.hs
--- a/Language/LBNF/CFtoLayout.hs
+++ b/Language/LBNF/CFtoLayout.hs
@@ -67,8 +67,8 @@
       (id         [''Token, 'Err,  ''Posn, 'PT,  ''Tok, 'TS,  'Pn, ''Block, 'Implicit, 'Explicit])
       (map mkName ["Token", "Err", "Posn", "PT", "Tok", "TS", "Pn", "Block", "Implicit","Explicit"])
  in fmap mkRename $  
-     fmap (DataD [] (mkName "Block") [] [NormalC (mkName "Implicit") [(NotStrict,ConT ''Int)],
-       NormalC (mkName "Explicit") []] [''Show]:)
+     fmap (DataD [] (mkName "Block") [] Nothing [NormalC (mkName "Implicit") [(Bang NoSourceUnpackedness NoSourceStrictness,ConT ''Int)],
+       NormalC (mkName "Explicit") []] [ConT ''Show]:)
        (makedecs top lay stop (sort (reservedWords cf ++ symbols cf)))
        
 -- Hack to make haddock work
diff --git a/examples/jll/JavaletteLight.hs b/examples/jll/JavaletteLight.hs
--- a/examples/jll/JavaletteLight.hs
+++ b/examples/jll/JavaletteLight.hs
@@ -5,7 +5,7 @@
 import Language.LBNF.Compiletime
 
 import Language.LBNF(lbnf, dumpCode, bnfc)
-bnfc [lbnf|
+dumpCode [lbnf|
 
 Fun.      Prog     ::= Typ Ident "(" ")" "{" [Stm] "}" ;
 
diff --git a/examples/typesafe/Example.hs b/examples/typesafe/Example.hs
--- a/examples/typesafe/Example.hs
+++ b/examples/typesafe/Example.hs
@@ -7,7 +7,7 @@
 -- All variables are meta-variables. 
 -- Variables must be declared in the function parameters
 -- Boolean and numeric variables are type checked by Haskell.
-prg n tmp x = [$prog|
+prg n tmp x = [prog|
 f() {
   n = 0;
   x := True ;
diff --git a/examples/typesafe/Typesafe.hs b/examples/typesafe/Typesafe.hs
--- a/examples/typesafe/Typesafe.hs
+++ b/examples/typesafe/Typesafe.hs
@@ -7,7 +7,7 @@
 import Language.LBNF
   
 
-bnfc [$lbnf|
+bnfc [lbnf|
 
 antiquote "[" ":" ":]" ;
 
