diff --git a/casadi-bindings-internal.cabal b/casadi-bindings-internal.cabal
--- a/casadi-bindings-internal.cabal
+++ b/casadi-bindings-internal.cabal
@@ -1,5 +1,5 @@
 name:                casadi-bindings-internal
-version:             0.1.5.0
+version:             0.1.6.0
 license:             LGPL-3
 license-file:        LICENSE
 category:            Numerical, Math
diff --git a/cbits/hs_tools.cpp b/cbits/hs_tools.cpp
--- a/cbits/hs_tools.cpp
+++ b/cbits/hs_tools.cpp
@@ -42,20 +42,20 @@
     delete pair;
 }
 
-extern "C" std::pair<int,int> * hs_new_stdpair_int(int x, int y);
-std::pair<int,int> * hs_new_stdpair_int(int x, int y) {
-    return new std::pair<int,int>(x, y);
+extern "C" std::pair<long long,long long> * hs_new_stdpair_long_long(long long x, long long y);
+std::pair<long long,long long> * hs_new_stdpair_long_long(long long x, long long y) {
+    return new std::pair<long long,long long>(x, y);
 }
-extern "C" int hs_stdpair_fst_int(std::pair<int,int> * stdpair);
-int hs_stdpair_fst_int(std::pair<int,int> * stdpair) {
+extern "C" long long hs_stdpair_fst_long_long(std::pair<long long,long long> * stdpair);
+long long hs_stdpair_fst_long_long(std::pair<long long,long long> * stdpair) {
     return stdpair->first;
 }
-extern "C" int hs_stdpair_snd_int(std::pair<int,int> * stdpair);
-int hs_stdpair_snd_int(std::pair<int,int> * stdpair) {
+extern "C" long long hs_stdpair_snd_long_long(std::pair<long long,long long> * stdpair);
+long long hs_stdpair_snd_long_long(std::pair<long long,long long> * stdpair) {
     return stdpair->second;
 }
-extern "C" void hs_delete_stdpair_int(std::pair<int,int> * pair);
-void hs_delete_stdpair_int(std::pair<int,int> * pair){
+extern "C" void hs_delete_stdpair_long_long(std::pair<long long,long long> * pair);
+void hs_delete_stdpair_long_long(std::pair<long long,long long> * pair){
     delete pair;
 }
 
@@ -133,6 +133,8 @@
     int hs_size_vec_##name(vector<type> * vec){ return vec->size(); }
 
 WRITE_STUFF(int,int)
+typedef long long longlong;
+WRITE_STUFF(llong,longlong)
 WRITE_STUFF(voidp, void*)
 WRITE_STUFF(uchar, unsigned char)
 WRITE_STUFF(double, double)
diff --git a/src/Casadi/Internal/CToolsImports.hs b/src/Casadi/Internal/CToolsImports.hs
--- a/src/Casadi/Internal/CToolsImports.hs
+++ b/src/Casadi/Internal/CToolsImports.hs
@@ -18,14 +18,14 @@
 foreign import ccall unsafe "hs_delete_stdpair" c_deleteStdPair
   :: Ptr (StdPair (Ptr a) (Ptr b)) -> IO ()
 
-foreign import ccall unsafe "hs_new_stdpair_int" c_newStdPairInt
-  :: CInt -> CInt -> IO (Ptr (StdPair CInt CInt))
-foreign import ccall unsafe "hs_stdpair_fst_int" c_stdPairFstInt
-  :: Ptr (StdPair CInt CInt) -> IO CInt
-foreign import ccall unsafe "hs_stdpair_snd_int" c_stdPairSndInt
-  :: Ptr (StdPair CInt CInt) -> IO CInt
-foreign import ccall unsafe "hs_delete_stdpair_int" c_deleteStdPairInt
-  :: Ptr (StdPair CInt CInt) -> IO ()
+foreign import ccall unsafe "hs_new_stdpair_long_long" c_newStdPairLLong
+  :: CLLong -> CLLong -> IO (Ptr (StdPair CLLong CLLong))
+foreign import ccall unsafe "hs_stdpair_fst_long_long" c_stdPairFstLLong
+  :: Ptr (StdPair CLLong CLLong) -> IO CLLong
+foreign import ccall unsafe "hs_stdpair_snd_long_long" c_stdPairSndLLong
+  :: Ptr (StdPair CLLong CLLong) -> IO CLLong
+foreign import ccall unsafe "hs_delete_stdpair_long_long" c_deleteStdPairLLong
+  :: Ptr (StdPair CLLong CLLong) -> IO ()
 
 --------------------------- stdmap -----------------------------------
 foreign import ccall unsafe "hs_new_dict" c_newDict
@@ -52,6 +52,16 @@
   :: Ptr (StdVec CInt) -> Ptr CInt -> IO ()
 foreign import ccall unsafe "hs_size_vec_int" c_sizeVecCInt
   :: Ptr (StdVec CInt) -> IO CInt
+
+
+foreign import ccall unsafe "hs_new_vec_llong" c_newVecLLong
+  :: Ptr CLLong -> CInt -> IO (Ptr (StdVec CLLong))
+foreign import ccall unsafe "hs_delete_vec_llong" c_deleteVecLLong
+  :: Ptr (StdVec CLLong) -> IO ()
+foreign import ccall unsafe "hs_copy_vec_llong" c_copyVecCLLong
+  :: Ptr (StdVec CLLong) -> Ptr CLLong -> IO ()
+foreign import ccall unsafe "hs_size_vec_llong" c_sizeVecCLLong
+  :: Ptr (StdVec CLLong) -> IO CInt
 
 --------------------------- ("voidp","VoidP",Just "(Ptr a)",[]) -----------------------------------
 foreign import ccall unsafe "hs_new_vec_voidp" c_newVecVoidP
diff --git a/src/Casadi/Internal/Marshal.hs b/src/Casadi/Internal/Marshal.hs
--- a/src/Casadi/Internal/Marshal.hs
+++ b/src/Casadi/Internal/Marshal.hs
@@ -46,6 +46,8 @@
   hsToC = fromIntegral -- really should check min/max bounds here
 instance HsToC Int CLong where
   hsToC = fromIntegral
+instance HsToC Int CLLong where
+  hsToC = fromIntegral
 instance HsToC Bool CInt where
   hsToC False = 0
   hsToC True = 1
@@ -60,6 +62,8 @@
   marshal = return . hsToC
 instance Marshal Int CLong where
   marshal = return . hsToC
+instance Marshal Int CLLong where
+  marshal = return . hsToC
 instance Marshal Bool CInt where
   marshal = return . hsToC
 instance Marshal Double CDouble where
@@ -76,6 +80,9 @@
 instance Marshal (V.Vector Int) (Ptr (StdVec CInt)) where
   marshal = newStorableVec c_newVecCInt . (V.map hsToC)
   marshalFree = const c_deleteVecCInt
+instance Marshal (V.Vector Int) (Ptr (StdVec CLLong)) where
+  marshal = newStorableVec c_newVecLLong . V.map hsToC
+  marshalFree = const c_deleteVecLLong
 instance Marshal (V.Vector Bool) (Ptr (StdVec CInt)) where
   marshal = newStorableVec c_newVecCInt . (V.map hsToC)
   marshalFree = const c_deleteVecCInt
@@ -113,18 +120,18 @@
     c_deleteStdPair stdpair
 
 -- stdpair
-instance (Marshal a CInt, Marshal b CInt)
-         => Marshal (a, b) (Ptr (StdPair CInt CInt)) where
+instance (Marshal a CLLong, Marshal b CLLong)
+         => Marshal (a, b) (Ptr (StdPair CLLong CLLong)) where
   marshal (x,y) = do
     px <- marshal x
     py <- marshal y
-    c_newStdPairInt px py
+    c_newStdPairLLong px py
   marshalFree (x,y) stdpair = do
-    cx <- c_stdPairFstInt stdpair
-    cy <- c_stdPairSndInt stdpair
+    cx <- c_stdPairFstLLong stdpair
+    cy <- c_stdPairSndLLong stdpair
     marshalFree x cx
     marshalFree y cy
-    c_deleteStdPairInt stdpair
+    c_deleteStdPairLLong stdpair
 
 -- stdmap
 instance (Marshal a (Ptr pa))
diff --git a/src/Casadi/Internal/WrapReturn.hs b/src/Casadi/Internal/WrapReturn.hs
--- a/src/Casadi/Internal/WrapReturn.hs
+++ b/src/Casadi/Internal/WrapReturn.hs
@@ -31,6 +31,8 @@
   wrapReturn = return . realToFrac
 instance WrapReturn CLong Int where
   wrapReturn = return . fromIntegral
+instance WrapReturn CLLong Int where
+  wrapReturn = return . fromIntegral
 instance WrapReturn CInt Bool where
   wrapReturn 0 = return False
   wrapReturn _ = return True
@@ -66,14 +68,14 @@
     c_deleteStdPair stdPair
     return (x, y)
 
-instance (WrapReturn CInt a, WrapReturn CInt b)
-         => WrapReturn (Ptr (StdPair CInt CInt)) (a, b) where
+instance (WrapReturn CLLong a, WrapReturn CLLong b)
+         => WrapReturn (Ptr (StdPair CLLong CLLong)) (a, b) where
   wrapReturn stdPair = do
-    px <- c_stdPairFstInt stdPair
-    py <- c_stdPairSndInt stdPair
+    px <- c_stdPairFstLLong stdPair
+    py <- c_stdPairSndLLong stdPair
     x <- wrapReturn px
     y <- wrapReturn py
-    c_deleteStdPairInt stdPair
+    c_deleteStdPairLLong stdPair
     return (x, y)
 
 
@@ -108,6 +110,9 @@
   free arr
   vecDel vecPtr
   fmap V.fromList (mapM cToHs ret)
+
+instance WrapReturn (Ptr (StdVec CLLong)) (V.Vector Int) where
+  wrapReturn = wrapReturnVec c_sizeVecCLLong c_copyVecCLLong c_deleteVecLLong wrapReturn
 
 instance WrapReturn (Ptr (StdVec CInt)) (V.Vector Int) where
   wrapReturn = wrapReturnVec c_sizeVecCInt c_copyVecCInt c_deleteVecCInt wrapReturn
