diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,16 @@
 
 ## Unreleased
 
+## 0.4.0.0
+
+- Add `OpenCascade.BRepBuilderAPI.MakeVertex`
+- Add `OpenCascade.BRepBuilderAPI.MakeWire.vertex`
+- Add `OpenCascade.BRepOffsetAPI.ThruSections`
+- Add `OpenCascade.BRep.Tool.pnt`
+- Add `OpenCascade.Geom.Curve` methods `reversedParameter` and `reversed`
+- Add `OpenCascade.ShapeExtend.WireData`
+- Add `Show` instance to `OpenCascade.BRepBuilderAPI.WireError`
+
 ## 0.3.0.1
 
 ## 0.3.0.0
diff --git a/cpp/hs_BRepBuilderAPI_MakeVertex.cpp b/cpp/hs_BRepBuilderAPI_MakeVertex.cpp
new file mode 100644
--- /dev/null
+++ b/cpp/hs_BRepBuilderAPI_MakeVertex.cpp
@@ -0,0 +1,15 @@
+#include <BRepBuilderAPI_MakeVertex.hxx>
+#include "hs_BRepBuilderAPI_MakeVertex.h"
+#include <TopoDS_Vertex.hxx>
+
+BRepBuilderAPI_MakeVertex * hs_new_BRepBuilderAPI_MakeVertex_fromPnt(gp_Pnt* pnt){
+    return new BRepBuilderAPI_MakeVertex(*pnt);
+}
+
+void hs_delete_BRepBuilderAPI_MakeVertex(BRepBuilderAPI_MakeVertex* builder){
+    delete builder;
+}
+
+TopoDS_Vertex * hs_BRepBuilderAPI_MakeVertex_vertex(BRepBuilderAPI_MakeVertex * builder){
+    return new TopoDS_Vertex(builder->Vertex());
+}
diff --git a/cpp/hs_BRepBuilderAPI_MakeVertex.h b/cpp/hs_BRepBuilderAPI_MakeVertex.h
new file mode 100644
--- /dev/null
+++ b/cpp/hs_BRepBuilderAPI_MakeVertex.h
@@ -0,0 +1,20 @@
+#ifndef HS_BREPBUILDERAPI_MAKEVERTEX_H
+#define HS_BREPBUILDERAPI_MAKEVERTEX_H
+
+#include "hs_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BRepBuilderAPI_MakeVertex * hs_new_BRepBuilderAPI_MakeVertex_fromPnt(gp_Pnt* pnt);
+
+void hs_delete_BRepBuilderAPI_MakeVertex(BRepBuilderAPI_MakeVertex* builder);
+
+TopoDS_Vertex * hs_BRepBuilderAPI_MakeVertex_vertex(BRepBuilderAPI_MakeVertex * builder);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // HS_BREPBUILDERAPI_MAKEVERTEX_H
diff --git a/cpp/hs_BRepBuilderAPI_MakeWire.cpp b/cpp/hs_BRepBuilderAPI_MakeWire.cpp
--- a/cpp/hs_BRepBuilderAPI_MakeWire.cpp
+++ b/cpp/hs_BRepBuilderAPI_MakeWire.cpp
@@ -26,6 +26,10 @@
     return new TopoDS_Wire(builder->Wire());
 }
 
+TopoDS_Vertex * hs_BRepBuilderAPI_MakeWire_Vertex(BRepBuilderAPI_MakeWire* builder){
+    return new TopoDS_Vertex(builder->Vertex());
+}
+
 bool hs_BRepBuilderAPI_MakeWire_IsDone(BRepBuilderAPI_MakeWire* builder){
     return builder->IsDone();
 }
diff --git a/cpp/hs_BRepBuilderAPI_MakeWire.h b/cpp/hs_BRepBuilderAPI_MakeWire.h
--- a/cpp/hs_BRepBuilderAPI_MakeWire.h
+++ b/cpp/hs_BRepBuilderAPI_MakeWire.h
@@ -19,6 +19,8 @@
 
 TopoDS_Wire * hs_BRepBuilderAPI_MakeWire_Wire(BRepBuilderAPI_MakeWire* builder);
 
