diff --git a/CMakeLists.txt b/CMakeLists.txt
index aae54edf5fc43296ee575533cafe87120fdfad38..81b094eb3fc3edcd2adf472749afb6c16c9f9de1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@
 
 # Set up the project.
 cmake_minimum_required( VERSION 3.1 )
-project( "GeoModelCore" VERSION 3.1.1 LANGUAGES CXX )
+project( "GeoModelCore" VERSION 3.1.2 LANGUAGES CXX )
 
 # Set default build options.
 set( CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake build mode to use" )
diff --git a/GeoModelKernel/GeoModelKernel/GeoShapeIntersection.h b/GeoModelKernel/GeoModelKernel/GeoShapeIntersection.h
index 26fcd708f88af80f7f651ad79b9bf4cf3ace0c6d..2fd269b1cee2c653f5826be6b4130e68d5c36103 100755
--- a/GeoModelKernel/GeoModelKernel/GeoShapeIntersection.h
+++ b/GeoModelKernel/GeoModelKernel/GeoShapeIntersection.h
@@ -7,9 +7,18 @@
 
 #include "GeoModelKernel/GeoShape.h"
 
+
+#ifndef _GeoShapePersistification_On_
+class Persistifier;
+#endif
+
+
 class GeoShapeIntersection : public GeoShape
 {
  public:
+
+
+
   //	Constructor taking two shape operands.
   GeoShapeIntersection (const GeoShape* A, const GeoShape* B);
   
@@ -52,7 +61,10 @@ class GeoShapeIntersection : public GeoShape
   
   static const std::string s_classType;
   static const ShapeType s_classTypeID;
-
+    
+  //    For I/O only!
+  GeoShapeIntersection(){}
+  friend class Persistifier;
 };
 
 inline const std::string& GeoShapeIntersection::getClassType ()
diff --git a/GeoModelKernel/GeoModelKernel/GeoShapeShift.h b/GeoModelKernel/GeoModelKernel/GeoShapeShift.h
index 6311ff9af9397b99a38238c5f95754c7138a9f7a..4e4d6f15b7caf944e76b34226bf02304ca08e2b4 100755
--- a/GeoModelKernel/GeoModelKernel/GeoShapeShift.h
+++ b/GeoModelKernel/GeoModelKernel/GeoShapeShift.h
@@ -8,6 +8,12 @@
 #include "GeoModelKernel/GeoShape.h"
 #include "GeoModelKernel/GeoDefinitions.h"
 
+
+#ifndef _GeoShapePersistification_On_
+class Persistifier;
+#endif
+
+
 class GeoShapeShift : public GeoShape
 {
  public:
@@ -53,6 +59,10 @@ class GeoShapeShift : public GeoShape
   static const std::string s_classType;
   static const ShapeType s_classTypeID;
 
+    //    For I/O only!
+  GeoShapeShift(){}
+  friend class Persistifier;
+
 };
 
 inline const std::string& GeoShapeShift::getClassType ()
diff --git a/GeoModelKernel/GeoModelKernel/GeoShapeSubtraction.h b/GeoModelKernel/GeoModelKernel/GeoShapeSubtraction.h
index 45646a344b96ec221b9bc0b0b9dea88e8d622c38..26f45a383291d837905ca8d4359dfd112868decb 100755
--- a/GeoModelKernel/GeoModelKernel/GeoShapeSubtraction.h
+++ b/GeoModelKernel/GeoModelKernel/GeoShapeSubtraction.h
@@ -7,6 +7,12 @@
 
 #include "GeoModelKernel/GeoShape.h"
 
+
+#ifndef _GeoShapePersistification_On_
+class Persistifier;
+#endif
+
+
 class GeoShapeSubtraction : public GeoShape
 {
  public:
@@ -52,6 +58,10 @@ class GeoShapeSubtraction : public GeoShape
   static const std::string s_classType;
   static const ShapeType s_classTypeID;
 
+  //    For I/O only!
+  GeoShapeSubtraction(){}
+  friend class Persistifier;
+  
 };
 
 inline const std::string& GeoShapeSubtraction::getClassType ()
diff --git a/GeoModelKernel/GeoModelKernel/GeoShapeUnion.h b/GeoModelKernel/GeoModelKernel/GeoShapeUnion.h
index a1f33324dad2c1fa4bae72d9c0b4cac1abb86e77..4ba6ea30a4c8021552c2e6c3b7417a2554cd3d6b 100755
--- a/GeoModelKernel/GeoModelKernel/GeoShapeUnion.h
+++ b/GeoModelKernel/GeoModelKernel/GeoShapeUnion.h
@@ -7,6 +7,10 @@
 
 #include "GeoModelKernel/GeoShape.h"
 
+#ifndef _GeoShapePersistification_On_
+class Persistifier;
+#endif
+
 class GeoShapeUnion : public GeoShape
 {
  public:
@@ -52,6 +56,10 @@ class GeoShapeUnion : public GeoShape
   static const std::string s_classType;
   static const ShapeType s_classTypeID;
 
+    //    For I/O only!
+  GeoShapeUnion(){}
+  friend Persistifier;
+
 };
 
 inline const std::string& GeoShapeUnion::getClassType ()