diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,10 @@
 HsQML - Release History
 
+release-0.2.0.2 - 2014.01.18
+
+  * Added support for Cabal 1.18 API.
+  * Relaxed Cabal dependency constraint on 'text'.
+
 release-0.2.0.1 - 2013.11.12
 
   * Added check that MacOS uses primordial thread for event loop.
@@ -14,7 +19,7 @@
   * Added envionment variable to control logging.
   * New design for marshalling type-classes.
   * New API for Engine management.
-  * Relexed Cabal dependency constraints.
+  * Relaxed Cabal dependency constraints.
   * Fixed linking problem on some Linux systems.
   * Fixed support for non-threaded RTS.
   * Fixed various object lifetime issues.
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,31 +1,70 @@
 #!/usr/bin/runhaskell 
+{-# LANGUAGE TemplateHaskell #-}
 module Main where
 
-import Data.List
-import Distribution.Simple
-import Distribution.Simple.LocalBuildInfo
-import Distribution.Simple.PackageIndex
-import Distribution.Simple.Setup
-import Distribution.Simple.Utils (rawSystemExit)
-import qualified Distribution.InstalledPackageInfo as I
-import Distribution.PackageDescription
-import System.Directory
-import System.FilePath
-
 import Control.Monad
 import Data.Char
+import Data.List
 import Data.Maybe
-import qualified Distribution.ModuleName as ModuleName
+import Distribution.Simple
 import Distribution.Simple.BuildPaths
+import Distribution.Simple.LocalBuildInfo
 import Distribution.Simple.Program
 import Distribution.Simple.Program.Ld
 import Distribution.Simple.Register
+import Distribution.Simple.Setup
 import Distribution.Simple.Utils
 import Distribution.Text
-import Distribution.Version
 import Distribution.Verbosity
+import qualified Distribution.InstalledPackageInfo as I
+import qualified Distribution.ModuleName as ModuleName
+import Distribution.PackageDescription
+import Language.Haskell.TH
 import System.FilePath
 
+-- Use Template Haskell to support both the pre- and post-1.18 Cabal API
+$(let
+    newCabalAPI = cabalVersion >= Version [1,17,0] []
+    vnameE = VarE . mkName
+    vnameP = VarP . mkName
+    cnameE = ConE . mkName
+    app2E f x y = AppE (AppE f x) y
+    app3E f x y z = AppE (app2E f x y) z
+    nothingE = cnameE "Nothing"
+    falseE = cnameE "False"
+    -- 'LocalBuildInfo' record changed fields in Cabal 1.18
+    extractCLBI = if newCabalAPI
+        then app2E (vnameE "getComponentLocalBuildInfo")
+            (vnameE "x") (cnameE "CLibName")
+        else AppE (vnameE "fromJust") $ AppE (vnameE "libraryConfig")
+            (vnameE "x")
+    -- 'programFindLocation' field changed signature in Cabal 1.18
+    adaptFindLoc = if newCabalAPI
+        then LamE [vnameP "f", vnameP "x", WildP] $
+            AppE (vnameE "f") (vnameE "x")
+        else vnameE "id"
+    -- 'rawSystemStdInOut' function changed signature in Cabal 1.18
+    rawSystemStdErr = if newCabalAPI
+        then AppE (app3E (app3E (vnameE "rawSystemStdInOut")
+            (vnameE "v") (vnameE "p") (vnameE "a"))
+            nothingE nothingE nothingE) falseE 
+        else app2E (app3E (vnameE "rawSystemStdInOut")
+            (vnameE "v") (vnameE "p") (vnameE "a")) nothingE falseE
+    -- 'programPostConf' field changed signature in Cabal 1.18
+    noPostConf = if newCabalAPI
+        then LamE [WildP, vnameP "c"] $ AppE (vnameE "return") (vnameE "c")
+        else LamE [WildP, WildP] $ AppE (vnameE "return") (cnameE "[]")
+    in return [
+        FunD (mkName "extractCLBI") [
+            Clause [vnameP "x"] (NormalB extractCLBI) []],
+        FunD (mkName "adaptFindLoc") [
+            Clause [] (NormalB adaptFindLoc) []],
+        FunD (mkName "rawSystemStdErr") [
+            Clause [vnameP "v", vnameP "p", vnameP "a"] (
+                NormalB rawSystemStdErr) []],
+        FunD (mkName "noPostConf") [
+            Clause [] (NormalB noPostConf) []]])
+
 main :: IO ()
 main = defaultMainWithHooks simpleUserHooks {
   confHook = confWithQt, buildHook = buildWithQt,
@@ -111,9 +150,9 @@
 
 mkGHCiFixLibPkgId :: PackageDescription -> PackageIdentifier
 mkGHCiFixLibPkgId pkgDesc =
-  let id = packageId pkgDesc
-      (PackageName name) = pkgName id
-  in id {pkgName = PackageName $ "cbits-" ++ name}
+  let pid = packageId pkgDesc
+      (PackageName name) = pkgName pid
+  in pid {pkgName = PackageName $ "cbits-" ++ name}
 
 mkGHCiFixLibName :: PackageDescription -> String
 mkGHCiFixLibName pkgDesc =
@@ -133,7 +172,6 @@
     (stubObjs ++ hsObjs)
   (ghc,_) <- requireProgram verb ghcProgram (withPrograms lbi)
   let bi = libBuildInfo lib
-      bDir = buildDir lbi
   runProgram verb ghc (
     ["-shared","-o",bDir </> (mkGHCiFixLibName pkgDesc)] ++
     (ldOptions bi) ++ (map ("-l" ++) $ extraLibs bi) ++
@@ -144,14 +182,15 @@
 mocProgram :: Program
 mocProgram = Program {
   programName = "moc",
-  programFindLocation = flip findProgramLocation "moc",
-  programFindVersion = \verbosity path -> do
-    (_,line,_) <- rawSystemStdInOut verbosity path ["-v"] Nothing False
+  programFindLocation = adaptFindLoc $
+    \verb -> findProgramLocation verb "moc",
+  programFindVersion = \verb path -> do
+    (_,line,_) <- rawSystemStdErr verb path ["-v"]
     return $
       findSubseq (stripPrefix "(Qt ") line >>=
       Just . takeWhile (\c -> isDigit c || c == '.') >>=
       simpleParse,
-  programPostConf = \_ _ -> return []
+  programPostConf = noPostConf
 }
 
 qtVersionRange :: VersionRange
@@ -172,12 +211,12 @@
 
 regWithQt :: 
   PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()
-regWithQt pkg@PackageDescription { library       = Just lib  }
-         lbi@LocalBuildInfo     { libraryConfig = Just clbi } hooks flags = do
+regWithQt pkg@PackageDescription { library = Just lib } lbi _ flags = do
   let verb    = fromFlag $ regVerbosity flags
       inplace = fromFlag $ regInPlace flags
       dist    = fromFlag $ regDistPref flags
       pkgDb   = withPackageDB lbi
+      clbi    = extractCLBI lbi
   instPkgInfo <- generateRegistrationInfo
     verb pkg lib lbi clbi inplace dist
   let instPkgInfo' = if (needsGHCiFix pkg lbi)
@@ -187,9 +226,8 @@
         else instPkgInfo
   case flagToMaybe $ regGenPkgConf flags of
     Just regFile -> do
-      let regFile = fromMaybe (display (packageId pkg) <.> "conf")
-            (fromFlag $ regGenPkgConf flags)
-      writeUTF8File regFile $ I.showInstalledPackageInfo instPkgInfo'
+      writeUTF8File (fromMaybe (display (packageId pkg) <.> "conf") regFile) $
+        I.showInstalledPackageInfo instPkgInfo'
     _ | fromFlag (regGenScript flags) ->
       die "Registration scripts are not implemented."
       | otherwise -> 
diff --git a/hsqml.cabal b/hsqml.cabal
--- a/hsqml.cabal
+++ b/hsqml.cabal
@@ -1,6 +1,6 @@
 Name:               hsqml
-Version:            0.2.0.1
-Cabal-version:      >= 1.10
+Version:            0.2.0.2
+Cabal-version:      >= 1.14
 Build-type:         Custom
 License:            BSD3
 License-file:       LICENSE
@@ -34,7 +34,7 @@
         containers   >= 0.4 && < 0.6,
         filepath     == 1.3.*,
         network      >= 2.3 && < 2.5,
-        text         == 0.11.*,
+        text         >= 0.11 && < 1.2,
         tagged       >= 0.4 && < 0.8,
         transformers >= 0.2 && < 0.4
     Exposed-modules:
@@ -88,7 +88,7 @@
         containers >= 0.4 && < 0.6,
         directory  >= 1.1 && < 1.3,
         network    >= 2.3 && < 2.5,
-        text       == 0.11.*,
+        text       >= 0.11 && < 1.2,
         tagged     >= 0.4 && < 0.8,
         QuickCheck >= 2.4 && < 2.7,
         hsqml      == 0.2.*