+TopoDS_Vertex * hs_BRepBuilderAPI_MakeWire_Vertex(BRepBuilderAPI_MakeWire* builder);
+
 bool hs_BRepBuilderAPI_MakeWire_IsDone(BRepBuilderAPI_MakeWire* builder);
 
 BRepBuilderAPI_WireError hs_BRepBuilderAPI_MakeWire_Error(BRepBuilderAPI_MakeWire* builder);
diff --git a/cpp/hs_BRepOffsetAPI_ThruSections.cpp b/cpp/hs_BRepOffsetAPI_ThruSections.cpp
new file mode 100644
--- /dev/null
+++ b/cpp/hs_BRepOffsetAPI_ThruSections.cpp
@@ -0,0 +1,18 @@
+#include <BRepOffsetAPI_ThruSections.hxx>
+#include "hs_BRepOffsetAPI_ThruSections.h"
+
+BRepOffsetAPI_ThruSections * hs_new_BRepOffsetAPI_ThruSections(bool isSolid, bool ruled, double pres3d){
+    return new BRepOffsetAPI_ThruSections(isSolid, ruled, pres3d);
+}
+
+void hs_delete_BRepOffsetAPI_ThruSections(BRepOffsetAPI_ThruSections* thruSections){
+    delete thruSections;
+}
+
+void hs_BRepOffsetAPI_ThruSections_addWire(BRepOffsetAPI_ThruSections* thruSections, TopoDS_Wire * wire){
+    thruSections->AddWire(*wire);
+}
+
+void hs_BRepOffsetAPI_ThruSections_addVertex(BRepOffsetAPI_ThruSections* thruSections, TopoDS_Vertex* vertex){
+    thruSections->AddVertex(*vertex);
+}
diff --git a/cpp/hs_BRepOffsetAPI_ThruSections.h b/cpp/hs_BRepOffsetAPI_ThruSections.h
new file mode 100644
--- /dev/null
+++ b/cpp/hs_BRepOffsetAPI_ThruSections.h
@@ -0,0 +1,23 @@
+
+#ifndef HS_BREPOFFSETAPI_THRUSECTIONS_H
+#define HS_BREPOFFSETAPI_THRUSECTIONS_H
+
+#include "hs_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BRepOffsetAPI_ThruSections * hs_new_BRepOffsetAPI_ThruSections(bool isSolid, bool ruled, double pres3d);
+
+void hs_delete_BRepOffsetAPI_ThruSections(BRepOffsetAPI_ThruSections* thruSections);
+
+void hs_BRepOffsetAPI_ThruSections_addWire(BRepOffsetAPI_ThruSections* thruSections, TopoDS_Wire * wire);
+
+void hs_BRepOffsetAPI_ThruSections_addVertex(BRepOffsetAPI_ThruSections* thruSections, TopoDS_Vertex* vertex);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // HS_BREPOFFSETAPI_THRUSECTIONS_H
diff --git a/cpp/hs_BRep_Tool.cpp b/cpp/hs_BRep_Tool.cpp
--- a/cpp/hs_BRep_Tool.cpp
+++ b/cpp/hs_BRep_Tool.cpp
@@ -17,6 +17,10 @@
     double s, e;
     BRep_Tool::Curve(*edge, s, e);
     return e;
