diff --git a/llvm-general.cabal b/llvm-general.cabal
--- a/llvm-general.cabal
+++ b/llvm-general.cabal
@@ -1,5 +1,5 @@
 name: llvm-general
-version: 3.2.4.7
+version: 3.2.5.0
 license: BSD3
 license-file: LICENSE
 author: Benjamin S.Scarlet <fgthb0@greynode.net>
@@ -16,7 +16,7 @@
 	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.
   .
-  For haddock, see <http://bscarlet.github.io/llvm-general/3.2.4.7/doc/html/llvm-general/index.html>.
+  For haddock, see <http://bscarlet.github.io/llvm-general/3.2.5.0/doc/html/llvm-general/index.html>.
 extra-source-files:
   src/LLVM/General/Internal/FFI/Analysis.h
   src/LLVM/General/Internal/FFI/Function.h
@@ -37,7 +37,7 @@
   type: git
   location: git://github.com/bscarlet/llvm-general.git
   branch: llvm-3.2
-  tag: v3.2.4.7
+  tag: v3.2.5.0
 
 flag shared-llvm
   description: link against llvm shared rather than static library
diff --git a/src/LLVM/General/Internal/FFI/PassManager.hs b/src/LLVM/General/Internal/FFI/PassManager.hs
--- a/src/LLVM/General/Internal/FFI/PassManager.hs
+++ b/src/LLVM/General/Internal/FFI/PassManager.hs
@@ -9,6 +9,8 @@
 
 import Control.Monad
 
+import Data.Word (Word)
+
 import Foreign.Ptr
 import Foreign.C
 
@@ -44,16 +46,30 @@
 foreign import ccall unsafe "LLVMFinalizeFunctionPassManager" finalizeFunctionPassManager ::
     Ptr PassManager -> IO CUInt
 
+newtype LLVMEncoded i a = LLVMEncoded i
+  deriving (Eq, Ord, Read, Show)
+
 $(do
   let declareForeign :: TH.Name -> [TH.Type] -> TH.DecsQ
       declareForeign hName extraParams = do
         let n = TH.nameBase hName
+            passTypeMapping :: TH.Type -> TH.TypeQ
+            passTypeMapping t = case t of
+              TH.ConT h | h == ''Word -> [t| CUInt |]
+              -- some of the LLVM methods for making passes use "-1" as a special value
+              -- handle those here
+              TH.AppT (TH.ConT mby) t' | mby == ''Maybe ->
+                case t' of
+                  TH.ConT h | h == ''Bool -> [t| LLVMEncoded CInt (Maybe Bool) |]
+                            | h == ''Word -> [t| LLVMEncoded CInt (Maybe Word) |]
+                  _ -> typeMapping t
+              _ -> typeMapping t
         foreignDecl 
           (cName n)
           ("add" ++ n ++ "Pass")
           ([[t| Ptr PassManager |]] 
            ++ [[t| Ptr TargetLowering |] | needsTargetLowering n]
-           ++ map typeMapping extraParams)
+           ++ map passTypeMapping extraParams)
           (TH.tupleT 0)
 
   TH.TyConI (TH.DataD _ _ _ cons _) <- TH.reify ''G.Pass
diff --git a/src/LLVM/General/Internal/PassManager.hs b/src/LLVM/General/Internal/PassManager.hs
--- a/src/LLVM/General/Internal/PassManager.hs
+++ b/src/LLVM/General/Internal/PassManager.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE
-  TemplateHaskell
+  TemplateHaskell,
+  MultiParamTypeClasses
   #-}
 module LLVM.General.Internal.PassManager where
 
@@ -12,6 +13,8 @@
 
 import Control.Monad.AnyCont
 
+import Data.Word (Word)
+import Foreign.C.Types (CInt)
 import Foreign.Ptr
 
 import qualified LLVM.General.Internal.FFI.PassManager as FFI
