diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,15 @@
 
 ## Unreleased
 
+## 0.1.1.0 - 2023-12-12 
+
+### Added
+
+- Add OpenCascade.BRepOffsetAPI.MakeOffsetShape
+- Add OpenCascade.GeomAbs.JoinType
+- Add OpenCascade.BRepOffset.Mode
+- Add `dn` to OpenCascade.Geom.Curve
+
 ## 0.1.0.0 - 2023-12-05 
 
 ### Added 
diff --git a/cpp/hs_BRepOffsetAPI_MakeOffsetShape.cpp b/cpp/hs_BRepOffsetAPI_MakeOffsetShape.cpp
new file mode 100644
--- /dev/null
+++ b/cpp/hs_BRepOffsetAPI_MakeOffsetShape.cpp
@@ -0,0 +1,28 @@
+#include <BRepOffsetAPI_MakeOffsetShape.hxx>
+#include "hs_BRepOffsetAPI_MakeOffsetShape.h"
+
+BRepOffsetAPI_MakeOffsetShape * hs_new_BRepOffsetAPI_MakeOffsetShape(){
+    return new BRepOffsetAPI_MakeOffsetShape();
+}
+
+void hs_delete_BRepOffsetAPI_MakeOffsetShape(BRepOffsetAPI_MakeOffsetShape * builder){
+    delete builder;
+}
+
+void hs_BRepOffsetAPI_MakeOffsetShape_performBySimple(BRepOffsetAPI_MakeOffsetShape * builder, TopoDS_Shape * shape, double value){
+    builder->PerformBySimple(*shape, value);
+}
+
+void hs_BRepOffsetAPI_MakeOffsetShape_performByJoin(
+    BRepOffsetAPI_MakeOffsetShape * builder,
+    TopoDS_Shape * shape, 
+    double value,
+    double tol,
+    BRepOffset_Mode mode,
+    bool intersection,
+    bool selfInter,
+    GeomAbs_JoinType join,
+    bool removeIntEdges
+     ){
+    builder->PerformByJoin(*shape, value, tol, mode, intersection, selfInter, join, removeIntEdges);
+}
diff --git a/cpp/hs_Geom_Curve.cpp b/cpp/hs_Geom_Curve.cpp
--- a/cpp/hs_Geom_Curve.cpp
+++ b/cpp/hs_Geom_Curve.cpp
@@ -1,5 +1,6 @@
 #include <Geom_Curve.hxx>
 #include <gp_Pnt.hxx>
+#include <gp_Vec.hxx>
 #include "hs_Geom_Curve.h"
 
 void hs_delete_Handle_Geom_Curve(Handle(Geom_Curve) * handle){
@@ -10,3 +11,6 @@
     return new gp_Pnt((*curve)->Value(u));
 }
 
+gp_Vec * hs_Geom_Curve_dn(Handle (Geom_Curve) * curve, double u, int n){
+    return new gp_Vec((*curve)->DN(u, n));
+}
diff --git a/opencascade-hs.cabal b/opencascade-hs.cabal
--- a/opencascade-hs.cabal
+++ b/opencascade-hs.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           opencascade-hs
-version:        0.1.0.0
+version:        0.1.1.0
 synopsis:       Thin Wrapper for the OpenCASCADE CAD Kernel
 description:    Please see the README on GitHub at <https://github.com/joe-warren/opencascade-hs#readme>
 category:       Graphics,FFI
@@ -52,8 +52,10 @@
       OpenCascade.BRepMesh.IncrementalMesh
       OpenCascade.BRepMesh.Internal.Destructors
       OpenCascade.BRepMesh.Types
+      OpenCascade.BRepOffset.Mode
       OpenCascade.BRepOffsetAPI
       OpenCascade.BRepOffsetAPI.Internal.Destructors
+      OpenCascade.BRepOffsetAPI.MakeOffsetShape
       OpenCascade.BRepOffsetAPI.MakePipe
       OpenCascade.BRepOffsetAPI.Types
       OpenCascade.BRepPrimAPI