+}
+
+gp_Pnt * hs_BRep_Tool_pnt(TopoDS_Vertex * vertex){
+    return new gp_Pnt(BRep_Tool::Pnt(*vertex));
 } 
 
 Handle(Poly_Triangulation) * hs_BRep_Tool_triangulation(TopoDS_Face * face, TopLoc_Location * loc){
diff --git a/cpp/hs_BRep_Tool.h b/cpp/hs_BRep_Tool.h
--- a/cpp/hs_BRep_Tool.h
+++ b/cpp/hs_BRep_Tool.h
@@ -13,6 +13,8 @@
 
 double hs_BRep_Tool_curveParamLast(TopoDS_Edge * edge);
 
+gp_Pnt * hs_BRep_Tool_pnt(TopoDS_Vertex * vertex);
+
 Handle(Poly_Triangulation) * hs_BRep_Tool_triangulation(TopoDS_Face * face, TopLoc_Location * loc);
 
 #ifdef __cplusplus
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
@@ -14,3 +14,11 @@
 gp_Vec * hs_Geom_Curve_dn(Handle (Geom_Curve) * curve, double u, int n){
     return new gp_Vec((*curve)->DN(u, n));
 }
+
+double hs_Geom_Curve_reversedParameter(Handle (Geom_Curve) * curve, double parameter){
+    return (*curve)->ReversedParameter(parameter);
+}
+
+Handle (Geom_Curve) * hs_Geom_Curve_reversed(Handle (Geom_Curve) * curve){
+    return new opencascade::handle<Geom_Curve>((*curve)->Reversed());
+}
diff --git a/cpp/hs_Geom_Curve.h b/cpp/hs_Geom_Curve.h
--- a/cpp/hs_Geom_Curve.h
+++ b/cpp/hs_Geom_Curve.h
@@ -11,6 +11,11 @@
 gp_Pnt * hs_Geom_Curve_value(Handle(Geom_Curve) * curve, double u);
 
 gp_Vec * hs_Geom_Curve_dn(Handle (Geom_Curve) * curve, double u, int n);
+
+double hs_Geom_Curve_reversedParameter(Handle (Geom_Curve) * curve, double parameter);
+
+Handle (Geom_Curve) * hs_Geom_Curve_reversed(Handle (Geom_Curve) * curve);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/cpp/hs_ShapeExtend_WireData.cpp b/cpp/hs_ShapeExtend_WireData.cpp
new file mode 100644
--- /dev/null
+++ b/cpp/hs_ShapeExtend_WireData.cpp
@@ -0,0 +1,25 @@
+#include <ShapeExtend_WireData.hxx>
+#include "hs_ShapeExtend_WireData.h"
+
+#include <TopoDS_Wire.hxx>
+
+ShapeExtend_WireData * hs_new_ShapeExtend_WireData_fromWireChainedAndManifold(TopoDS_Wire* wire, bool chained, bool manifoldMode){
+    return new ShapeExtend_WireData(*wire, chained, manifoldMode);
+}
+
+void hs_delete_ShapeExtend_WireData(ShapeExtend_WireData * wireData){
+    delete wireData;
+}
+
+void hs_ShapeExtend_WireData_reverse(ShapeExtend_WireData * wireData){
+    wireData->Reverse();
+}
+
+TopoDS_Wire * hs_ShapeExtend_WireData_wire(ShapeExtend_WireData * wireData){
+    return new TopoDS_Wire(wireData->Wire());
+}
+
+
+TopoDS_Wire * hs_ShapeExtend_WireData_wireAPIMake(ShapeExtend_WireData * wireData){
+    return new TopoDS_Wire(wireData->WireAPIMake());
+}
diff --git a/cpp/hs_ShapeExtend_WireData.h b/cpp/hs_ShapeExtend_WireData.h
new file mode 100644
--- /dev/null
+++ b/cpp/hs_ShapeExtend_WireData.h
@@ -0,0 +1,24 @@
+#ifndef HS_SHAPEEXTEND_WIREDATA_H
+#define HS_SHAPEEXTEND_WIREDATA_H
+
+#include "hs_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ShapeExtend_WireData * hs_new_ShapeExtend_WireData_fromWireChainedAndManifold(TopoDS_Wire* wire, bool chained, bool manifoldMode);
+
+void hs_delete_ShapeExtend_WireData(ShapeExtend_WireData * wireData);
+
+void hs_ShapeExtend_WireData_reverse(ShapeExtend_WireData * wireData);
+
+TopoDS_Wire * hs_ShapeExtend_WireData_wire(ShapeExtend_WireData * wireData);
+
+TopoDS_Wire * hs_ShapeExtend_WireData_wireAPIMake(ShapeExtend_WireData * wireData);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // HS_SHAPEEXTEND_WIREDATA_H
diff --git a/cpp/hs_types.h b/cpp/hs_types.h
--- a/cpp/hs_types.h
+++ b/cpp/hs_types.h
@@ -32,6 +32,7 @@
 typedef void gp_XYZ;
 typedef void BRep_Builder;
 typedef void BRepBuilderAPI_Transform;
+typedef void BRepBuilderAPI_MakeVertex;
 typedef void BRepBuilderAPI_MakeWire;
 typedef void BRepBuilderAPI_MakeFace;
 typedef void BRepBuilderAPI_MakeSolid;
@@ -82,6 +83,7 @@
 typedef void TDocStd_Document;
 typedef void XCAFDoc_ShapeTool;
 typedef void ShapeFix_Solid;
+typedef void ShapeExtend_WireData;
 typedef int ShapeExtend_Status;
 typedef void Poly_Triangulation;
 typedef void Poly_Triangle;
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.3.0.1
+version:        0.4.0.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
@@ -35,6 +35,7 @@
     cpp/hs_BRepBuilderAPI_MakePolygon.h
     cpp/hs_BRepBuilderAPI_MakeShape.h
     cpp/hs_BRepBuilderAPI_MakeSolid.h
+    cpp/hs_BRepBuilderAPI_MakeVertex.h
     cpp/hs_BRepBuilderAPI_MakeWire.h
     cpp/hs_BRepBuilderAPI_Sewing.h
     cpp/hs_BRepBuilderAPI_Transform.h
@@ -44,6 +45,7 @@
     cpp/hs_BRepMesh_IncrementalMesh.h
     cpp/hs_BRepOffsetAPI_MakeOffsetShape.h
     cpp/hs_BRepOffsetAPI_MakePipe.h
+    cpp/hs_BRepOffsetAPI_ThruSections.h
     cpp/hs_BRepPrimAPI_MakeBox.h
     cpp/hs_BRepPrimAPI_MakeCone.h
     cpp/hs_BRepPrimAPI_MakeCylinder.h
@@ -83,6 +85,7 @@
     cpp/hs_RWMesh_CafReader.h
     cpp/hs_RWObj_CafReader.h
     cpp/hs_RWObj_CafWriter.h
+    cpp/hs_ShapeExtend_WireData.h
     cpp/hs_ShapeFix_Solid.h
     cpp/hs_STEPControl_Reader.h
     cpp/hs_STEPControl_Writer.h
@@ -134,6 +137,7 @@
       OpenCascade.BRepBuilderAPI.MakePolygon
       OpenCascade.BRepBuilderAPI.MakeShape
       OpenCascade.BRepBuilderAPI.MakeSolid
+      OpenCascade.BRepBuilderAPI.MakeVertex
       OpenCascade.BRepBuilderAPI.MakeWire
       OpenCascade.BRepBuilderAPI.Sewing
       OpenCascade.BRepBuilderAPI.Transform
@@ -154,6 +158,7 @@
       OpenCascade.BRepOffsetAPI.Internal.Destructors
       OpenCascade.BRepOffsetAPI.MakeOffsetShape
       OpenCascade.BRepOffsetAPI.MakePipe
+      OpenCascade.BRepOffsetAPI.ThruSections
       OpenCascade.BRepOffsetAPI.Types
       OpenCascade.BRepPrimAPI
       OpenCascade.BRepPrimAPI.Internal.Destructors
@@ -228,7 +233,10 @@
       OpenCascade.RWObj.CafWriter
       OpenCascade.RWObj.Internal.Destructors
       OpenCascade.RWObj.Types
+      OpenCascade.ShapeExtend.Internal.Destructors
       OpenCascade.ShapeExtend.Status
+      OpenCascade.ShapeExtend.Types
+      OpenCascade.ShapeExtend.WireData
       OpenCascade.ShapeFix.Internal.Destructors
       OpenCascade.ShapeFix.Solid
       OpenCascade.ShapeFix.Types
@@ -310,6 +318,7 @@
       cpp/hs_BRepBuilderAPI_MakePolygon.cpp
       cpp/hs_BRepBuilderAPI_MakeShape.cpp
       cpp/hs_BRepBuilderAPI_MakeSolid.cpp
+      cpp/hs_BRepBuilderAPI_MakeVertex.cpp
       cpp/hs_BRepBuilderAPI_MakeWire.cpp
       cpp/hs_BRepBuilderAPI_Sewing.cpp
       cpp/hs_BRepBuilderAPI_Transform.cpp
@@ -319,6 +328,7 @@
       cpp/hs_BRepMesh_IncrementalMesh.cpp
       cpp/hs_BRepOffsetAPI_MakeOffsetShape.cpp
       cpp/hs_BRepOffsetAPI_MakePipe.cpp
+      cpp/hs_BRepOffsetAPI_ThruSections.cpp
       cpp/hs_BRepPrimAPI_MakeBox.cpp
       cpp/hs_BRepPrimAPI_MakeCone.cpp
       cpp/hs_BRepPrimAPI_MakeCylinder.cpp
@@ -358,6 +368,7 @@
       cpp/hs_RWMesh_CafReader.cpp
       cpp/hs_RWObj_CafReader.cpp
       cpp/hs_RWObj_CafWriter.cpp
+      cpp/hs_ShapeExtend_WireData.cpp
       cpp/hs_ShapeFix_Solid.cpp
       cpp/hs_STEPControl_Reader.cpp
       cpp/hs_STEPControl_Writer.cpp
diff --git a/src/OpenCascade/BRep/Tool.hs b/src/OpenCascade/BRep/Tool.hs
--- a/src/OpenCascade/BRep/Tool.hs
+++ b/src/OpenCascade/BRep/Tool.hs
@@ -3,17 +3,20 @@
 ( curve
 , curveParamFirst
 , curveParamLast
+, pnt
 , triangulation
 ) where
 
 import qualified OpenCascade.Geom as Geom
 import qualified OpenCascade.TopoDS as TopoDS
+import qualified OpenCascade.GP as GP
 
 import qualified OpenCascade.TopLoc.Types as TopLoc
 import qualified OpenCascade.Poly.Types as Poly
 import OpenCascade.Poly.Internal.Destructors (deleteHandleTriangulation)
 import OpenCascade.Handle (Handle)
 import OpenCascade.Geom.Internal.Destructors (deleteHandleCurve)
+import OpenCascade.GP.Internal.Destructors (deletePnt)
 import Foreign.Ptr
 import Foreign.C
 import Data.Coerce
@@ -33,6 +36,11 @@
 
 curveParamLast :: Ptr TopoDS.Edge -> IO Double 
 curveParamLast = coerce rawCurveParamLast
+
+foreign import capi unsafe "hs_BRep_Tool.h hs_BRep_Tool_pnt" rawPnt :: Ptr (TopoDS.Vertex) -> IO (Ptr GP.Pnt)
+
+pnt :: Ptr TopoDS.Vertex -> Acquire (Ptr GP.Pnt)
+pnt v = mkAcquire (rawPnt v) deletePnt
 
 foreign import capi unsafe "hs_BRep_Tool.h hs_BRep_Tool_triangulation" rawTriangulation :: Ptr (TopoDS.Face) -> Ptr TopLoc.Location -> IO(Ptr (Handle Poly.Triangulation))
 
diff --git a/src/OpenCascade/BRepBuilderAPI/Internal/Destructors.hs b/src/OpenCascade/BRepBuilderAPI/Internal/Destructors.hs
--- a/src/OpenCascade/BRepBuilderAPI/Internal/Destructors.hs
+++ b/src/OpenCascade/BRepBuilderAPI/Internal/Destructors.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE CApiFFI #-}
 module OpenCascade.BRepBuilderAPI.Internal.Destructors
-( deleteMakeWire
+( deleteMakeVertex
+, deleteMakeWire
 , deleteMakeFace
 , deleteMakeSolid
 , deleteSewing
@@ -10,6 +11,7 @@
 
 import Foreign.Ptr
 
+foreign import capi unsafe "hs_BRepBuilderAPI_MakeVertex.h hs_delete_BRepBuilderAPI_MakeVertex" deleteMakeVertex :: Ptr MakeVertex -> IO ()
 foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_delete_BRepBuilderAPI_MakeWire" deleteMakeWire :: Ptr MakeWire -> IO ()
 foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_delete_BRepBuilderAPI_MakeFace" deleteMakeFace :: Ptr MakeFace -> IO ()
 foreign import capi unsafe "hs_BRepBuilderAPI_MakeSolid.h hs_delete_BRepBuilderAPI_MakeSolid" deleteMakeSolid :: Ptr MakeSolid -> IO ()
diff --git a/src/OpenCascade/BRepBuilderAPI/MakeVertex.hs b/src/OpenCascade/BRepBuilderAPI/MakeVertex.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/BRepBuilderAPI/MakeVertex.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE CApiFFI #-}
+module OpenCascade.BRepBuilderAPI.MakeVertex
+( MakeVertex
+, fromPnt
+, vertex
+) where
+
+import OpenCascade.BRepBuilderAPI.Types (MakeVertex)
+import OpenCascade.BRepBuilderAPI.Internal.Destructors (deleteMakeVertex)
+import qualified OpenCascade.GP as GP
+import qualified OpenCascade.TopoDS as TopoDS
+import qualified OpenCascade.TopoDS.Internal.Destructors as TopoDS.Destructors
+import Foreign.Ptr (Ptr)
+import Data.Acquire (Acquire, mkAcquire)
+import OpenCascade.Inheritance (upcast)
+
+foreign import capi unsafe "hs_BRepBuilderAPI_MakeVertex.h hs_new_BRepBuilderAPI_MakeVertex_fromPnt" rawFromPnt :: Ptr GP.Pnt -> IO (Ptr MakeVertex)
+
+fromPnt :: Ptr GP.Pnt -> Acquire (Ptr MakeVertex)
+fromPnt pnt = mkAcquire (rawFromPnt pnt) (deleteMakeVertex)
+
+
+foreign import capi unsafe "hs_BRepBuilderAPI_MakeVertex.h hs_BRepBuilderAPI_MakeVertex_vertex" rawVertex :: Ptr MakeVertex -> IO (Ptr TopoDS.Vertex)
+
+vertex :: Ptr MakeVertex -> Acquire (Ptr TopoDS.Vertex)
+vertex builder = mkAcquire (rawVertex builder) (TopoDS.Destructors.deleteShape . upcast)
diff --git a/src/OpenCascade/BRepBuilderAPI/MakeWire.hs b/src/OpenCascade/BRepBuilderAPI/MakeWire.hs
--- a/src/OpenCascade/BRepBuilderAPI/MakeWire.hs
+++ b/src/OpenCascade/BRepBuilderAPI/MakeWire.hs
@@ -6,6 +6,7 @@
 , addWire
 , addListOfShape
 , wire
+, vertex
 , isDone
 , error
 ) where
@@ -50,6 +51,13 @@
 
 wire :: Ptr MakeWire -> Acquire (Ptr TopoDS.Wire)
 wire builder = mkAcquire (rawWire builder) (TopoDS.Destructors.deleteShape . upcast)
+
+-- vertex
+--
+foreign import capi unsafe "hs_BRepBuilderAPI_MakeWire.h hs_BRepBuilderAPI_MakeWire_Vertex" rawVertex :: Ptr MakeWire -> IO (Ptr TopoDS.Vertex)
+
+vertex :: Ptr MakeWire -> Acquire (Ptr TopoDS.Vertex)
+vertex builder = mkAcquire (rawVertex builder) (TopoDS.Destructors.deleteShape . upcast)
 
 -- isDone
 --
diff --git a/src/OpenCascade/BRepBuilderAPI/Types.hs b/src/OpenCascade/BRepBuilderAPI/Types.hs
--- a/src/OpenCascade/BRepBuilderAPI/Types.hs
+++ b/src/OpenCascade/BRepBuilderAPI/Types.hs
@@ -1,7 +1,8 @@
 {-# LANGUAGE MultiParamTypeClasses #-} 
 {-# LANGUAGE EmptyDataDecls #-}
 module OpenCascade.BRepBuilderAPI.Types 
-( MakeWire
+( MakeVertex
+, MakeWire
 , MakeFace
 , MakeSolid
 , MakeShape
@@ -10,6 +11,7 @@
 
 import qualified OpenCascade.Inheritance as Inheritance
 
+data MakeVertex
 data MakeWire
 data MakeFace
 data MakeSolid
@@ -18,6 +20,7 @@
 
 data Sewing
 
+instance Inheritance.SubTypeOf MakeShape MakeVertex
 instance Inheritance.SubTypeOf MakeShape MakeWire
 instance Inheritance.SubTypeOf MakeShape MakeSolid
 instance Inheritance.SubTypeOf MakeShape MakeFace
diff --git a/src/OpenCascade/BRepBuilderAPI/WireError.hs b/src/OpenCascade/BRepBuilderAPI/WireError.hs
--- a/src/OpenCascade/BRepBuilderAPI/WireError.hs
+++ b/src/OpenCascade/BRepBuilderAPI/WireError.hs
@@ -3,4 +3,4 @@
 ) where
 
 -- order must match the definition of BRepBuilderAPI_WireError
-data WireError = WireDone | EmptyWire | DisconnectedWire | NonManifoldWire deriving (Eq, Enum)
+data WireError = WireDone | EmptyWire | DisconnectedWire | NonManifoldWire deriving (Eq, 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
@@ -2,6 +2,7 @@
 module OpenCascade.BRepOffsetAPI.Internal.Destructors
 ( deleteMakePipe
 , deleteMakeOffsetShape
+, deleteThruSections
 ) where
 
 import OpenCascade.BRepOffsetAPI.Types
@@ -10,5 +11,4 @@
 
 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 ()
-
-
+foreign import capi unsafe "hs_BRepOffsetAPI_ThruSections.h hs_delete_BRepOffsetAPI_ThruSections" deleteThruSections :: Ptr ThruSections -> IO ()
diff --git a/src/OpenCascade/BRepOffsetAPI/ThruSections.hs b/src/OpenCascade/BRepOffsetAPI/ThruSections.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/BRepOffsetAPI/ThruSections.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE CApiFFI #-}
+module OpenCascade.BRepOffsetAPI.ThruSections
+( ThruSections
+, new
+, addWire
+, addVertex
+) where
+
+
+import OpenCascade.BRepOffsetAPI.Types (ThruSections)
+import OpenCascade.BRepOffsetAPI.Internal.Destructors (deleteThruSections)
+import qualified OpenCascade.TopoDS as TopoDS
+import Foreign.Ptr
+import Foreign.C (CBool (..), CDouble (..))
+import Data.Acquire
+import OpenCascade.Internal.Bool (boolToCBool)
+import Data.Coerce (coerce)
+
+
+foreign import capi unsafe "hs_BRepOffsetAPI_ThruSections.h hs_new_BRepOffsetAPI_ThruSections" rawNew :: CBool -> CBool -> CDouble -> IO (Ptr ThruSections)
+
+new :: Bool -> Bool -> Double -> Acquire (Ptr ThruSections)
+new makeSolid ruled precision = mkAcquire (rawNew (boolToCBool makeSolid) (boolToCBool ruled) (coerce precision)) deleteThruSections
+
+foreign import capi unsafe "hs_BRepOffsetAPI_ThruSections.h hs_BRepOffsetAPI_ThruSections_addWire" addWire :: Ptr ThruSections -> Ptr TopoDS.Wire -> IO ()
+
+foreign import capi unsafe "hs_BRepOffsetAPI_ThruSections.h hs_BRepOffsetAPI_ThruSections_addVertex" addVertex :: Ptr ThruSections -> Ptr TopoDS.Vertex -> IO ()
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
@@ -3,6 +3,7 @@
 module OpenCascade.BRepOffsetAPI.Types
 ( MakePipe
 , MakeOffsetShape
+, ThruSections
 ) where
 
 import qualified OpenCascade.Inheritance as Inheritance
@@ -10,6 +11,8 @@
 
 data MakePipe
 data MakeOffsetShape
+data ThruSections
 
 instance Inheritance.SubTypeOf MakeShape MakePipe
 instance Inheritance.SubTypeOf MakeShape MakeOffsetShape
+instance Inheritance.SubTypeOf MakeShape ThruSections
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
@@ -2,6 +2,8 @@
 module OpenCascade.Geom.Curve 
 ( value
 , dn
+, reversedParameter
+, reversed
 ) where
 import Foreign.Ptr
 import Foreign.C
@@ -10,7 +12,9 @@
 import OpenCascade.Geom.Types (Curve)
 import OpenCascade.GP (Pnt, Vec)
 import OpenCascade.GP.Internal.Destructors (deletePnt, deleteVec)
+import OpenCascade.Geom.Internal.Destructors (deleteHandleCurve)
 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)
@@ -20,3 +24,14 @@
 
 dn :: Ptr (Handle Curve) -> Double -> Int -> Acquire (Ptr Vec)
 dn curve u n = mkAcquire (rawDN curve (coerce u) (fromIntegral n)) deleteVec
+
+foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_reversedParameter" rawReversedParameter :: Ptr (Handle Curve) -> CDouble -> IO CDouble
+
+reversedParameter :: Ptr (Handle Curve) -> Double -> IO Double
+reversedParameter = coerce rawReversedParameter
+
+
+foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_reversed" rawReversed :: Ptr (Handle Curve) -> IO (Ptr (Handle Curve))
+
+reversed :: Ptr (Handle Curve) -> Acquire (Ptr (Handle Curve))
+reversed c = mkAcquire (rawReversed c) deleteHandleCurve
diff --git a/src/OpenCascade/ShapeExtend/Internal/Destructors.hs b/src/OpenCascade/ShapeExtend/Internal/Destructors.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/ShapeExtend/Internal/Destructors.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE CApiFFI #-}
+module OpenCascade.ShapeExtend.Internal.Destructors
+( deleteWireData
+) where
+
+import OpenCascade.ShapeExtend.Types (WireData)
+
+import Foreign.Ptr
+
+foreign import capi unsafe "hs_ShapeExtend_WireData.h hs_delete_ShapeExtend_WireData" deleteWireData :: Ptr WireData -> IO ()
diff --git a/src/OpenCascade/ShapeExtend/Types.hs b/src/OpenCascade/ShapeExtend/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/ShapeExtend/Types.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE EmptyDataDecls #-}
+module OpenCascade.ShapeExtend.Types 
+( WireData
+) where
+
+data WireData
diff --git a/src/OpenCascade/ShapeExtend/WireData.hs b/src/OpenCascade/ShapeExtend/WireData.hs
new file mode 100644
--- /dev/null
+++ b/src/OpenCascade/ShapeExtend/WireData.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE CApiFFI #-}
+module OpenCascade.ShapeExtend.WireData
+( WireData
+, fromWireChainedAndManifold
+, reverse
+, wire
+, wireAPIMake
+) where
+
+import Prelude hiding (reverse)
+import OpenCascade.ShapeExtend.Types (WireData)
+import OpenCascade.ShapeExtend.Internal.Destructors (deleteWireData)
+import qualified OpenCascade.TopoDS as TopoDS
+import OpenCascade.TopoDS.Internal.Destructors (deleteShape)
+import OpenCascade.Internal.Bool (boolToCBool)
+import OpenCascade.Inheritance (upcast)
+import Foreign.Ptr (Ptr)
+import Foreign.C (CBool (..))
+import Data.Acquire (Acquire, mkAcquire)
+
+foreign import capi unsafe "hs_ShapeExtend_WireData.h hs_new_ShapeExtend_WireData_fromWireChainedAndManifold" rawFromWireChainedAndManifold :: Ptr TopoDS.Wire -> CBool -> CBool -> IO (Ptr WireData)
+
+fromWireChainedAndManifold :: Ptr TopoDS.Wire -> Bool -> Bool -> Acquire (Ptr WireData)
+fromWireChainedAndManifold theWire chained manifold = 
+    mkAcquire (rawFromWireChainedAndManifold theWire (boolToCBool chained) (boolToCBool manifold)) (deleteWireData)
+
+foreign import capi unsafe "hs_ShapeExtend_WireData.h hs_ShapeExtend_WireData_reverse" reverse :: Ptr WireData -> IO ()
+
+
+foreign import capi unsafe "hs_ShapeExtend_WireData.h hs_ShapeExtend_WireData_wire" rawWire :: Ptr WireData -> IO (Ptr TopoDS.Wire)
+
+wire :: Ptr WireData -> Acquire (Ptr TopoDS.Wire)
+wire wireData = mkAcquire (rawWire wireData) (deleteShape . upcast)
+
+
+foreign import capi unsafe "hs_ShapeExtend_WireData.h hs_ShapeExtend_WireData_wireAPIMake" rawWireAPIMake :: Ptr WireData -> IO (Ptr TopoDS.Wire)
+
+wireAPIMake :: Ptr WireData -> Acquire (Ptr TopoDS.Wire)
+wireAPIMake wireData = mkAcquire (rawWireAPIMake wireData) (deleteShape . upcast)
