diff --git a/llvm-ffi.cabal b/llvm-ffi.cabal
--- a/llvm-ffi.cabal
+++ b/llvm-ffi.cabal
@@ -1,6 +1,6 @@
 Cabal-Version: 2.2
 Name:          llvm-ffi
-Version:       9.1.0.1
+Version:       9.1.1
 License:       BSD-3-Clause
 License-File:  LICENSE
 Synopsis:      FFI bindings to the LLVM compiler toolkit.
@@ -110,16 +110,16 @@
 
 Source-Repository head
   Type:     darcs
-  Location: http://hub.darcs.net/thielema/llvm-ffi/
+  Location: https://hub.darcs.net/thielema/llvm-ffi/
 
 Source-Repository this
-  Tag:      9.1.0.1
+  Tag:      9.1.1
   Type:     darcs
-  Location: http://hub.darcs.net/thielema/llvm-ffi/
+  Location: https://hub.darcs.net/thielema/llvm-ffi/
 
 Library
   Build-Depends:
-    enumset >=0.0.5 && <0.1,
+    enumset >=0.0.5 && <0.2,
     base >= 3 && < 5
 
   Hs-Source-Dirs: src
@@ -148,7 +148,6 @@
       LLVM.FFI.Base
       LLVM.FFI.Version
       LLVM.Target.ARM
-      LLVM.Target.CppBackend
       LLVM.Target.Hexagon
       LLVM.Target.MSP430
       LLVM.Target.Mips
