diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,10 +1,15 @@
-# [Ajhc](http://ajhc.metasepi.org/) - arafura-jhc [![Build Status](https://travis-ci.org/ajhc/ajhc.png)](https://travis-ci.org/ajhc/ajhc)
+# [Ajhc](http://ajhc.metasepi.org/) - arafura-jhc
 
 A fork of [jhc](http://repetae.net/computer/jhc/).
 And also a Haskell compiler. 
 
 This project is founded by [Metasepi Project](http://metasepi.org/).
 
+## Build Status
+
+* [![Build Status](https://travis-ci.org/ajhc/ajhc.png?branch=arafura)](https://travis-ci.org/ajhc/ajhc) Ubuntu
+* [![Build Status](https://travis-ci.org/ajhc/ajhc.png?branch=arafura-ci4osx)](https://travis-ci.org/ajhc/ajhc) Mac OS X
+
 ## How to install
 
     $ sudo apt-get install haskell-platform libncurses5-dev gcc m4
@@ -12,11 +17,11 @@
 
 ## How to build latest version
 
-    $ sudo apt-get install make locales autoconf libreadline-dev \
+    $ sudo apt-get install make locales autoconf haskell-derive-utils \
       libconfig-yaml-perl graphviz haskell-platform cpphs pandoc hscolour po4a \
       libghc-temporary-dev libghc-haskeline-dev libghc-utf8-string-dev libghc-hssyck-dev \
       libghc-test-framework-th-dev libghc-test-framework-hunit-dev \
-      libghc-test-framework-quickcheck2-dev libghc-uniplate-dev libgc-dev gcc-multilib valgrind
+      libghc-test-framework-quickcheck2-dev libghc-uniplate-dev libgc-dev gcc valgrind
     $ git clone git://github.com/ajhc/ajhc.git
     $ cd ajhc
     $ git checkout arafura
@@ -76,34 +81,10 @@
 
 ## Future plan
 
-### Yet
-
 * No more depend on Perl (LWP and YAML).
-* Rewrite Cortex-M3 base library with Ajhc.
-* Analyze jhc internal (Japanese doc).
-  https://github.com/ajhc/ajhc-hacking-guide
 * Port Haskell libraries on haskell-platform to Ajhc.
 * Understand jhc's region inference.
-* Play with Android NDK. http://developer.android.com/tools/sdk/ndk/index.html
 * Play with Google Native Client. https://developers.google.com/native-client/
-* Snatch ChibiOS/RT. http://www.chibios.org/dokuwiki/doku.php
 * Write Linux kernel driver with Haskell.
 * Get smaller RTS. Benchmark the RTS for running on custom FPGA CPU.
 * Start rewritng NetBSD kernel with Ajhc.
-
-### Done
-
-* Try to rewrite a part of NetBSD bootloader.
-  http://www.youtube.com/watch?v=JMyxy5Qo2m8
-* Translate Jhc User’s Manual to Japanese.
-  http://metasepi.org/posts/2013-01-12-jhc_manual_ja.html
-* Fix bug that run stm32f3-discovery demo. It causes Ajhc RTS heep impl.
-  https://github.com/ajhc/demo-cortex-m3/tree/master/stm32f3-discovery
-* Support to build on Windows.
-* Cabalize Ajhc. Ajhc's hl files will be not controled with cabal.
-* Support LPCXpresso NXP LPX1769 with demo.
-* Pass all regress test, and enable regress fail setting on travis-ci.
-  https://travis-ci.org/ajhc/ajhc
-* No more depend on DrIFT. Use http://hackage.haskell.org/package/derive.
-* Find critical region of Ajhc for reentrant and thread safe.
-* Find the method to implement GC that can be interrupted.
diff --git a/ajhc.cabal b/ajhc.cabal
--- a/ajhc.cabal
+++ b/ajhc.cabal
@@ -1,7 +1,7 @@
 cabal-version: >= 1.10
 name:          ajhc
 build-type:    Custom
-version:       0.8.0.8
+version:       0.8.0.9
 license:       GPL-2
 license-file:  COPYING
 category:      Compiler
@@ -55,6 +55,7 @@
         binary,
         bytestring,
         containers,
+        cpphs,
         derive,
         directory,
         fgl,
diff --git a/src/C/FFI.hs b/src/C/FFI.hs
--- a/src/C/FFI.hs
+++ b/src/C/FFI.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module C.FFI(
     CallConv(..),
     Safety(..),
@@ -10,7 +10,6 @@
 
 import C.Prims
 import Data.Binary
-import Data.DeriveTH
 import Data.Typeable
 
 type CName = String
@@ -33,4 +32,6 @@
     }
  deriving(Eq,Ord,Show,Typeable)
 
-$(derive makeBinary ''FfiExport)
+{-!
+deriving instance Binary FfiExport
+!-}
diff --git a/src/C/FromGrin2.hs b/src/C/FromGrin2.hs
--- a/src/C/FromGrin2.hs
+++ b/src/C/FromGrin2.hs
@@ -1,4 +1,5 @@
-{-# LANGUAGE OverloadedStrings, RecordWildCards, ViewPatterns, TemplateHaskell #-}
+{-# LANGUAGE OverloadedStrings, RecordWildCards, ViewPatterns #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module C.FromGrin2(compileGrin) where
 
 import Control.Monad.Identity
@@ -7,7 +8,6 @@
 import Data.List
 import Data.Maybe
 import Data.Monoid(Monoid(..))
-import Data.DeriveTH
 import System.FilePath
 import Text.PrettyPrint.HughesPJ(nest,($$),fsep)
 import qualified Data.ByteString.Lazy as LBS
@@ -53,8 +53,6 @@
     wFunctions :: Map.Map Name Function
     }
 
-$(derive makeMonoid ''Written)
-
 -- special type representations when possible
 data TyRep
     = TyRepRawTag    -- stored raw tag
@@ -1024,3 +1022,7 @@
 
 basicType' :: ExtType -> Type
 basicType' b = basicType (show b)
+
+{-!
+deriving instance Monoid Written
+!-}
diff --git a/src/C/Prims.hs b/src/C/Prims.hs
--- a/src/C/Prims.hs
+++ b/src/C/Prims.hs
@@ -1,10 +1,10 @@
-{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module C.Prims where
 
 import Data.Binary
 import Data.Monoid(Monoid(..))
 import Data.Typeable
-import Data.DeriveTH
 import qualified Data.Set as Set
 
 import Doc.DocLike
@@ -17,7 +17,6 @@
 
 data CallConv = CCall | StdCall | CApi | Primitive | DotNet
     deriving(Eq,Ord,Show)
-$(derive makeBinary ''CallConv)
 
 data Safety = Safe | Unsafe | JhcContext deriving(Eq,Ord,Show)
 
@@ -178,7 +177,10 @@
     g dn [n] = return dn { primDotNetName = packString n }
     g _ _ = fail "invalid .NET ffi specification"
 
-$(derive makeBinary ''Safety)
-$(derive makeBinary ''DotNetPrim)
-$(derive makeBinary ''Prim)
-$(derive makeBinary ''PrimTypeInfo)
+{-!
+deriving instance Binary CallConv
+deriving instance Binary Safety
+deriving instance Binary DotNetPrim
+deriving instance Binary Prim
+deriving instance Binary PrimTypeInfo
+!-}
diff --git a/src/Cmm/Op.hs b/src/Cmm/Op.hs
--- a/src/Cmm/Op.hs
+++ b/src/Cmm/Op.hs
@@ -1,9 +1,8 @@
-{-# LANGUAGE TemplateHaskell #-}
 {-# OPTIONS -funbox-strict-fields #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module Cmm.Op where
 
 import Data.Binary
-import Data.DeriveTH
 import Util.Gen
 import qualified Text.ParserCombinators.ReadP as P
 import Text.Read.Lex
@@ -400,12 +399,14 @@
     isEagerSafe (ConvOp o _) = isEagerSafe o
     isEagerSafe _ = False
 
-$(derive makeBinary ''BinOp)
-$(derive makeBinary ''UnOp)
-$(derive makeBinary ''ConvOp)
-$(derive makeBinary ''ValOp)
-$(derive makeBinary ''ArchBits)
-$(derive makeBinary ''TyBits)
-$(derive makeBinary ''TyHint)
-$(derive makeBinary ''Ty)
-$(derive makeBinary ''Op)
+{-!
+deriving instance Binary BinOp
+deriving instance Binary UnOp
+deriving instance Binary ConvOp
+deriving instance Binary ValOp
+deriving instance Binary ArchBits
+deriving instance Binary TyBits
+deriving instance Binary TyHint
+deriving instance Binary Ty
+deriving instance Binary Op
+!-}
diff --git a/src/DataConstructors.hs b/src/DataConstructors.hs
--- a/src/DataConstructors.hs
+++ b/src/DataConstructors.hs
@@ -1,4 +1,5 @@
-{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module DataConstructors(
     AliasType(..),
     boxPrimitive,
@@ -52,7 +53,6 @@
 
 import C.Prims
 import Data.Binary
-import Data.DeriveTH
 import Doc.DocLike as D
 import Doc.PPrint
 import Doc.Pretty
@@ -920,7 +920,9 @@
     (rt_float128,  "__float128")
     ]
 
-$(derive makeBinary ''AliasType)
-$(derive makeBinary ''DataFamily)
-$(derive makeBinary ''Constructor)
-$(derive makeBinary ''Slot)
+{-!
+deriving instance Binary AliasType
+deriving instance Binary DataFamily
+deriving instance Binary Constructor
+deriving instance Binary Slot
+!-}
diff --git a/src/E/CPR.hs b/src/E/CPR.hs
--- a/src/E/CPR.hs
+++ b/src/E/CPR.hs
@@ -1,11 +1,10 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module E.CPR(Val(..), cprAnalyzeDs, cprAnalyzeProgram) where
 
 import Control.Monad.Writer(runWriter,tell,Monoid(..))
 import Data.Binary
 import Data.Monoid()
 import Data.Typeable
-import Data.DeriveTH
 import qualified Data.Map as Map
 
 import Cmm.Number
@@ -138,4 +137,6 @@
         f e = error $ "cprAnalyze'.f: " ++ show e
         g = snd . cprAnalyze' env
 
-$(derive makeBinary ''Val)
+{-!
+deriving instance Binary Val
+!-}
diff --git a/src/E/Demand.hs b/src/E/Demand.hs
--- a/src/E/Demand.hs
+++ b/src/E/Demand.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module E.Demand(
     Demand(..),
     DemandSignature(..),
@@ -14,7 +14,6 @@
 import Data.Binary
 import Data.List hiding(union,delete)
 import Data.Typeable
-import Data.DeriveTH
 
 --import Debug.Trace
 import DataConstructors
@@ -403,8 +402,10 @@
 instance Show DemandSignature where
     showsPrec _ (DemandSignature n dt) = showString "<" . shows n . showString "," . shows dt . showString ">"
 
-$(derive makeBinary ''Demand)
-$(derive makeBinary ''SubDemand)
-$(derive makeBinary ''DemandEnv)
-$(derive makeBinary ''DemandType)
-$(derive makeBinary ''DemandSignature)
+{-!
+deriving instance Binary Demand
+deriving instance Binary SubDemand
+deriving instance Binary DemandEnv
+deriving instance Binary DemandType
+deriving instance Binary DemandSignature
+!-}
diff --git a/src/E/SSimplify.hs b/src/E/SSimplify.hs
--- a/src/E/SSimplify.hs
+++ b/src/E/SSimplify.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module E.SSimplify(
     Occurance(..),
     cacheSimpOpts,
@@ -14,7 +14,6 @@
 import Control.Monad.Identity
 import Data.Maybe
 import Data.Typeable
-import Data.DeriveTH
 import Debug.Trace
 import Data.List hiding(delete,union,insert)
 import qualified Data.Set as Set
@@ -1082,4 +1081,6 @@
 
 --smAddBoundNamesIdMap = smAddNamesIdSet . idMapToIdSet
 
-$(derive makeMonoid ''Env)
+{-!
+deriving instance Monoid Env
+!-}
diff --git a/src/E/Type.hs b/src/E/Type.hs
--- a/src/E/Type.hs
+++ b/src/E/Type.hs
@@ -1,11 +1,10 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 -- | The definitions related to jhc core
 
 module E.Type where
 
 import Data.Foldable hiding(concat)
 import Data.Traversable
-import Data.DeriveTH
 
 import C.Prims
 import Cmm.Number
@@ -16,7 +15,6 @@
 import Name.Names
 import StringTable.Atom
 import Util.Gen
-import Util.SetLike
 import qualified Info.Info as Info
 
 {- @Internals
@@ -259,7 +257,9 @@
 
 --  Imported from other files :-
 
-$(derive makeIs ''Lit)
-$(derive makeIs ''ESort)
-$(derive makeIs ''E)
-$(derive makeFrom ''E)
+{-!
+deriving instance Is Lit
+deriving instance Is ESort
+deriving instance Is E
+deriving instance From E
+!-}
diff --git a/src/FlagDump.hs b/src/FlagDump.hs
--- a/src/FlagDump.hs
+++ b/src/FlagDump.hs
@@ -120,120 +120,120 @@
     show Progress = "progress"
     show Stats = "stats"
 
-one "verbose" = Right $ foldr (.) id [ f | Right f <- [ one "progress"]]
-one "the" = Right $ Set.insert The
-one "no-the" = Right $ Set.delete The
-one "core-mini" = Right $ Set.insert CoreMini
-one "no-core-mini" = Right $ Set.delete CoreMini
-one "kind-steps" = Right $ Set.insert KindSteps
-one "no-kind-steps" = Right $ Set.delete KindSteps
-one "veryverbose" = Right $ foldr (.) id [ f | Right f <- [ one "progress",one "stats"]]
-one "ini" = Right $ Set.insert Ini
-one "no-ini" = Right $ Set.delete Ini
+one "kind" = Right $ Set.insert Kind
+one "no-kind" = Right $ Set.delete Kind
+one "types" = Right $ Set.insert Types
+one "no-types" = Right $ Set.delete Types
+one "grin" = Right $ Set.insert Grin
+one "no-grin" = Right $ Set.delete Grin
 one "program" = Right $ Set.insert Program
 one "no-program" = Right $ Set.delete Program
-one "atom" = Right $ Set.insert Atom
-one "no-atom" = Right $ Set.delete Atom
-one "grin-preeval" = Right $ Set.insert GrinPreeval
-one "no-grin-preeval" = Right $ Set.delete GrinPreeval
-one "grin-graph" = Right $ Set.insert GrinGraph
-one "no-grin-graph" = Right $ Set.delete GrinGraph
-one "e-alias" = Right $ Set.insert EAlias
-one "no-e-alias" = Right $ Set.delete EAlias
-one "renamed" = Right $ Set.insert Renamed
-one "no-renamed" = Right $ Set.delete Renamed
+one "all-types" = Right $ Set.insert AllTypes
+one "no-all-types" = Right $ Set.delete AllTypes
+one "scc-modules" = Right $ Set.insert SccModules
+one "no-scc-modules" = Right $ Set.delete SccModules
+one "core-mini" = Right $ Set.insert CoreMini
+one "no-core-mini" = Right $ Set.delete CoreMini
+one "defs" = Right $ Set.insert Defs
+one "no-defs" = Right $ Set.delete Defs
+one "optimization-stats" = Right $ Set.insert OptimizationStats
+one "no-optimization-stats" = Right $ Set.delete OptimizationStats
+one "bindgroups" = Right $ Set.insert Bindgroups
+one "no-bindgroups" = Right $ Set.delete Bindgroups
+one "stats" = Right $ Set.insert Stats
+one "no-stats" = Right $ Set.delete Stats
+one "grin-datalog" = Right $ Set.insert GrinDatalog
+one "no-grin-datalog" = Right $ Set.delete GrinDatalog
 one "datatable-builtin" = Right $ Set.insert DatatableBuiltin
 one "no-datatable-builtin" = Right $ Set.delete DatatableBuiltin
+one "rules-spec" = Right $ Set.insert RulesSpec
+one "no-rules-spec" = Right $ Set.delete RulesSpec
+one "e-alias" = Right $ Set.insert EAlias
+one "no-e-alias" = Right $ Set.delete EAlias
+one "ini" = Right $ Set.insert Ini
+one "no-ini" = Right $ Set.delete Ini
+one "imports" = Right $ Set.insert Imports
+one "no-imports" = Right $ Set.delete Imports
+one "e-size" = Right $ Set.insert ESize
+one "no-e-size" = Right $ Set.delete ESize
+one "core-steps" = Right $ Set.insert CoreSteps
+one "no-core-steps" = Right $ Set.delete CoreSteps
 one "aspats" = Right $ Set.insert Aspats
 one "no-aspats" = Right $ Set.delete Aspats
+one "preprocessed" = Right $ Set.insert Preprocessed
+one "no-preprocessed" = Right $ Set.delete Preprocessed
 one "grin-final" = Right $ Set.insert GrinFinal
 one "no-grin-final" = Right $ Set.delete GrinFinal
-one "instance" = Right $ Set.insert Instance
-one "no-instance" = Right $ Set.delete Instance
-one "defs" = Right $ Set.insert Defs
-one "no-defs" = Right $ Set.delete Defs
-one "c" = Right $ Set.insert C
-one "no-c" = Right $ Set.delete C
-one "e-size" = Right $ Set.insert ESize
-one "no-e-size" = Right $ Set.delete ESize
-one "core-initial" = Right $ Set.insert CoreInitial
-one "no-core-initial" = Right $ Set.delete CoreInitial
-one "class" = Right $ Set.insert Class
-one "no-class" = Right $ Set.delete Class
-one "datatable" = Right $ Set.insert Datatable
-one "no-datatable" = Right $ Set.delete Datatable
-one "core-afterlift" = Right $ Set.insert CoreAfterlift
-one "no-core-afterlift" = Right $ Set.delete CoreAfterlift
 one "steps" = Right $ Set.insert Steps
 one "no-steps" = Right $ Set.delete Steps
-one "all-types" = Right $ Set.insert AllTypes
-one "no-all-types" = Right $ Set.delete AllTypes
-one "types" = Right $ Set.insert Types
-one "no-types" = Right $ Set.delete Types
-one "core" = Right $ Set.insert Core
-one "no-core" = Right $ Set.delete Core
-one "preprocessed" = Right $ Set.insert Preprocessed
-one "no-preprocessed" = Right $ Set.delete Preprocessed
-one "rules" = Right $ Set.insert Rules
-one "no-rules" = Right $ Set.delete Rules
-one "exports" = Right $ Set.insert Exports
-one "no-exports" = Right $ Set.delete Exports
-one "core-steps" = Right $ Set.insert CoreSteps
-one "no-core-steps" = Right $ Set.delete CoreSteps
-one "sigenv" = Right $ Set.insert Sigenv
-one "no-sigenv" = Right $ Set.delete Sigenv
-one "kind" = Right $ Set.insert Kind
-one "no-kind" = Right $ Set.delete Kind
-one "rules-spec" = Right $ Set.insert RulesSpec
-one "no-rules-spec" = Right $ Set.delete RulesSpec
-one "optimization-stats" = Right $ Set.insert OptimizationStats
-one "no-optimization-stats" = Right $ Set.delete OptimizationStats
-one "srcsigs" = Right $ Set.insert Srcsigs
-one "no-srcsigs" = Right $ Set.delete Srcsigs
-one "class-summary" = Right $ Set.insert ClassSummary
-one "no-class-summary" = Right $ Set.delete ClassSummary
+one "the" = Right $ Set.insert The
+one "no-the" = Right $ Set.delete The
+one "e-info" = Right $ Set.insert EInfo
+one "no-e-info" = Right $ Set.delete EInfo
+one "verbose" = Right $ foldr (.) id [ f | Right f <- [ one "progress"]]
+one "c" = Right $ Set.insert C
+one "no-c" = Right $ Set.delete C
 one "dcons" = Right $ Set.insert Dcons
 one "no-dcons" = Right $ Set.delete Dcons
-one "grin-posteval" = Right $ Set.insert GrinPosteval
-one "no-grin-posteval" = Right $ Set.delete GrinPosteval
-one "grin-initial" = Right $ Set.insert GrinInitial
-one "no-grin-initial" = Right $ Set.delete GrinInitial
-one "parsed" = Right $ Set.insert Parsed
-one "no-parsed" = Right $ Set.delete Parsed
-one "core-pass" = Right $ Set.insert CorePass
-one "no-core-pass" = Right $ Set.delete CorePass
-one "e-verbose" = Right $ Set.insert EVerbose
-one "no-e-verbose" = Right $ Set.delete EVerbose
 one "core-mangled" = Right $ Set.insert CoreMangled
 one "no-core-mangled" = Right $ Set.delete CoreMangled
-one "progress" = Right $ Set.insert Progress
-one "no-progress" = Right $ Set.delete Progress
-one "imports" = Right $ Set.insert Imports
-one "no-imports" = Right $ Set.delete Imports
-one "stats" = Right $ Set.insert Stats
-one "no-stats" = Right $ Set.delete Stats
 one "core-beforelift" = Right $ Set.insert CoreBeforelift
 one "no-core-beforelift" = Right $ Set.delete CoreBeforelift
-one "e-info" = Right $ Set.insert EInfo
-one "no-e-info" = Right $ Set.delete EInfo
-one "decls" = Right $ Set.insert Decls
-one "no-decls" = Right $ Set.delete Decls
-one "tags" = Right $ Set.insert Tags
-one "no-tags" = Right $ Set.delete Tags
-one "derived" = Right $ Set.insert Derived
-one "no-derived" = Right $ Set.delete Derived
-one "bindgroups" = Right $ Set.insert Bindgroups
-one "no-bindgroups" = Right $ Set.delete Bindgroups
-one "grin-datalog" = Right $ Set.insert GrinDatalog
-one "no-grin-datalog" = Right $ Set.delete GrinDatalog
+one "kind-steps" = Right $ Set.insert KindSteps
+one "no-kind-steps" = Right $ Set.delete KindSteps
 one "boxy-steps" = Right $ Set.insert BoxySteps
 one "no-boxy-steps" = Right $ Set.delete BoxySteps
-one "scc-modules" = Right $ Set.insert SccModules
-one "no-scc-modules" = Right $ Set.delete SccModules
+one "e-verbose" = Right $ Set.insert EVerbose
+one "no-e-verbose" = Right $ Set.delete EVerbose
+one "exports" = Right $ Set.insert Exports
+one "no-exports" = Right $ Set.delete Exports
+one "veryverbose" = Right $ foldr (.) id [ f | Right f <- [ one "progress",one "stats"]]
+one "renamed" = Right $ Set.insert Renamed
+one "no-renamed" = Right $ Set.delete Renamed
+one "atom" = Right $ Set.insert Atom
+one "no-atom" = Right $ Set.delete Atom
+one "instance" = Right $ Set.insert Instance
+one "no-instance" = Right $ Set.delete Instance
+one "derived" = Right $ Set.insert Derived
+one "no-derived" = Right $ Set.delete Derived
+one "parsed" = Right $ Set.insert Parsed
+one "no-parsed" = Right $ Set.delete Parsed
+one "core-pass" = Right $ Set.insert CorePass
+one "no-core-pass" = Right $ Set.delete CorePass
+one "decls" = Right $ Set.insert Decls
+one "no-decls" = Right $ Set.delete Decls
+one "srcsigs" = Right $ Set.insert Srcsigs
+one "no-srcsigs" = Right $ Set.delete Srcsigs
+one "progress" = Right $ Set.insert Progress
+one "no-progress" = Right $ Set.delete Progress
 one "grin-normalized" = Right $ Set.insert GrinNormalized
 one "no-grin-normalized" = Right $ Set.delete GrinNormalized
-one "grin" = Right $ Set.insert Grin
-one "no-grin" = Right $ Set.delete Grin
+one "core-afterlift" = Right $ Set.insert CoreAfterlift
+one "no-core-afterlift" = Right $ Set.delete CoreAfterlift
+one "rules" = Right $ Set.insert Rules
+one "no-rules" = Right $ Set.delete Rules
+one "grin-graph" = Right $ Set.insert GrinGraph
+one "no-grin-graph" = Right $ Set.delete GrinGraph
+one "class" = Right $ Set.insert Class
+one "no-class" = Right $ Set.delete Class
+one "grin-initial" = Right $ Set.insert GrinInitial
+one "no-grin-initial" = Right $ Set.delete GrinInitial
+one "core" = Right $ Set.insert Core
+one "no-core" = Right $ Set.delete Core
+one "tags" = Right $ Set.insert Tags
+one "no-tags" = Right $ Set.delete Tags
+one "core-initial" = Right $ Set.insert CoreInitial
+one "no-core-initial" = Right $ Set.delete CoreInitial
+one "datatable" = Right $ Set.insert Datatable
+one "no-datatable" = Right $ Set.delete Datatable
+one "grin-preeval" = Right $ Set.insert GrinPreeval
+one "no-grin-preeval" = Right $ Set.delete GrinPreeval
+one "grin-posteval" = Right $ Set.insert GrinPosteval
+one "no-grin-posteval" = Right $ Set.delete GrinPosteval
+one "sigenv" = Right $ Set.insert Sigenv
+one "no-sigenv" = Right $ Set.delete Sigenv
+one "class-summary" = Right $ Set.insert ClassSummary
+one "no-class-summary" = Right $ Set.delete ClassSummary
 one x = Left x
 
 {-# NOINLINE process #-}
diff --git a/src/FlagOpts.hs b/src/FlagOpts.hs
--- a/src/FlagOpts.hs
+++ b/src/FlagOpts.hs
@@ -70,70 +70,70 @@
     show Pthread = "pthread"
     show Customthread = "customthread"
 
-one "profile" = Right $ Set.insert Profile
-one "no-profile" = Right $ Set.delete Profile
-one "m4" = Right $ Set.insert M4
-one "no-m4" = Right $ Set.delete M4
-one "lint" = Right $ Set.insert Lint
-one "no-lint" = Right $ Set.delete Lint
-one "ffi" = Right $ Set.insert Ffi
-one "no-ffi" = Right $ Set.delete Ffi
+one "exists" = Right $ Set.insert Exists
+one "no-exists" = Right $ Set.delete Exists
+one "wrapper" = Right $ Set.insert Wrapper
+one "no-wrapper" = Right $ Set.delete Wrapper
+one "boehm" = Right $ Set.insert Boehm
+one "no-boehm" = Right $ Set.delete Boehm
+one "debug" = Right $ Set.insert Debug
+one "no-debug" = Right $ Set.delete Debug
+one "full-int" = Right $ Set.insert FullInt
+one "no-full-int" = Right $ Set.delete FullInt
+one "jgc" = Right $ Set.insert Jgc
+one "no-jgc" = Right $ Set.delete Jgc
+one "glasgow-exts" = Right $ foldr (.) id [ f | Right f <- [ one "forall",one "ffi",one "unboxed-tuples"]]
 one "monomorphism-restriction" = Right $ Set.insert MonomorphismRestriction
 one "no-monomorphism-restriction" = Right $ Set.delete MonomorphismRestriction
+one "rules" = Right $ Set.insert Rules
+one "no-rules" = Right $ Set.delete Rules
 one "prelude" = Right $ Set.insert Prelude
 one "no-prelude" = Right $ Set.delete Prelude
-one "customthread" = Right $ Set.insert Customthread
-one "no-customthread" = Right $ Set.delete Customthread
-one "debug" = Right $ Set.insert Debug
-one "no-debug" = Right $ Set.delete Debug
-one "wrapper" = Right $ Set.insert Wrapper
-one "no-wrapper" = Right $ Set.delete Wrapper
+one "m4" = Right $ Set.insert M4
+one "no-m4" = Right $ Set.delete M4
+one "type-analysis" = Right $ Set.insert TypeAnalysis
+one "no-type-analysis" = Right $ Set.delete TypeAnalysis
 one "bang-patterns" = Right $ Set.insert BangPatterns
 one "no-bang-patterns" = Right $ Set.delete BangPatterns
-one "pthread" = Right $ Set.insert Pthread
-one "no-pthread" = Right $ Set.delete Pthread
-one "unboxed-tuples" = Right $ Set.insert UnboxedTuples
-one "no-unboxed-tuples" = Right $ Set.delete UnboxedTuples
-one "forall" = Right $ Set.insert Forall
-one "no-forall" = Right $ Set.delete Forall
-one "full-int" = Right $ Set.insert FullInt
-one "no-full-int" = Right $ Set.delete FullInt
-one "default" = Right $ foldr (.) id [ f | Right f <- [ one "inline-pragmas",one "rules",one "wrapper",one "defaulting",one "type-analysis",one "monomorphism-restriction",one "global-optimize",one "full-int",one "prelude"]]
-one "negate" = Right $ Set.insert Negate
-one "no-negate" = Right $ Set.delete Negate
-one "user-kinds" = Right $ Set.insert UserKinds
-one "no-user-kinds" = Right $ Set.delete UserKinds
-one "glasgow-exts" = Right $ foldr (.) id [ f | Right f <- [ one "forall",one "ffi",one "unboxed-tuples"]]
+one "customthread" = Right $ Set.insert Customthread
+one "no-customthread" = Right $ Set.delete Customthread
+one "raw" = Right $ Set.insert Raw
+one "no-raw" = Right $ Set.delete Raw
 one "standalone" = Right $ Set.insert Standalone
 one "no-standalone" = Right $ Set.delete Standalone
-one "type-analysis" = Right $ Set.insert TypeAnalysis
-one "no-type-analysis" = Right $ Set.delete TypeAnalysis
-one "boehm" = Right $ Set.insert Boehm
-one "no-boehm" = Right $ Set.delete Boehm
-one "jgc" = Right $ Set.insert Jgc
-one "no-jgc" = Right $ Set.delete Jgc
+one "user-kinds" = Right $ Set.insert UserKinds
+one "no-user-kinds" = Right $ Set.delete UserKinds
 one "defaulting" = Right $ Set.insert Defaulting
 one "no-defaulting" = Right $ Set.delete Defaulting
-one "nothread" = Right $ Set.insert Nothread
-one "no-nothread" = Right $ Set.delete Nothread
-one "rules" = Right $ Set.insert Rules
-one "no-rules" = Right $ Set.delete Rules
-one "controlled" = Right $ Set.insert Controlled
-one "no-controlled" = Right $ Set.delete Controlled
+one "negate" = Right $ Set.insert Negate
+one "no-negate" = Right $ Set.delete Negate
 one "type-families" = Right $ Set.insert TypeFamilies
 one "no-type-families" = Right $ Set.delete TypeFamilies
+one "default" = Right $ foldr (.) id [ f | Right f <- [ one "inline-pragmas",one "rules",one "wrapper",one "defaulting",one "type-analysis",one "monomorphism-restriction",one "global-optimize",one "full-int",one "prelude"]]
+one "controlled" = Right $ Set.insert Controlled
+one "no-controlled" = Right $ Set.delete Controlled
+one "pthread" = Right $ Set.insert Pthread
+one "no-pthread" = Right $ Set.delete Pthread
+one "forall" = Right $ Set.insert Forall
+one "no-forall" = Right $ Set.delete Forall
+one "unboxed-tuples" = Right $ Set.insert UnboxedTuples
+one "no-unboxed-tuples" = Right $ Set.delete UnboxedTuples
+one "cpp" = Right $ Set.insert Cpp
+one "no-cpp" = Right $ Set.delete Cpp
 one "unboxed-values" = Right $ Set.insert UnboxedValues
 one "no-unboxed-values" = Right $ Set.delete UnboxedValues
-one "inline-pragmas" = Right $ Set.insert InlinePragmas
-one "no-inline-pragmas" = Right $ Set.delete InlinePragmas
 one "global-optimize" = Right $ Set.insert GlobalOptimize
 one "no-global-optimize" = Right $ Set.delete GlobalOptimize
-one "cpp" = Right $ Set.insert Cpp
-one "no-cpp" = Right $ Set.delete Cpp
-one "exists" = Right $ Set.insert Exists
-one "no-exists" = Right $ Set.delete Exists
-one "raw" = Right $ Set.insert Raw
-one "no-raw" = Right $ Set.delete Raw
+one "nothread" = Right $ Set.insert Nothread
+one "no-nothread" = Right $ Set.delete Nothread
+one "lint" = Right $ Set.insert Lint
+one "no-lint" = Right $ Set.delete Lint
+one "profile" = Right $ Set.insert Profile
+one "no-profile" = Right $ Set.delete Profile
+one "inline-pragmas" = Right $ Set.insert InlinePragmas
+one "no-inline-pragmas" = Right $ Set.delete InlinePragmas
+one "ffi" = Right $ Set.insert Ffi
+one "no-ffi" = Right $ Set.delete Ffi
 one x = Left x
 
 {-# NOINLINE process #-}
diff --git a/src/FrontEnd/Class.hs b/src/FrontEnd/Class.hs
--- a/src/FrontEnd/Class.hs
+++ b/src/FrontEnd/Class.hs
@@ -1,4 +1,5 @@
-{-# LANGUAGE NoMonoLocalBinds, NamedFieldPuns, TemplateHaskell #-}
+{-# LANGUAGE NoMonoLocalBinds, NamedFieldPuns #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module FrontEnd.Class(
     printClassHierarchy,
     instanceToTopDecls,
@@ -32,7 +33,6 @@
 import Data.Generics(mkQ,something)
 import Data.List(nub)
 import Data.Maybe
-import Data.DeriveTH
 import Debug.Trace
 import Text.PrettyPrint.HughesPJ(render,Doc())
 import Text.Printf
@@ -534,6 +534,8 @@
     ]
 -}
 
-$(derive makeBinary ''Inst)
-$(derive makeBinary ''AssociatedType)
-$(derive makeBinary ''ClassRecord)
+{-!
+deriving instance Binary Inst
+deriving instance Binary AssociatedType
+deriving instance Binary ClassRecord
+!-}
diff --git a/src/FrontEnd/HsSyn.hs b/src/FrontEnd/HsSyn.hs
--- a/src/FrontEnd/HsSyn.hs
+++ b/src/FrontEnd/HsSyn.hs
@@ -1,9 +1,8 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module FrontEnd.HsSyn where
 
 import Data.Binary
 import Data.Generics
-import Data.DeriveTH
 
 import C.FFI
 import FrontEnd.SrcLoc
@@ -437,20 +436,24 @@
 hsKindQuestQuest = HsKind s_QuestQuest
 hsKindStarBang = HsKind s_StarBang
 
-$(derive makeUpdate ''HsModule)
-$(derive makeBinary ''HsAssoc)
-$(derive makeIs ''HsDecl)
-$(derive makeIs ''HsConDecl)
-$(derive makeUpdate ''HsConDecl)
-$(derive makeBinary ''HsQualType)
-$(derive makeBinary ''HsType)
-$(derive makeIs ''HsType)
-$(derive makeBinary ''HsTyVarBind)
-$(derive makeUpdate ''HsTyVarBind)
-$(derive makeBinary ''HsAsst)
-$(derive makeIs ''HsLiteral)
-$(derive makeIs ''HsExp)
-$(derive makeUpdate ''HsExp)
-$(derive makeUpdate ''HsClassHead)
-$(derive makeIs ''HsPat)
-$(derive makeBinary ''HsKind)
+
+
+{-!
+deriving instance Update HsModule
+deriving instance Binary HsAssoc
+deriving instance Is HsDecl
+deriving instance Is HsConDecl
+deriving instance Update HsConDecl
+deriving instance Binary HsQualType
+deriving instance Binary HsType
+deriving instance Is HsType
+deriving instance Binary HsTyVarBind
+deriving instance Update HsTyVarBind
+deriving instance Binary HsAsst
+deriving instance Is HsLiteral
+deriving instance Is HsExp
+deriving instance Update HsExp
+deriving instance Update HsClassHead
+deriving instance Is HsPat
+deriving instance Binary HsKind
+!-}
diff --git a/src/FrontEnd/KindInfer.hs b/src/FrontEnd/KindInfer.hs
--- a/src/FrontEnd/KindInfer.hs
+++ b/src/FrontEnd/KindInfer.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 {-# OPTIONS -funbox-strict-fields #-}
 -- |
 -- This module implements the Kind Inference algorithm, and the routines which
@@ -23,7 +23,6 @@
 import Control.Monad.Writer
 import Data.Binary
 import Data.Generics(Typeable, everything, mkQ)
-import Data.DeriveTH
 import Data.IORef
 import Data.List
 import System.IO.Unsafe
@@ -625,4 +624,6 @@
 fromHsTyVar (HsTyExpKind (Located _ t) _) = fromHsTyVar t
 fromHsTyVar _ = fail "fromHsTyVar"
 
-$(derive makeMonoid ''KindEnv)
+{-!
+deriving instance Monoid KindEnv
+!-}
diff --git a/src/FrontEnd/Representation.hs b/src/FrontEnd/Representation.hs
--- a/src/FrontEnd/Representation.hs
+++ b/src/FrontEnd/Representation.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module FrontEnd.Representation(
     Type(..),
     Tyvar(..),
@@ -27,7 +27,6 @@
 import Data.IORef
 
 import Data.Binary
-import Data.DeriveTH
 import Doc.DocLike
 import Doc.PPrint
 import FrontEnd.Tc.Kind
@@ -312,9 +311,11 @@
 tTTuple' ts = foldl TAp (TCon $ Tycon (unboxedNameTuple TypeConstructor  n) (foldr Kfun kindUTuple $ replicate n kindStar)) ts where
     n = length ts
 
-$(derive makeBinary ''MetaVarType)
-$(derive makeBinary ''Type)
-$(derive makeBinary ''MetaVar)
-$(derive makeBinary ''Tycon)
-$(derive makeBinary ''Pred)
-$(derive makeBinary ''Qual)
+{-!
+deriving instance Binary MetaVarType
+deriving instance Binary Type
+deriving instance Binary MetaVar
+deriving instance Binary Tycon
+deriving instance Binary Pred
+deriving instance Binary Qual
+!-}
diff --git a/src/FrontEnd/SrcLoc.hs b/src/FrontEnd/SrcLoc.hs
--- a/src/FrontEnd/SrcLoc.hs
+++ b/src/FrontEnd/SrcLoc.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module FrontEnd.SrcLoc where
 
 import Control.Applicative
@@ -8,7 +8,6 @@
 import Data.Traversable
 import Data.Binary
 import Data.Generics
-import Data.DeriveTH
 
 import PackedString
 
@@ -121,8 +120,11 @@
       | sl1 == sl2 = show sl1
       | otherwise = show sl1 ++ "-" ++ show sl2
 
-$(derive makeUpdate ''SrcLoc)
-$(derive makeBinary ''SrcLoc)
-$(derive makeUpdate ''SrcSpan)
-$(derive makeBinary ''SrcSpan)
-$(derive makeBinary ''Located)
+{-!
+deriving instance Update SrcLoc
+deriving instance Binary SrcLoc
+deriving instance Update SrcSpan
+deriving instance Binary SrcSpan
+deriving instance Binary Located
+!-}
+
diff --git a/src/FrontEnd/Tc/Kind.hs b/src/FrontEnd/Tc/Kind.hs
--- a/src/FrontEnd/Tc/Kind.hs
+++ b/src/FrontEnd/Tc/Kind.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module FrontEnd.Tc.Kind(
     Kind(..),
     KBase(..),
@@ -18,7 +18,6 @@
 import Data.IORef
 import Data.Monoid
 import Data.Binary
-import Data.DeriveTH
 
 import Doc.DocLike
 import Doc.PPrint(pprint,pprintPrec,pprintAssoc,Assoc(..),PPrint,pprintBinary)
@@ -166,5 +165,7 @@
 unfoldKind (Kfun k1 k2) = k1 : unfoldKind k2
 unfoldKind v = [v]
 
-$(derive makeBinary ''KBase)
-$(derive makeBinary ''Kind)
+{-!
+deriving instance Binary KBase
+deriving instance Binary Kind
+!-}
diff --git a/src/FrontEnd/Tc/Monad.hs b/src/FrontEnd/Tc/Monad.hs
--- a/src/FrontEnd/Tc/Monad.hs
+++ b/src/FrontEnd/Tc/Monad.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE ImpredicativeTypes, TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module FrontEnd.Tc.Monad(
     CoerceTerm(..),
     Tc(),
@@ -54,7 +54,6 @@
 import Control.Monad.Writer.Strict
 import Data.IORef
 import Data.List
-import Data.DeriveTH
 --import Text.PrettyPrint.HughesPJ(Doc)
 import qualified Data.Foldable as T
 import qualified Data.Map as Map
@@ -124,8 +123,6 @@
     outKnots         :: [(Name,Name)]
     }
 
-$(derive makeMonoid ''Output)
-
 newtype Tc a = Tc (ReaderT TcEnv (WriterT Output IO) a)
     deriving(MonadFix,MonadIO,MonadReader TcEnv,MonadWriter Output,Functor)
 
@@ -563,3 +560,7 @@
     taus <- mapM (newMetaVar Tau) ks
     varBind mv (sfunc taus)
     bsfunc taus
+
+{-!
+deriving instance Monoid Output
+!-}
diff --git a/src/Grin/SSimplify.hs b/src/Grin/SSimplify.hs
--- a/src/Grin/SSimplify.hs
+++ b/src/Grin/SSimplify.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module Grin.SSimplify(simplify,explicitRecurse) where
 
 import Control.Monad.Identity
@@ -10,7 +10,6 @@
 import qualified Data.IntSet as IS
 import qualified Data.Map as Map
 import qualified Data.Set as Set
-import Data.DeriveTH
 
 import Grin.Grin
 import Grin.Noodle
@@ -50,8 +49,6 @@
     colFreeVars :: GSet Var
     }
 
-$(derive makeMonoid ''SCol)
-
 {-
 data ExpInfo = ExpInfo {
     expFreeVars :: GSet Var,
@@ -432,4 +429,7 @@
             g e = tickle g e
         return $ as :-> grinLet [createFuncDef True nname (as :-> g e) ] (App nname as (getType e))
 
-$(derive makeMonoid ''SEnv)
+{-!
+deriving instance Monoid SCol
+deriving instance Monoid SEnv
+!-}
diff --git a/src/Ho/ReadSource.hs b/src/Ho/ReadSource.hs
--- a/src/Ho/ReadSource.hs
+++ b/src/Ho/ReadSource.hs
@@ -47,7 +47,9 @@
         _ | fopts FO.Cpp -> readSystem "cpphs" $ incFlags ++ defFlags ++ [fn]
           | fopts FO.M4  -> do
                 m4p <- m4Prelude
-                readSystem "m4" $ ["-s", "-P"] ++ incFlags ++ defFlags ++ [m4p,fn]
+                useGm4 <- existCommand "gm4"
+                let c = if useGm4 then "gm4" else "m4"
+                readSystem c $ ["-s", "-P"] ++ incFlags ++ defFlags ++ [m4p,fn]
           | otherwise -> return lbs
 
 m4Prelude :: IO FilePath
diff --git a/src/Ho/Type.hs b/src/Ho/Type.hs
--- a/src/Ho/Type.hs
+++ b/src/Ho/Type.hs
@@ -1,10 +1,9 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module Ho.Type where
 
 import Data.Monoid
 import qualified Data.ByteString as BS
 import Data.Map
-import Data.DeriveTH
 
 import Data.Version
 import DataConstructors(DataTable)
@@ -21,7 +20,6 @@
 import Name.Id
 import Name.Name(Name,Module)
 import PackedString
-import Util.SetLike
 import Support.CFF
 import Support.MapBinaryInstance()
 import Support.MD5
@@ -184,9 +182,11 @@
 
  -}
 
-$(derive makeUpdate ''CollectedHo)
-$(derive makeUpdate ''HoTcInfo)
-$(derive makeMonoid ''HoTcInfo)
-$(derive makeUpdate ''HoBuild)
-$(derive makeMonoid ''HoBuild)
-$(derive makeUpdate ''Ho)
+{-!
+deriving instance Update CollectedHo
+deriving instance Update HoTcInfo
+deriving instance Monoid HoTcInfo
+deriving instance Update HoBuild
+deriving instance Monoid HoBuild
+deriving instance Update Ho
+!-}
diff --git a/src/Name/VConsts.hs b/src/Name/VConsts.hs
--- a/src/Name/VConsts.hs
+++ b/src/Name/VConsts.hs
@@ -1,10 +1,9 @@
-{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -F -pgmFderive -optF-F #-}
 module Name.VConsts where
 
 import Control.Applicative
 import Data.Foldable
 import Data.Traversable
-import Data.DeriveTH
 
 -- This is much more verbose/complicated than it needs be.
 
@@ -77,6 +76,8 @@
     func_runRaw :: a
     }
 
-$(derive makeFunctor ''FuncNames)
-$(derive makeTraversable ''FuncNames)
-$(derive makeFoldable ''FuncNames)
+{-!
+deriving instance Functor FuncNames
+deriving instance Traversable FuncNames
+deriving instance Foldable FuncNames
+!-}
diff --git a/src/RawFiles.hs b/src/RawFiles.hs
--- a/src/RawFiles.hs
+++ b/src/RawFiles.hs
@@ -1087,6 +1087,254 @@
 {-# NOINLINE changelog #-}
 changelog :: ByteString
 changelog = unsafePerformIO $ unsafePackAddress "\
+ \commit fdd05fe6aeec7d305a818b5a92c36fc2e1a5574c\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Sat Oct 26 18:38:40 2013 +0900\n\
+ \\n\
+ \    Add release note for 0.8.0.9.\n\
+ \\n\
+ \commit 0e19f347196f9d8dfabc60b9f65dc2b3557885e3\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Oct 9 14:36:16 2013 +0900\n\
+ \\n\
+ \    Added regress test for BUG #48 (fixed #48).\n\
+ \\n\
+ \commit 4a8646ec8a0b0b9120c60d37ef189a1e9dacd6b5\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Oct 9 14:03:19 2013 +0900\n\
+ \\n\
+ \    Test: Travis-CI find the #48 BUG with running regress test?\n\
+ \\n\
+ \commit ae2208bb53df805907008a60063ef53f1f699d9b\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Oct 8 22:51:38 2013 +0900\n\
+ \\n\
+ \    Fix Segmentation fault: gc_add_root with static thunk.\n\
+ \\n\
+ \commit 9c264872105597700e2ba403851cf3b236cb1646\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Fri Oct 4 02:23:00 2013 +0900\n\
+ \\n\
+ \    Should set disable profiling option on cabal configure.\n\
+ \\n\
+ \commit cc2cac2ba49c65801ffe2078bcd7522011cc718f\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Fri Oct 4 01:59:42 2013 +0900\n\
+ \\n\
+ \    No prof.\n\
+ \\n\
+ \commit 3c7517d6e2bcf003c8135174383f77975965b865\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Fri Oct 4 01:01:17 2013 +0900\n\
+ \\n\
+ \    Copy from OS X branch.\n\
+ \\n\
+ \commit 971a778441a64fc62897861a655f18387be834bd\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Fri Oct 4 00:41:40 2013 +0900\n\
+ \\n\
+ \    Do not run haddock on travis-ci.\n\
+ \\n\
+ \commit bc824e11e5db34f74c4b6cabf8ba55b6bcbea0dd\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 25 17:53:43 2013 +0900\n\
+ \\n\
+ \    Update travis setting.\n\
+ \\n\
+ \commit 5a961d1c3d5fcbf7399392dc7015c482fa797c57\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 25 02:52:40 2013 +0900\n\
+ \\n\
+ \    Split travis-ci scripts.\n\
+ \\n\
+ \commit bb2db48f6c3cc9b00ef25f100630d47e5820bcdd\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Sat Sep 7 12:38:58 2013 +0900\n\
+ \\n\
+ \    The derive-2.5.13 does not have indent problem.\n\
+ \\n\
+ \commit 26656dc5399d5ea92d63165396d1ef561b3dc01e\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Fri Sep 6 22:25:40 2013 +0900\n\
+ \\n\
+ \    Edit deb package list needed by Ajhc.\n\
+ \\n\
+ \commit 2f784567629a52e6b588f1a03b9d8df2e2a80fdf\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 19:40:29 2013 +0900\n\
+ \\n\
+ \    Suport \"gm4\" command for BSD like OS.\n\
+ \\n\
+ \commit 2d251f59c8cc9de2f62484fc23c7a3170b4179c7\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 18:54:36 2013 +0900\n\
+ \\n\
+ \    Use derive-2.5.11 on travis-ci.\n\
+ \\n\
+ \commit aefe5c1a89363902be856d40a78d91bc118e4e5a\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 18:41:47 2013 +0900\n\
+ \\n\
+ \    Avoid derive error.\n\
+ \    \n\
+ \    The BUG is caused by derive-2.5.12. It's not duplicated withderive-2.5.11.\n\
+ \\n\
+ \commit 0f5f9f9fd6748a7ef640966be221b3dfe92ed45f\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 16:41:40 2013 +0900\n\
+ \\n\
+ \    Fix a bit miss.\n\
+ \\n\
+ \commit b74a18f1256ab34fb8ee445292c505fd48ef88de\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 16:38:52 2013 +0900\n\
+ \\n\
+ \    Need haskell-derive-utils: deb package to install git ver.\n\
+ \\n\
+ \commit 853c6c23134a16cdbf94dbbce228fb5cef22e096\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 16:34:24 2013 +0900\n\
+ \\n\
+ \    Path to $HOME/.cabal/bin.\n\
+ \\n\
+ \commit 5176a8c40fd218d7befe1e36d4dfe7337ec66f71\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 16:21:55 2013 +0900\n\
+ \\n\
+ \    Start from Haskell env on travis-ci.\n\
+ \\n\
+ \commit bd1a4d06dc9407a2a4bb1ab83f2d1c5c82c2c867\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 16:18:13 2013 +0900\n\
+ \\n\
+ \    Fix some warning message.\n\
+ \\n\
+ \commit fbde2c3f65a98705250ea0717292764deef4108c\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 16:10:08 2013 +0900\n\
+ \\n\
+ \    Free derive from TemplateHaskell oppression.\n\
+ \\n\
+ \commit 59fdda5cb93af5a6ece2d571f211cb173120a632\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Wed Sep 4 12:37:52 2013 +0900\n\
+ \\n\
+ \    Do not use -g option for m4. Old m4 not support it.\n\
+ \\n\
+ \commit a7aec48094754fb45739009b85be283bce0c32a3\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 20:05:54 2013 +0900\n\
+ \\n\
+ \    Fill zero arena->public_caches_p.\n\
+ \\n\
+ \commit 0f4d9a92a622cf1ea4ddae3b433ce802dbeeeb86\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 19:41:52 2013 +0900\n\
+ \\n\
+ \    Depend on cpphs.\n\
+ \\n\
+ \commit 8969d49c72588b198f55955fda0079c15b2507d4\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 19:41:31 2013 +0900\n\
+ \\n\
+ \    Fix miss commit.\n\
+ \\n\
+ \commit 6615edf30a87e65260d4be8bde94ac00c929a5c8\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 12:54:11 2013 +0900\n\
+ \\n\
+ \    No need obj-c line.\n\
+ \\n\
+ \commit 0a905b8f5547bc3be217ce5919a95dd7bbfa2c16\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 12:45:08 2013 +0900\n\
+ \\n\
+ \    Come back .travis.yml for Ubuntu.\n\
+ \\n\
+ \commit 9341d487860fa95001e891e41607be7e7a914fb8\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 07:45:53 2013 +0900\n\
+ \\n\
+ \    Set cabal bin path.\n\
+ \\n\
+ \commit 7a364f822f007c3c3bb034a421e2696da4e49aa2\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 07:40:32 2013 +0900\n\
+ \\n\
+ \    Test to cabal install from Hackage DB.\n\
+ \\n\
+ \commit 4ce9691aa649111e8ab5aa5081d09e49cf4a9fd3\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 07:10:54 2013 +0900\n\
+ \\n\
+ \    New cabal-setup target.\n\
+ \\n\
+ \commit f7372641f7a04d55931fbbb7341e6ccf2e0cf0d2\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 06:31:49 2013 +0900\n\
+ \\n\
+ \    Try to use haskell-platform packed as binary package.\n\
+ \\n\
+ \commit 42d56a828d2bb6211228b0b41475465d1b850485\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 06:22:43 2013 +0900\n\
+ \\n\
+ \    List up Mac OS X pkgs.\n\
+ \\n\
+ \commit cd52e3e5dfe3bd7b80ad4efa7b32521f6e7098f0\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 06:17:10 2013 +0900\n\
+ \\n\
+ \    cabal-install is lighter than haskell-platform on travis-ci.\n\
+ \\n\
+ \commit 583fe0a1905069c85ec0cd1b1e8784de2ce2610e\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 05:24:31 2013 +0900\n\
+ \\n\
+ \    Add haskell packages needed for build Ajhc.\n\
+ \\n\
+ \commit 31fb46d7f8a0ae298d1ac16731e0a42853e68c87\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 04:46:57 2013 +0900\n\
+ \\n\
+ \    Try \"brew install haskell-platform --verbose\".\n\
+ \\n\
+ \commit d8feae23a50430844ab226b5a0977b3d5475c5b5\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 04:41:39 2013 +0900\n\
+ \\n\
+ \    Add --verbose option for brew.\n\
+ \\n\
+ \commit ed2b2a0f5fa7035abdba822bef6ec4810e5af483\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 04:32:31 2013 +0900\n\
+ \\n\
+ \    Too heavy installing haskell-platform with brew.\n\
+ \\n\
+ \commit aca1dd4317052d62b4573920c913acf7e46e14e0\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 04:14:56 2013 +0900\n\
+ \\n\
+ \    Use homebrew.\n\
+ \\n\
+ \commit 124f20ce0489c25d8c0360543fd702142eec8f94\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Tue Sep 3 03:53:13 2013 +0900\n\
+ \\n\
+ \    New git branch to run test on Mac OS X + travis-ci.\n\
+ \\n\
+ \commit 4d2f4e3786300666451585926a46e1093c1dae69\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Mon Sep 2 23:42:53 2013 +0900\n\
+ \\n\
+ \    m4 -g for BSD like OS.\n\
+ \\n\
+ \commit 694ab3c7ddb9b85efe3b88ef16554c6beee195cd\n\
+ \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
+ \Date:   Mon Sep 2 16:14:45 2013 +0900\n\
+ \\n\
+ \    Bump up version 0.8.0.9.\n\
+ \\n\
  \commit a1265f031e6b75f9346ec23ca7caec0b5ced82bc\n\
  \Author: Kiwamu Okabe <kiwamu@debian.or.jp>\n\
  \Date:   Mon Sep 2 16:12:19 2013 +0900\n\
@@ -2754,7 +3002,7 @@
 {-# NOINLINE shortchange_txt #-}
 shortchange_txt :: ByteString
 shortchange_txt = unsafePerformIO $ unsafePackAddress "\
- \a1265f031e6b75f9346ec23ca7caec0b5ced82bc\
+ \fdd05fe6aeec7d305a818b5a92c36fc2e1a5574c\
  \"#
 
 -- | Generated from rts\/rts\/slub.c
@@ -3164,10 +3412,6 @@
  \static struct s_block *get_free_block(gc_t gc, arena_t arena, bool retry);\n\
  \static void *jhc_aligned_alloc(unsigned size);\n\
  \\n\
- \typedef struct {\n\
- \        sptr_t ptrs[0];\n\
- \} entry_t;\n\
- \\n\
  \static const void *nh_start, *nh_end;\n\
  \\n\
  \static bool\n\
@@ -3176,14 +3420,6 @@
  \        return (s < (entry_t *)nh_start || s > (entry_t *)nh_end);\n\
  \}\n\
  \\n\
- \struct stack {\n\
- \        unsigned size;\n\
- \        unsigned ptr;\n\
- \        entry_t * *stack;\n\
- \};\n\
- \\n\
- \#define EMPTY_STACK { 0, 0, NULL }\n\
- \\n\
  \static void\n\
  \stack_grow(struct stack *s, unsigned grow)\n\
  \{\n\
@@ -3207,15 +3443,13 @@
  \        }\n\
  \}\n\
  \\n\
- \static struct stack root_stack = EMPTY_STACK;\n\
- \\n\
  \void gc_add_root(gc_t gc, arena_t arena, void *root)\n\
  \{\n\
  \        if(IS_PTR(root)) {\n\
  \                entry_t *nroot = TO_GCPTR(root);\n\
  \                if(gc_check_heap(nroot)) {\n\
- \                        stack_check(&root_stack,1);\n\
- \                        root_stack.stack[root_stack.ptr++] = nroot;\n\
+ \                        stack_check(&arena->root_stack,1);\n\
+ \                        arena->root_stack.stack[arena->root_stack.ptr++] = nroot;\n\
  \                }\n\
  \        }\n\
  \}\n\
@@ -3277,10 +3511,10 @@
  \        clear_used_bits(arena);\n\
  \\n\
  \        debugf(\"Setting Roots:\");\n\
- \        stack_check(&stack, root_stack.ptr);\n\
- \        for(unsigned i = 0; i < root_stack.ptr; i++) {\n\
- \                gc_add_grey(&stack, root_stack.stack[i]);\n\
- \                debugf(\" %p\", root_stack.stack[i]);\n\
+ \        stack_check(&stack, arena->root_stack.ptr);\n\
+ \        for(unsigned i = 0; i < arena->root_stack.ptr; i++) {\n\
+ \                gc_add_grey(&stack, arena->root_stack.stack[i]);\n\
+ \                debugf(\" %p\", arena->root_stack.stack[i]);\n\
  \                DO_GC_MARK_DEEPER(&stack, &number_redirects);\n\
  \        }\n\
  \        debugf(\" # \");\n\
@@ -3342,7 +3576,7 @@
  \                        number_stack,\n\
  \                        number_ptr,\n\
  \                        number_redirects,\n\
- \                        (unsigned)root_stack.ptr\n\
+ \                        (unsigned)arena->root_stack.ptr\n\
  \                       );\n\
  \                arena->number_allocs = 0;\n\
  \        }\n\
@@ -3845,6 +4079,7 @@
  \alloc_public_caches(arena_t arena, size_t size) {\n\
  \        if (arena->public_caches_p == NULL) {\n\
  \                arena->public_caches_p = malloc(size);\n\
+ \                memset(arena->public_caches_p, 0, size);\n\
  \        }\n\
  \}\n\
  \\n\
@@ -3872,6 +4107,7 @@
  \        arena->block_used = 0;\n\
  \        arena->block_threshold = 8;\n\
  \        arena->current_megablock = NULL;\n\
+ \        memset(&arena->root_stack, 0, sizeof(arena->root_stack));\n\
  \\n\
  \        for (int i = 0; i < GC_STATIC_ARRAY_NUM; i++) {\n\
  \                find_cache(&arena->array_caches[i], arena, i + 1, i + 1);\n\
@@ -5187,6 +5423,18 @@
  \\n\
  \#if _JHC_GC == _JHC_GC_JGC\n\
  \\n\
+ \typedef struct {\n\
+ \        sptr_t ptrs[0];\n\
+ \} entry_t;\n\
+ \\n\
+ \struct stack {\n\
+ \        unsigned size;\n\
+ \        unsigned ptr;\n\
+ \        entry_t * *stack;\n\
+ \};\n\
+ \\n\
+ \#define EMPTY_STACK { 0, 0, NULL }\n\
+ \\n\
  \struct s_caches_pub;\n\
  \\n\
  \struct s_arena {\n\
@@ -5201,6 +5449,7 @@
  \        unsigned number_gcs;    // number of garbage collections\n\
  \        unsigned number_allocs; // number of allocations since last garbage collection\n\
  \        gc_t gc_stack_base;\n\
+ \        struct stack root_stack;\n\
  \// 7 to share caches with the first 7 tuples\n\
  \#define GC_STATIC_ARRAY_NUM 7\n\
  \#define GC_MAX_BLOCK_ENTRIES 150\n\
diff --git a/src/Util/FilterInput.hs b/src/Util/FilterInput.hs
--- a/src/Util/FilterInput.hs
+++ b/src/Util/FilterInput.hs
@@ -1,4 +1,4 @@
-module Util.FilterInput (filterInput,readSystem) where
+module Util.FilterInput (filterInput,readSystem,existCommand) where
 
 import Control.Monad (when)
 import Data.List
@@ -24,3 +24,8 @@
     when (rExit /= ExitSuccess) $
       putErrDie (printf "'%s' exited abnormally (%s)" (intercalate " " (prog:args)) (show rExit))
     return $ LBS.pack rStdout
+
+existCommand :: String -> IO Bool
+existCommand cmd = do
+  (rExit, _, _) <- readProcessWithExitCode "which" [cmd] ""
+  return $ if rExit == ExitSuccess then True else False
diff --git a/src/Version/Config.hs b/src/Version/Config.hs
--- a/src/Version/Config.hs
+++ b/src/Version/Config.hs
@@ -1,7 +1,7 @@
 module Version.Config where
 
 shortVersion = "0.8"
-version = "0.8.0.8"
+version = "0.8.0.9"
 package = "ajhc"
 libdir  = "/usr/local/lib"
 datadir = "/usr/local/share"