@@ -80,6 +82,7 @@
       OpenCascade.Geom.Curve
       OpenCascade.Geom.Internal.Destructors
       OpenCascade.Geom.Types
+      OpenCascade.GeomAbs.JoinType
       OpenCascade.GP
       OpenCascade.GP.Ax1
       OpenCascade.GP.Ax2
@@ -166,6 +169,7 @@
       cpp/hs_BRepBuilderAPI_Transform.cpp
       cpp/hs_BRepFilletAPI_MakeFillet.cpp
       cpp/hs_BRepMesh_IncrementalMesh.cpp
+      cpp/hs_BRepOffsetAPI_MakeOffsetShape.cpp
       cpp/hs_BRepOffsetAPI_MakePipe.cpp
       cpp/hs_BRepPrimAPI_MakeBox.cpp
       cpp/hs_BRepPrimAPI_MakeCylinder.cpp
diff --git a/src/OpenCascade/BRepOffset/Mode.hs b/src/OpenCascade/BRepOffset/Mode.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/BRepOffset/Mode.hs
@@ -0,0 +1,5 @@
+module OpenCascade.BRepOffset.Mode
+(Mode (..)
+) where
+
+data Mode = Skin | Pipe | RectoVerso deriving (Enum, Show)
diff --git a/src/OpenCascade/BRepOffsetAPI/Internal/Destructors.hs b/src/OpenCascade/BRepOffsetAPI/Internal/Destructors.hs
--- a/src/OpenCascade/BRepOffsetAPI/Internal/Destructors.hs
+++ b/src/OpenCascade/BRepOffsetAPI/Internal/Destructors.hs
@@ -6,5 +6,6 @@
 import Foreign.Ptr
 
 foreign import capi unsafe "hs_BRepOffsetAPI_MakePipe.h hs_delete_BRepOffsetAPI_MakePipe" deleteMakePipe :: Ptr MakePipe -> IO ()
