diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -8,6 +8,7 @@
 import Data.Monoid
 import Data.Char
 import Distribution.Simple
+import Distribution.Simple.PreProcess
 import Distribution.Simple.Program
 import Distribution.Simple.Setup hiding (Flag)
 import Distribution.Simple.LocalBuildInfo
@@ -63,6 +64,7 @@
     f packageDescription localBuildInfo userHooks testFlags
     hook args packageDescription localBuildInfo userHooks testFlags
 
+llvmProgram :: Program
 llvmProgram = (simpleProgram "llvm-config") {
   programFindLocation = programSearch (programFindLocation . simpleProgram),
   programFindVersion = 
@@ -74,44 +76,49 @@
       \v p -> findProgramVersion "--version" (svnToTag . trim) v p
  }
 
-main = do
-  let (ldLibraryPathVar, ldLibraryPathSep) = 
+getLLVMConfig :: ConfigFlags -> IO (String -> IO String)
+getLLVMConfig configFlags = do
+  let verbosity = fromFlag $ configVerbosity configFlags
+  (program, _, _) <- requireProgramVersion verbosity llvmProgram
+                     (withinVersion llvmVersion)
+                     (configPrograms configFlags)
+  return $ getProgramOutput verbosity program . return
+
+addToLdLibraryPath :: String -> IO ()
+addToLdLibraryPath path = do
+  let (ldLibraryPathVar, ldLibraryPathSep) =
         case buildOS of
           OSX -> ("DYLD_LIBRARY_PATH",":")
           _ -> ("LD_LIBRARY_PATH",":")
