diff --git a/casadi-bindings.cabal b/casadi-bindings.cabal
--- a/casadi-bindings.cabal
+++ b/casadi-bindings.cabal
@@ -1,5 +1,5 @@
 name:                casadi-bindings
-version:             2.2.0.8
+version:             2.3.0.0
 synopsis:            mid-level bindings to CasADi
 category:            Numerical, Math
 description:
@@ -61,8 +61,8 @@
                        cereal,
                        binary,
                        vector-binary-instances,
-                       casadi-bindings-internal == 0.1.2.1,
-                       casadi-bindings-core     == 2.2.0.2
+                       casadi-bindings-internal == 0.1.3.0,
+                       casadi-bindings-core     == 2.3.0.0
   default-language:    Haskell2010
 
   C-sources:           cbits/handwritten.cpp
diff --git a/src/Casadi/CMatrix.hs b/src/Casadi/CMatrix.hs
--- a/src/Casadi/CMatrix.hs
+++ b/src/Casadi/CMatrix.hs
@@ -43,9 +43,11 @@
   triu2symm :: a -> a
   tril2symm :: a -> a
   copy :: a -> IO a
-  dense :: a -> a
+  densify :: a -> a
   fromDMatrix :: DMatrix -> a
   fromDVector :: V.Vector Double -> a
+  fromDouble :: Double -> a
+  allocEmpty :: IO a
 
 
 vertslice :: CMatrix a => a -> V.Vector Int -> V.Vector a
diff --git a/src/Casadi/Callback.hs b/src/Casadi/Callback.hs
--- a/src/Casadi/Callback.hs
+++ b/src/Casadi/Callback.hs
@@ -53,13 +53,13 @@
 
 
 -- | add a callback to an NLPSolver
-makeDerivativeGenerator :: (Function -> Int -> Int -> IO Function) -> IO DerivativeGenerator
+makeDerivativeGenerator :: (Function -> Int -> IO Function) -> IO DerivativeGenerator
 makeDerivativeGenerator callback = do
   -- safely wrap the callback into the C-friendly version