+foreign import capi unsafe "hs_BRepOffsetAPI_MakeOffsetShape.h hs_delete_BRepOffsetAPI_MakeOffsetShape" deleteMakeOffsetShape :: Ptr MakeOffsetShape -> IO ()
 
 
diff --git a/src/OpenCascade/BRepOffsetAPI/MakeOffsetShape.hs b/src/OpenCascade/BRepOffsetAPI/MakeOffsetShape.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/BRepOffsetAPI/MakeOffsetShape.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE CApiFFI #-}
+module OpenCascade.BRepOffsetAPI.MakeOffsetShape 
+( MakeOffsetShape 
+, new
+, performBySimple
+, performByJoin
+) where
+
+import OpenCascade.BRepOffsetAPI.Types (MakeOffsetShape)
+import Data.Acquire
+import OpenCascade.BRepOffsetAPI.Internal.Destructors (deleteMakeOffsetShape)
+import Foreign (Ptr)
+import qualified OpenCascade.TopoDS as TopoDS
+import Foreign.C
+import Data.Coerce (coerce)
+import qualified OpenCascade.BRepOffset.Mode as BRepOffset.Mode
+import qualified OpenCascade.GeomAbs.JoinType as GeomAbs.JoinType
+import OpenCascade.Internal.Bool (boolToCBool)
+
+foreign import capi unsafe "hs_BRepOffsetAPI_MakeOffsetShape.h hs_new_BRepOffsetAPI_MakeOffsetShape" rawNew :: IO (Ptr MakeOffsetShape)
+
+new :: Acquire (Ptr MakeOffsetShape)
+new = mkAcquire rawNew deleteMakeOffsetShape
+
+foreign import capi unsafe "hs_BRepOffsetAPI_MakeOffsetShape.h hs_BRepOffsetAPI_MakeOffsetShape_performBySimple" rawPerformBySimple :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> CDouble -> IO ()
+ 
+performBySimple :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> Double -> IO ()
+performBySimple = coerce rawPerformBySimple
+
+
+foreign import capi unsafe "hs_BRepOffsetAPI_MakeOffsetShape.h hs_BRepOffsetAPI_MakeOffsetShape_performByJoin" rawPerformByJoin :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> CDouble -> CDouble -> CInt -> CBool -> CBool -> CInt -> CBool -> IO ()
+
+-- |  builder, shape, value, tol, mode intersection, selfInter, join, removeIntEdges
+performByJoin :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> Double -> Double -> BRepOffset.Mode.Mode -> Bool -> Bool -> GeomAbs.JoinType.JoinType -> Bool -> IO ()
+performByJoin builder shape value tol mode intersection selfInter join removeIntEdges =
+    rawPerformByJoin builder shape (coerce value) (coerce tol) (fromIntegral $ fromEnum mode) (boolToCBool intersection) (boolToCBool selfInter) (fromIntegral . fromEnum $ join) (boolToCBool removeIntEdges)
+
diff --git a/src/OpenCascade/BRepOffsetAPI/Types.hs b/src/OpenCascade/BRepOffsetAPI/Types.hs
--- a/src/OpenCascade/BRepOffsetAPI/Types.hs
+++ b/src/OpenCascade/BRepOffsetAPI/Types.hs
@@ -2,11 +2,14 @@
 {-# LANGUAGE EmptyDataDecls #-}
 module OpenCascade.BRepOffsetAPI.Types
 ( MakePipe
+, MakeOffsetShape
 ) where
 
 import qualified OpenCascade.Inheritance as Inheritance
 import OpenCascade.BRepBuilderAPI.MakeShape (MakeShape)
 
 data MakePipe
+data MakeOffsetShape
 
 instance Inheritance.SubTypeOf MakeShape MakePipe
+instance Inheritance.SubTypeOf MakeShape MakeOffsetShape
diff --git a/src/OpenCascade/Geom/Curve.hs b/src/OpenCascade/Geom/Curve.hs
--- a/src/OpenCascade/Geom/Curve.hs
+++ b/src/OpenCascade/Geom/Curve.hs
@@ -1,16 +1,22 @@
 {-# LANGUAGE CApiFFI #-}
 module OpenCascade.Geom.Curve 
 ( value
+, dn
 ) where
 import Foreign.Ptr
 import Foreign.C
 import Data.Coerce
 import Data.Acquire
 import OpenCascade.Geom.Types (Curve)
-import OpenCascade.GP (Pnt)
-import OpenCascade.GP.Internal.Destructors (deletePnt)
+import OpenCascade.GP (Pnt, Vec)
+import OpenCascade.GP.Internal.Destructors (deletePnt, deleteVec)
 import OpenCascade.Handle (Handle)
 foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_value" rawValue :: Ptr (Handle Curve) -> CDouble -> IO(Ptr Pnt)
 
 value :: Ptr (Handle Curve) -> Double -> Acquire (Ptr Pnt)
 value curve u = mkAcquire (rawValue curve (coerce u)) deletePnt
+
+foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_dn" rawDN :: Ptr (Handle Curve) -> CDouble -> CInt -> IO (Ptr Vec)
+
+dn :: Ptr (Handle Curve) -> Double -> Int -> Acquire (Ptr Vec)
+dn curve u n = mkAcquire (rawDN curve (coerce u) (fromIntegral n)) deleteVec
diff --git a/src/OpenCascade/GeomAbs/JoinType.hs b/src/OpenCascade/GeomAbs/JoinType.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/GeomAbs/JoinType.hs
@@ -0,0 +1,6 @@
+module OpenCascade.GeomAbs.JoinType
+( JoinType (..)
+) where
+
+-- This needs to stay up to date with GeomAbs_JoinType.hxx
+data JoinType = Arc | Tangent | Intersection deriving (Enum, Show)