-      addToLdLibraryPath s = do
-         v <- try $ getEnv ldLibraryPathVar :: IO (Either SomeException String)
-         setEnv ldLibraryPathVar (s ++ either (const "") (ldLibraryPathSep ++) v)
-      getLLVMConfig configFlags = do
-         let verbosity = fromFlag $ configVerbosity configFlags
-         (program, _, _) <- requireProgramVersion verbosity llvmProgram
-                            (withinVersion llvmVersion)
-                            (configPrograms configFlags)
-         let llvmConfig :: [String] -> IO String
-             llvmConfig = getProgramOutput verbosity program
-         return llvmConfig
-      addLLVMToLdLibraryPath configFlags = do
-        llvmConfig <- getLLVMConfig configFlags
-        [libDir] <- liftM lines $ llvmConfig ["--libdir"]
-        addToLdLibraryPath libDir
-         
-  defaultMainWithHooks simpleUserHooks {
+  v <- try $ getEnv ldLibraryPathVar :: IO (Either SomeException String)
+  setEnv ldLibraryPathVar (path ++ either (const "") (ldLibraryPathSep ++) v)
+
+addLLVMToLdLibraryPath :: ConfigFlags -> IO ()
+addLLVMToLdLibraryPath configFlags = do
+  llvmConfig <- getLLVMConfig configFlags
+  [libDir] <- liftM lines $ llvmConfig "--libdir"
+  addToLdLibraryPath libDir
+                           
+main = do
+  let origUserHooks = simpleUserHooks
+                  
+  defaultMainWithHooks origUserHooks {
     hookedPrograms = [ llvmProgram ],
 
     confHook = \(genericPackageDescription, hookedBuildInfo) configFlags -> do
       llvmConfig <- getLLVMConfig configFlags
 
       llvmCppFlags <- do
-        l <- llvmConfig ["--cppflags"]
+        l <- llvmConfig "--cppflags"
         return $ (filter ("-D" `isPrefixOf`) $ words l) \\ (map ("-D"++) uncheckedHsFFIDefines)
-      includeDirs <- liftM lines $ llvmConfig ["--includedir"]
-      libDirs@[libDir] <- liftM lines $ llvmConfig ["--libdir"]
-      [llvmVersion] <- liftM lines $ llvmConfig ["--version"]
+      includeDirs <- liftM lines $ llvmConfig "--includedir"
+      libDirs@[libDir] <- liftM lines $ llvmConfig "--libdir"
+      [llvmVersion] <- liftM lines $ llvmConfig "--version"
       let sharedLib = case llvmVersion of
                         "3.2" -> "LLVM-3.2svn"
                         x -> "LLVM-" ++ x
-      staticLibs <- liftM (map (fromJust . stripPrefix "-l") . words) $ llvmConfig ["--libs"]
-      systemLibs <- liftM (map (fromJust . stripPrefix "-l") . words) $ llvmConfig ["--system-libs"]
+      staticLibs <- liftM (map (fromJust . stripPrefix "-l") . words) $ llvmConfig "--libs"
+      systemLibs <- liftM (map (fromJust . stripPrefix "-l") . words) $ llvmConfig "--system-libs"
 
       let genericPackageDescription' = genericPackageDescription {
             condLibrary = do
@@ -136,10 +143,17 @@
       addLLVMToLdLibraryPath configFlags'
       confHook simpleUserHooks (genericPackageDescription', hookedBuildInfo) configFlags',
 
+    hookedPreProcessors =
+      let origHookedPreprocessors = hookedPreProcessors origUserHooks
+          newHsc buildInfo localBuildInfo =
+            maybe ppHsc2hs id (lookup "hsc" origHookedPreprocessors) buildInfo' localBuildInfo
+              where buildInfo' = buildInfo { ccOptions = ccOptions buildInfo \\ ["-std=c++11"] }
+      in [("hsc", newHsc)] ++ origHookedPreprocessors,
+
     buildHook = \packageDescription localBuildInfo userHooks buildFlags -> do
-      addLLVMToLdLibraryPath (configFlags localBuildInfo)
-      buildHook simpleUserHooks packageDescription localBuildInfo userHooks buildFlags,
+          addLLVMToLdLibraryPath (configFlags localBuildInfo)
+          buildHook origUserHooks packageDescription localBuildInfo userHooks buildFlags,
 
     testHook = preHookOld (\_ localBuildInfo _ _ -> addLLVMToLdLibraryPath (configFlags localBuildInfo))
-               (testHook simpleUserHooks)
+               (testHook origUserHooks)
    }
diff --git a/llvm-general.cabal b/llvm-general.cabal
--- a/llvm-general.cabal
+++ b/llvm-general.cabal
@@ -1,10 +1,12 @@
 name: llvm-general
-version: 3.5.1.0
+version: 3.5.1.1
 license: BSD3
 license-file: LICENSE
 author: Benjamin S.Scarlet <fgthb0@greynode.net>
 maintainer: Benjamin S. Scarlet <fgthb0@greynode.net>
 copyright: (c) 2013 Benjamin S. Scarlet and Google Inc.
+homepage: http://github.com/bscarlet/llvm-general/
+bug-reports: http://github.com/bscarlet/llvm-general/issues
 build-type: Custom
 stability: experimental
 cabal-version: >= 1.8
@@ -12,9 +14,9 @@
 synopsis: General purpose LLVM bindings
 description:
   llvm-general is a set of Haskell bindings for LLVM <http://llvm.org/>. Unlike other current Haskell bindings,
-	it uses an ADT to represent LLVM IR (<http://llvm.org/docs/LangRef.html>), and so offers two advantages: it
-	handles almost all of the stateful complexities of using the LLVM API to build IR; and it supports moving IR not
-	only from Haskell into LLVM C++ objects, but the other direction - from LLVM C++ into Haskell.
+  it uses an ADT to represent LLVM IR (<http://llvm.org/docs/LangRef.html>), and so offers two advantages: it
+  handles almost all of the stateful complexities of using the LLVM API to build IR; and it supports moving IR not
+  only from Haskell into LLVM C++ objects, but the other direction - from LLVM C++ into Haskell.
 extra-source-files:
   src/LLVM/General/Internal/FFI/Analysis.h
   src/LLVM/General/Internal/FFI/Attribute.h
@@ -41,7 +43,7 @@
   type: git
   location: git://github.com/bscarlet/llvm-general.git
   branch: llvm-3.5
-  tag: v3.5.1.0
+  tag: v3.5.1.1
 
 flag shared-llvm
   description: link against llvm shared rather than static library
@@ -59,7 +61,7 @@
     base >= 4.6 && < 5,
     utf8-string >= 0.3.7,
     bytestring >= 0.9.1.10,
-    transformers >= 0.3.0.0,
+    transformers >= 0.3.0.0 && < 0.5,
     transformers-compat,
     mtl >= 2.1.3,
     template-haskell >= 2.5.0.0,
@@ -211,7 +213,7 @@
     HUnit >= 1.2.4.2,
     test-framework-quickcheck2 >= 0.3.0.1,
     QuickCheck >= 2.5.1.1,
-    llvm-general == 3.5.1.0,
+    llvm-general == 3.5.1.1,
     llvm-general-pure == 3.5.0.0,
     containers >= 0.4.2.1,
     mtl >= 2.1,