-  let callback' :: Ptr Function' -> CInt -> CInt -> IO (Ptr Function')
-      callback' ptrFx nfwd nadj = do
+  let callback' :: Ptr Function' -> CInt -> IO (Ptr Function')
+      callback' ptrFx nder = do
         foreignCFun <- newForeignPtr_ ptrFx
-        Function fun <- callback (Function foreignCFun) (fromIntegral nfwd) (fromIntegral nadj)
+        Function fun <- callback (Function foreignCFun) (fromIntegral nder)
         return (unsafeForeignPtrToPtr fun)
 
   -- turn the callback into a FunPtr
diff --git a/src/Casadi/DMatrix.hs b/src/Casadi/DMatrix.hs
--- a/src/Casadi/DMatrix.hs
+++ b/src/Casadi/DMatrix.hs
@@ -3,7 +3,7 @@
 module Casadi.DMatrix
        ( DMatrix
        , dsparsify
-       , ddata
+       , dnonzeros
        ) where
 
 import qualified Data.Vector as V
@@ -28,7 +28,7 @@
 putWith :: Monad m => (Sparsity -> m ()) -> (V.Vector Double -> m ()) -> DMatrix -> m ()
 putWith put putVector x = do
   put (sparsity x)
-  putVector (ddata x)
+  putVector (dnonzeros x)
 
 -- Data.Vector.Cereal looks deprecated, it's not in master anymore
 instance S.Serialize DMatrix where
@@ -42,16 +42,16 @@
   conjugate = id
 
 fromSparseData :: Sparsity -> V.Vector Double -> DMatrix
-fromSparseData s d = unsafePerformIO (dmatrix__6 s d)
+fromSparseData s d = unsafePerformIO (dmatrix__1 s d)
 {-# NOINLINE fromSparseData #-}
 
 dsparsify :: DMatrix -> DMatrix
 dsparsify x = unsafePerformIO (dmatrix_zz_sparsify__0 x)
 {-# NOINLINE dsparsify #-}
 
-ddata :: DMatrix -> V.Vector Double
-ddata x = unsafePerformIO (dmatrix_data__0 x)
-{-# NOINLINE ddata #-}
+dnonzeros :: DMatrix -> V.Vector Double
+dnonzeros x = unsafePerformIO (dmatrix_nonzeros x)
+{-# NOINLINE dnonzeros #-}
 
 instance Show DMatrix where
   show x = unsafePerformIO (dmatrix_getDescription x)
@@ -98,11 +98,17 @@
   {-# NOINLINE zerosSp #-}
   solve x y = unsafePerformIO (C.solve__3 x y)
   {-# NOINLINE solve #-}
-  indexed m sx sy = unsafePerformIO (dmatrix_getSub__3 m False sx sy)
+  indexed m spx spy = unsafePerformIO $ do
+    ret <- allocEmpty :: IO DMatrix
+    dmatrix_get__3 m ret False spx spy
+    return ret
   {-# NOINLINE indexed #-}
-  sparsity x = unsafePerformIO (dmatrix_sparsityRef__0 x)
+  sparsity x = unsafePerformIO (dmatrix_sparsityRef x)
   {-# NOINLINE sparsity #-}
-  getNZ m s = unsafePerformIO (dmatrix_getNZ__1 m False s)
+  getNZ m sp = unsafePerformIO $ do
+    ret <- allocEmpty :: IO DMatrix
+    dmatrix_getNZ__1 m ret False sp
+    return ret
   {-# NOINLINE getNZ #-}
   setNZ m y s = dmatrix_setNZ__1 m y False s
   triu x = unsafePerformIO (dmatrix_zz_triu__0 x)
@@ -113,13 +119,17 @@
   {-# NOINLINE triu2symm #-}
   tril2symm x = unsafePerformIO (dmatrix_zz_tril2symm x)
   {-# NOINLINE tril2symm #-}
-  copy m = dmatrix__10 m
-  dense x = unsafePerformIO (dmatrix_zz_dense x)
-  {-# NOINLINE dense #-}
+  copy m = dmatrix__9 m
+  densify x = unsafePerformIO (dmatrix_zz_densify x)
+  {-# NOINLINE densify #-}
   fromDMatrix = id
-  fromDVector x = unsafePerformIO (dmatrix__4 x)
+  fromDVector x = unsafePerformIO (dmatrix__0 x)
   {-# NOINLINE fromDVector #-}
+  fromDouble x = unsafePerformIO (dmatrix__5 x)
+  {-# NOINLINE fromDouble #-}
+  allocEmpty = dmatrix__10
 
+
 instance Num DMatrix where
   (+) x y = unsafePerformIO (dmatrix_zz_plus x y)
   {-# NOINLINE (+) #-}
@@ -127,7 +137,7 @@
   {-# NOINLINE (-) #-}
   (*) x y = unsafePerformIO (dmatrix_zz_times x y)
   {-# NOINLINE (*) #-}
-  fromInteger x = unsafePerformIO (dmatrix__5 (fromInteger x :: Double))
+  fromInteger x = fromDouble (fromInteger x :: Double)
   {-# NOINLINE fromInteger #-}
   abs x = unsafePerformIO (dmatrix_zz_abs x)
   {-# NOINLINE abs #-}
@@ -137,11 +147,11 @@
 instance Fractional DMatrix where
   (/) x y = unsafePerformIO (dmatrix___truediv____0 x y)
   {-# NOINLINE (/) #-}
-  fromRational x = unsafePerformIO (dmatrix__5 (fromRational x :: Double))
+  fromRational x = fromDouble (fromRational x :: Double)
   {-# NOINLINE fromRational #-}
 
 instance Floating DMatrix where
-  pi = unsafePerformIO (dmatrix__5 (pi :: Double))
+  pi = fromDouble (pi :: Double)
   {-# NOINLINE pi #-}
   (**) x y = unsafePerformIO (dmatrix_zz_power x y)
   {-# NOINLINE (**) #-}
diff --git a/src/Casadi/Function.hs b/src/Casadi/Function.hs
--- a/src/Casadi/Function.hs
+++ b/src/Casadi/Function.hs
@@ -20,6 +20,7 @@
 import Casadi.MX ( MX )
 import Casadi.DMatrix ( DMatrix )
 import Casadi.SharedObject ( castSharedObject )
+import Casadi.CMatrix ( CMatrix(..) )
 
 instance Show C.Function where
   show x = show (castSharedObject x)
@@ -27,18 +28,18 @@
 
 -- | call an MXFunction on symbolic inputs, getting symbolic outputs
 callMX :: C.FunctionClass f => f -> Vector MX -> Vector MX
-callMX f ins = unsafePerformIO (C.function_call__0 f ins)
+callMX f ins = unsafePerformIO (C.function_operator_call__0 f ins)
 {-# NOINLINE callMX #-}
 
 -- | call an SXFunction on symbolic inputs, getting symbolic outputs
 callSX :: C.FunctionClass f => f -> Vector SX -> Vector SX
-callSX f ins = unsafePerformIO (C.function_call__3 f ins)
+callSX f ins = unsafePerformIO $ (C.function_operator_call__3 f ins)
 {-# NOINLINE callSX #-}
 
 -- | evaluate an SXFunction with 1 input and 1 output
 evalDMatrix :: (C.FunctionClass f, C.IOInterfaceFunctionClass f)
                => f -> Vector DMatrix -> IO (Vector DMatrix)
-evalDMatrix sxf inputs = do
+evalDMatrix sxf inputs = do -- function__operator__call__6
   -- set inputs
   zipWithM_ (C.ioInterfaceFunction_setInput__2 sxf) (V.toList inputs) [0..]
 
diff --git a/src/Casadi/IOSchemes.hs b/src/Casadi/IOSchemes.hs
--- a/src/Casadi/IOSchemes.hs
+++ b/src/Casadi/IOSchemes.hs
@@ -54,10 +54,10 @@
   fmap V.fromList $ mapM getElem entries
 
 mkSchemeSX :: InputOutputScheme -> [(String,SX)] -> IO (V.Vector SX)
-mkSchemeSX = mkScheme sx__13
+mkSchemeSX = mkScheme sx__10
 
 mkSchemeMX :: InputOutputScheme -> [(String,MX)] -> IO (V.Vector MX)
-mkSchemeMX = mkScheme mx__8
+mkSchemeMX = mkScheme mx__7
 
 mkSchemeCRSSparsity :: InputOutputScheme -> [(String,Sparsity)] -> IO (V.Vector Sparsity)
-mkSchemeCRSSparsity = mkScheme sparsity__1
+mkSchemeCRSSparsity = mkScheme sparsity__2
diff --git a/src/Casadi/MX.hs b/src/Casadi/MX.hs
--- a/src/Casadi/MX.hs
+++ b/src/Casadi/MX.hs
@@ -98,11 +98,17 @@
   {-# NOINLINE zerosSp #-}
   solve a b = unsafePerformIO (C.solve__0 a b)
   {-# NOINLINE solve #-}
-  indexed m sx sy = unsafePerformIO (mx_getSub__3 m False sx sy)
+  indexed m spx spy = unsafePerformIO $ do
+    ret <- allocEmpty :: IO MX
+    mx_get__3 m ret False spx spy
+    return ret
   {-# NOINLINE indexed #-}
-  sparsity x = unsafePerformIO (mx_sparsityRef__0 x)
+  sparsity x = unsafePerformIO (mx_sparsityRef x)
   {-# NOINLINE sparsity #-}
-  getNZ m s = unsafePerformIO (mx_getNZ__1 m False s)
+  getNZ m sp = unsafePerformIO $ do
+    ret <- allocEmpty :: IO MX
+    mx_getNZ__1 m ret False sp
+    return ret
   {-# NOINLINE getNZ #-}
   setNZ m y s = mx_setNZ__1 m y False s
   triu x = unsafePerformIO (mx_zz_triu__0 x)
@@ -114,13 +120,17 @@
   tril2symm x = unsafePerformIO (mx_zz_tril2symm x)
   {-# NOINLINE tril2symm #-}
   copy m = mx__2 m
-  dense x = unsafePerformIO (mx_zz_dense x)
-  {-# NOINLINE dense #-}
+  densify x = unsafePerformIO (mx_zz_densify x)
+  {-# NOINLINE densify #-}
   fromDMatrix x = unsafePerformIO (mx__0 x)
   {-# NOINLINE fromDMatrix #-}
   fromDVector x = fromDMatrix (fromDVector x)
   {-# NOINLINE fromDVector #-}
+  fromDouble x = unsafePerformIO (mx__3 x)
+  {-# NOINLINE fromDouble #-}
+  allocEmpty = mx__7
 
+
 instance Num MX where
   (+) x y = unsafePerformIO (mx_zz_plus x y)
   {-# NOINLINE (+) #-}
@@ -128,7 +138,7 @@
   {-# NOINLINE (-) #-}
   (*) x y = unsafePerformIO (mx_zz_times x y)
   {-# NOINLINE (*) #-}
-  fromInteger x = unsafePerformIO (mx__3 (fromInteger x :: Double))
+  fromInteger x = fromDouble (fromInteger x :: Double)
   {-# NOINLINE fromInteger #-}
   abs x = unsafePerformIO (mx_zz_abs x)
   {-# NOINLINE abs #-}
@@ -138,11 +148,11 @@
 instance Fractional MX where
   (/) x y = unsafePerformIO (mx___truediv____0 x y)
   {-# NOINLINE (/) #-}
-  fromRational x = unsafePerformIO (mx__3 (fromRational x :: Double))
+  fromRational x = fromDouble (fromRational x :: Double)
   {-# NOINLINE fromRational #-}
 
 instance Floating MX where
-  pi = unsafePerformIO (mx__3 (pi :: Double))
+  pi = fromDouble (pi :: Double)
   {-# NOINLINE pi #-}
   (**) x y = unsafePerformIO (mx_zz_power x y)
   {-# NOINLINE (**) #-}
diff --git a/src/Casadi/SX.hs b/src/Casadi/SX.hs
--- a/src/Casadi/SX.hs
+++ b/src/Casadi/SX.hs
@@ -55,6 +55,7 @@
 ssparsify x = unsafePerformIO (sx_zz_sparsify__0 x)
 {-# NOINLINE ssparsify #-}
 
+
 instance CMatrix SX where
   veccat x = unsafePerformIO (sx_zz_veccat x)
   {-# NOINLINE veccat #-}
@@ -92,11 +93,17 @@
   {-# NOINLINE zerosSp #-}
   solve a b = unsafePerformIO (C.solve__2 a b)
   {-# NOINLINE solve #-}
-  indexed m sx sy = unsafePerformIO (sx_getSub__3 m False sx sy)
+  indexed m spx spy = unsafePerformIO $ do
+    ret <- allocEmpty :: IO SX
+    sx_get__3 m ret False spx spy
+    return ret
   {-# NOINLINE indexed #-}
-  sparsity x = unsafePerformIO (sx_sparsityRef__0 x)
+  sparsity x = unsafePerformIO (sx_sparsityRef x)
   {-# NOINLINE sparsity #-}
-  getNZ m s = unsafePerformIO (sx_getNZ__1 m False s)
+  getNZ m sp = unsafePerformIO $ do
+    ret <- allocEmpty :: IO SX
+    sx_getNZ__1 m ret False sp
+    return ret
   {-# NOINLINE getNZ #-}
   setNZ m y s = sx_setNZ__1 m y False s
   triu x = unsafePerformIO (sx_zz_triu__0 x)
@@ -107,13 +114,16 @@
   {-# NOINLINE triu2symm #-}
   tril2symm x = unsafePerformIO (sx_zz_tril2symm x)
   {-# NOINLINE tril2symm #-}
-  copy m = sx__12 m
-  dense x = unsafePerformIO (sx_zz_dense x)
-  {-# NOINLINE dense #-}
-  fromDMatrix x = unsafePerformIO (sx__2 x)
+  copy m = sx__9 m
+  densify x = unsafePerformIO (sx_zz_densify x)
+  {-# NOINLINE densify #-}
+  fromDMatrix x = unsafePerformIO (sx__1 x)
   {-# NOINLINE fromDMatrix #-}
   fromDVector x = fromDMatrix (fromDVector x)
   {-# NOINLINE fromDVector #-}
+  fromDouble x = unsafePerformIO (sx__5 x)
+  {-# NOINLINE fromDouble #-}
+  allocEmpty = sx__10
 
 
 instance Num SX where
@@ -123,7 +133,7 @@
   {-# NOINLINE (-) #-}
   (*) x y = unsafePerformIO (sx_zz_times x y)
   {-# NOINLINE (*) #-}
-  fromInteger x = unsafePerformIO (sx__8 (fromInteger x :: Double))
+  fromInteger x = fromDouble (fromInteger x :: Double)
   {-# NOINLINE fromInteger #-}
   abs x = unsafePerformIO (sx_zz_abs x)
   {-# NOINLINE abs #-}
@@ -133,11 +143,11 @@
 instance Fractional SX where
   (/) x y = unsafePerformIO (sx___truediv____0 x y)
   {-# NOINLINE (/) #-}
-  fromRational x = unsafePerformIO (sx__8 (fromRational x :: Double))
+  fromRational x = fromDouble (fromRational x :: Double)
   {-# NOINLINE fromRational #-}
 
 instance Floating SX where
-  pi = unsafePerformIO (sx__8 (pi :: Double))
+  pi = fromDouble (pi :: Double)
   {-# NOINLINE pi #-}
   (**) x y = unsafePerformIO (sx_zz_power x y)
   {-# NOINLINE (**) #-}
diff --git a/src/Casadi/Sparsity.hs b/src/Casadi/Sparsity.hs
--- a/src/Casadi/Sparsity.hs
+++ b/src/Casadi/Sparsity.hs
@@ -59,7 +59,7 @@
 {-# NOINLINE scalar #-}
 
 getRow :: Sparsity -> V.Vector Int
-getRow s = unsafePerformIO (sparsity_row__1 s) -- todo: getRow in 2.3
+getRow s = unsafePerformIO (sparsity_getRow s)
 {-# NOINLINE getRow #-}
 
 getCol :: Sparsity -> V.Vector Int