@@ -63,6 +66,12 @@
     return pm
 
 data PassSetSpec = PassSetSpec [Pass] (Maybe TargetLowering)
+
+instance Monad m => EncodeM m (Maybe Bool) (FFI.LLVMEncoded CInt (Maybe Bool)) where
+  encodeM mb = return $ FFI.LLVMEncoded ((maybe (-1) (\b -> if b then 1 else 0) mb) :: CInt)
+
+instance Monad m => EncodeM m (Maybe Word) (FFI.LLVMEncoded CInt (Maybe Word)) where
+  encodeM mw = return  $ FFI.LLVMEncoded ((maybe (-1) fromIntegral mw) :: CInt)
 
 instance PassManagerSpecification PassSetSpec where
   createPassManager (PassSetSpec ps tl') = flip runAnyContT return $ do
diff --git a/src/LLVM/General/Transforms.hs b/src/LLVM/General/Transforms.hs
--- a/src/LLVM/General/Transforms.hs
+++ b/src/LLVM/General/Transforms.hs
@@ -5,7 +5,6 @@
 module LLVM.General.Transforms where
 
 import Data.Data
-import Data.Int
 import Data.Word
 
 -- | <http://llvm.org/docs/Passes.html#transform-passes>
@@ -38,7 +37,7 @@
   | LoopRotate
   -- | can use a 'LLVM.General.Target.TargetLowering'
   | LoopStrengthReduce
-  | LoopUnroll { loopUnrollThreshold :: Int32, count :: Int32, allowPartial :: Int32 }
+  | LoopUnroll { loopUnrollThreshold :: Maybe Word, count :: Maybe Word, allowPartial :: Maybe Bool }
   | LoopUnswitch { optimizeForSize :: Bool }
   | LowerAtomic
   -- | can use a 'LLVM.General.Target.TargetLowering'
@@ -50,11 +49,11 @@
   | Reassociate
   | ScalarReplacementOfAggregates { requiresDominatorTree :: Bool }
   | OldScalarReplacementOfAggregates { 
-      oldScalarReplacementOfAggregatesThreshold :: Int32, 
+      oldScalarReplacementOfAggregatesThreshold :: Maybe Word, 
       useDominatorTree :: Bool, 
-      structMemberThreshold :: Int32,
-      arrayElementThreshold :: Int32,
-      scalarLoadThreshold :: Int32
+      structMemberThreshold :: Maybe Word,
+      arrayElementThreshold :: Maybe Word,
+      scalarLoadThreshold :: Maybe Word
     }
   | SparseConditionalConstantPropagation
   | SimplifyLibCalls
@@ -68,7 +67,7 @@
   | ConstantMerge
   | FunctionAttributes
   | FunctionInlining { 
-      functionInliningThreshold :: Int32
+      functionInliningThreshold :: Word
     }
   | GlobalDeadCodeElimination
   | InternalizeFunctions { exportList :: [String] }
@@ -84,7 +83,7 @@
 
   -- here begin the vectorization passes
   | BasicBlockVectorize { 
-    vectorBits :: Word32,
+    vectorBits :: Word,
     vectorizeBools :: Bool,
     vectorizeInts :: Bool,
     vectorizeFloats :: Bool,
@@ -97,12 +96,12 @@
     vectorizeGetElementPtr :: Bool,
     vectorizeMemoryOperations :: Bool,
     alignedOnly :: Bool,
-    requiredChainDepth :: Word32,
-    searchLimit :: Word32,
-    maxCandidatePairsForCycleCheck :: Word32,
+    requiredChainDepth :: Word,
+    searchLimit :: Word,
+    maxCandidatePairsForCycleCheck :: Word,
     splatBreaksChain :: Bool,
-    maxInstructions :: Word32,
-    maxIterations :: Word32,
+    maxInstructions :: Word,
+    maxIterations :: Word,
     powerOfTwoLengthsOnly :: Bool,
     noMemoryOperationBoost :: Bool,
     fastDependencyAnalysis :: Bool