diff --git a/src/LLVM/FFI/Base.hsc b/src/LLVM/FFI/Base.hsc
--- a/src/LLVM/FFI/Base.hsc
+++ b/src/LLVM/FFI/Base.hsc
@@ -1,13 +1,19 @@
 {-# LANGUAGE Safe #-}
 module LLVM.FFI.Base where
 
+-- import Foreign.ForeignPtr (FinalizerPtr) -- unsafe before GHC-7.10
+import Foreign.Ptr (Ptr, FunPtr)
+
 import qualified Data.Bool as Bool
 import Data.Int (Int32)
 
 import Prelude
-         (Eq, Enum, Show, fromIntegral, show, fromEnum, toEnum, (.), (==))
+         (IO, Eq, Enum, Show, fromIntegral, show, fromEnum, toEnum, (.), (==))
 
 #include <llvm-c/Core.h>
+
+
+type FinalizerPtr a = FunPtr (Ptr a -> IO ())
 
 
 newtype Bool = Bool (#type LLVMBool)
diff --git a/src/LLVM/FFI/Core.hsc b/src/LLVM/FFI/Core.hsc
--- a/src/LLVM/FFI/Core.hsc
+++ b/src/LLVM/FFI/Core.hsc
@@ -610,7 +610,7 @@
 
 import qualified Foreign.C.Types as C
 import Foreign.C.String (CString)
-import Foreign.Ptr (Ptr, FunPtr)
+import Foreign.Ptr (Ptr)
 
 import Data.Typeable (Typeable)
 
@@ -958,7 +958,7 @@
 disposeModule = Raw.disposeModule
 
 foreign import ccall unsafe "&LLVMDisposeModule" ptrDisposeModule
-    :: FunPtr (ModuleRef -> IO ())
+    :: LLVM.FinalizerPtr Raw.Module
 
 -- ** Data Layout
 getDataLayout :: ModuleRef -> IO CString
@@ -1906,7 +1906,7 @@
 insertIntoBuilderWithName = Raw.insertIntoBuilderWithName
 
 foreign import ccall unsafe "&LLVMDisposeBuilder" ptrDisposeBuilder
-    :: FunPtr (BuilderRef -> IO ())
+    :: LLVM.FinalizerPtr Raw.Builder
 
 
 -- ** Metadata
@@ -2271,7 +2271,7 @@
 disposePassManager = Raw.disposePassManager
 
 foreign import ccall unsafe "&LLVMDisposePassManager" ptrDisposePassManager
-    :: FunPtr (PassManagerRef -> IO ())
+    :: LLVM.FinalizerPtr Raw.PassManager
 
 
 -- ** Functions from extras.cpp
diff --git a/src/LLVM/FFI/ExecutionEngine.hs b/src/LLVM/FFI/ExecutionEngine.hs
--- a/src/LLVM/FFI/ExecutionEngine.hs
+++ b/src/LLVM/FFI/ExecutionEngine.hs
@@ -58,7 +58,8 @@
 
 import qualified LLVM.FFI.Core as LLVM
 import LLVM.FFI.Core (ModuleRef, TypeRef, ValueRef)
-import LLVM.FFI.Target(TargetDataRef)
+import LLVM.FFI.Target (TargetDataRef)
+import LLVM.FFI.Base (FinalizerPtr)
 
 import qualified Foreign.C.Types as C
 import Foreign.C.String (CString)
@@ -110,7 +111,7 @@
 foreign import ccall unsafe "LLVMGenericValueToFloat" genericValueToFloat
     :: TypeRef -> GenericValueRef -> IO CDouble
 foreign import ccall unsafe "&LLVMDisposeGenericValue" ptrDisposeGenericValue
-    :: FunPtr (GenericValueRef -> IO ())
+    :: FinalizerPtr GenericValue
 
 
 data EngineKind
@@ -152,7 +153,7 @@
 foreign import ccall unsafe "LLVMDisposeExecutionEngine" disposeExecutionEngine
     :: ExecutionEngineRef -> IO ()
 foreign import ccall unsafe "&LLVMDisposeExecutionEngine" ptrDisposeExecutionEngine
-    :: FunPtr (ExecutionEngineRef -> IO ())
+    :: FinalizerPtr ExecutionEngine
 foreign import ccall unsafe "LLVMRunStaticConstructors" runStaticConstructors
     :: ExecutionEngineRef -> IO ()
 foreign import ccall unsafe "LLVMRunStaticDestructors" runStaticDestructors
diff --git a/src/LLVM/FFI/Target.hsc b/src/LLVM/FFI/Target.hsc
--- a/src/LLVM/FFI/Target.hsc
+++ b/src/LLVM/FFI/Target.hsc
@@ -5,11 +5,12 @@
 
 module LLVM.FFI.Target where
 
-import LLVM.FFI.Core (ValueRef, TypeRef, PassManagerRef)
+import LLVM.FFI.Core (ValueRef, TypeRef, PassManagerRef, ModuleRef)
+import LLVM.FFI.Base (FinalizerPtr)
 
 import qualified Foreign.C.Types as C
 import Foreign.C.String (CString)
-import Foreign.Ptr (Ptr, FunPtr)
+import Foreign.Ptr (Ptr)
 
 import Data.Typeable (Typeable)
 import Data.Word (Word32)
@@ -37,12 +38,16 @@
     deriving (Typeable)
 type TargetLibraryInfoRef = Ptr TargetLibraryInfo
 
+foreign import ccall unsafe "LLVMGetModuleDataLayout" getModuleDataLayout
+    :: ModuleRef -> IO TargetDataRef
+foreign import ccall unsafe "LLVMSetModuleDataLayout" setModuleDataLayout
+    :: ModuleRef -> TargetDataRef -> IO ()
 foreign import ccall unsafe "LLVMCreateTargetData" createTargetData
     :: CString -> IO TargetDataRef
 foreign import ccall unsafe "LLVMDisposeTargetData" disposeTargetData
     :: TargetDataRef -> IO ()
 foreign import ccall unsafe "&LLVMDisposeTargetData" ptrDisposeTargetData
-    :: FunPtr (TargetDataRef -> IO ())
+    :: FinalizerPtr TargetData
 foreign import ccall unsafe "LLVMAddTargetLibraryInfo" addTargetLibraryInfo
     :: TargetLibraryInfoRef -> PassManagerRef -> IO ()
 foreign import ccall unsafe "LLVMCopyStringRepOfTargetData" copyStringRepOfTargetData
diff --git a/src/LLVM/FFI/Transforms/Vectorize.hs b/src/LLVM/FFI/Transforms/Vectorize.hs
--- a/src/LLVM/FFI/Transforms/Vectorize.hs
+++ b/src/LLVM/FFI/Transforms/Vectorize.hs
@@ -5,9 +5,6 @@
 import LLVM.FFI.Core (PassManagerRef)
 
 
-foreign import ccall unsafe "LLVMAddBBVectorizePass" addBBPass
-    :: PassManagerRef -> IO ()
-
 foreign import ccall unsafe "LLVMAddLoopVectorizePass" addLoopPass
     :: PassManagerRef -> IO ()
 
diff --git a/src/LLVM/Target/CppBackend.hs b/src/LLVM/Target/CppBackend.hs
deleted file mode 100644
--- a/src/LLVM/Target/CppBackend.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# LANGUAGE Safe #-}
-{-# LANGUAGE ForeignFunctionInterface #-}
-module LLVM.Target.CppBackend(initializeTarget) where
-
-initializeTarget :: IO ()
-initializeTarget = do
-    initializeCppBackendTargetInfo
-    initializeCppBackendTarget
-
-foreign import ccall unsafe "LLVMInitializeCppBackendTargetInfo" initializeCppBackendTargetInfo :: IO ()
-foreign import ccall unsafe "LLVMInitializeCppBackendTarget" initializeCppBackendTarget :: IO ()
