diff -Naur osgearth-osgearth-2.8-orig/src/osgEarthSymbology/GEOS osgearth-osgearth-2.8/src/osgEarthSymbology/GEOS
--- osgearth-osgearth-2.8-orig/src/osgEarthSymbology/GEOS	2016-09-15 17:19:21.000000000 +0300
+++ osgearth-osgearth-2.8/src/osgEarthSymbology/GEOS	2017-02-02 19:43:19.103864300 +0300
@@ -26,6 +26,7 @@
 #include <osgEarthSymbology/Style>
 #include <osgEarthSymbology/Geometry>
 #include <geos/geom/Geometry.h>
+#include <geos/geom/GeometryFactory.h>
 
 namespace osgEarth { namespace Symbology
 {
@@ -45,7 +46,7 @@
         void disposeGeometry(geos::geom::Geometry* input);
 
     protected:
-        geos::geom::GeometryFactory* _factory;
+        geos::geom::GeometryFactory::unique_ptr _factory;
     };
 
 } } // namespace osgEarth::Features
diff -Naur osgearth-osgearth-2.8-orig/src/osgEarthSymbology/GEOS.cpp osgearth-osgearth-2.8/src/osgEarthSymbology/GEOS.cpp
--- osgearth-osgearth-2.8-orig/src/osgEarthSymbology/GEOS.cpp	2016-09-15 17:19:21.000000000 +0300
+++ osgearth-osgearth-2.8/src/osgEarthSymbology/GEOS.cpp	2017-02-02 19:44:46.772878700 +0300
@@ -67,7 +67,7 @@
     }
 
     geom::Geometry*
-    import( const Symbology::Geometry* input, const geom::GeometryFactory* f )
+    import( const Symbology::Geometry* input, const geom::GeometryFactory::unique_ptr f )
     {
         geom::Geometry* output = 0L;
 
@@ -216,7 +216,7 @@
     geos::geom::PrecisionModel* pm = new geos::geom::PrecisionModel(geom::PrecisionModel::FLOATING);
 
     // Factory will clone the PM
-    _factory = new geos::geom::GeometryFactory( pm );
+    _factory = geos::geom::GeometryFactory::create( pm );
 
     // Delete the template.
     delete pm;
@@ -224,7 +224,6 @@
 
 GEOSContext::~GEOSContext()
 {
-    delete _factory;
 }
 
 geom::Geometry*
@@ -331,10 +330,7 @@
 {
     if (input)
     {
-        geom::GeometryFactory* f = const_cast<geom::GeometryFactory*>(input->getFactory());
         _factory->destroyGeometry(input);
-        if ( f != _factory )
-            delete f;
     }
 }