diff -ur geos-3.1.1-orig/source/algorithm/ConvexHull.cpp geos-3.1.1/source/algorithm/ConvexHull.cpp
--- geos-3.1.1-orig/source/algorithm/ConvexHull.cpp	Thu Apr  9 02:00:07 2009
+++ geos-3.1.1/source/algorithm/ConvexHull.cpp	Wed Dec  9 11:23:21 2009
@@ -207,7 +207,13 @@
 		}
 	}
 
+#ifndef _RWSTD_NO_MEMBER_TEMPLATES
 	inputPts.assign(reducedSet.begin(), reducedSet.end());
+#else
+	inputPts.erase(inputPts.begin(), inputPts.end());
+	std::copy(reducedSet.begin(), reducedSet.end(), std::back_inserter(inputPts));
+#endif
+
  
 }
 
diff -ur geos-3.1.1-orig/source/headers/geos/geom/CoordinateList.h geos-3.1.1/source/headers/geos/geom/CoordinateList.h
--- geos-3.1.1-orig/source/headers/geos/geom/CoordinateList.h	Thu Apr  9 02:00:21 2009
+++ geos-3.1.1/source/headers/geos/geom/CoordinateList.h	Wed Dec  9 11:23:01 2009
@@ -101,7 +101,12 @@
 	std::auto_ptr<Coordinate::Vect> toCoordinateArray() const
 	{
 		std::auto_ptr<Coordinate::Vect> ret(new Coordinate::Vect);
+#ifndef _RWSTD_NO_MEMBER_TEMPLATES
 		ret->assign(coords.begin(), coords.end());
+#else
+		ret->erase(ret->begin(),ret->end());
+		std::copy(coords.begin(), coords.end(),std::back_inserter(*ret));
+#endif
 		return ret;
 	}
 
diff -ur geos-3.1.1-orig/source/operation/overlay/OverlayOp.cpp geos-3.1.1/source/operation/overlay/OverlayOp.cpp
--- geos-3.1.1-orig/source/operation/overlay/OverlayOp.cpp	Thu Apr  9 02:00:12 2009
+++ geos-3.1.1/source/operation/overlay/OverlayOp.cpp	Wed Dec  9 11:23:01 2009
@@ -623,6 +623,7 @@
 	geomList->reserve(nPoints+nLines+nPolys);
 
 	// element geometries of the result are always in the order P,L,A
+#ifndef _RWSTD_NO_MEMBER_TEMPLATES
 	geomList->insert(geomList->end(),
 			nResultPointList->begin(),
 			nResultPointList->end());
@@ -634,6 +635,11 @@
 	geomList->insert(geomList->end(),
 			nResultPolyList->begin(),
 			nResultPolyList->end());
+#else
+	std::copy(nResultPointList->begin(),nResultPointList->end(),back_inserter(*geomList));
+	std::copy(nResultLineList->begin(),nResultLineList->end(),back_inserter(*geomList));
+	std::copy(nResultPolyList->begin(),nResultPolyList->end(),back_inserter(*geomList));
+#endif
 			
 	// build the most specific geometry possible
 	Geometry *g=geomFact->buildGeometry(geomList);
diff -ur geos-3.1.1-orig/source/operation/overlay/PolygonBuilder.cpp geos-3.1.1/source/operation/overlay/PolygonBuilder.cpp
--- geos-3.1.1-orig/source/operation/overlay/PolygonBuilder.cpp	Thu May 28 05:11:06 2009
+++ geos-3.1.1/source/operation/overlay/PolygonBuilder.cpp	Wed Dec  9 11:23:01 2009
@@ -234,10 +234,17 @@
 			}
 			else
 			{
+#ifndef _RWSTD_NO_MEMBER_TEMPLATES
 				freeHoleList->insert(
 						freeHoleList->end(),
 						minEdgeRings->begin(),
 						minEdgeRings->end() );
+#else
+				std::copy (
+						minEdgeRings->begin(),
+						minEdgeRings->end(),
+						back_inserter(*freeHoleList) );
+#endif
 			}
 			delete er;
 			delete minEdgeRings;
diff -ur geos-3.1.1-orig/source/operation/valid/ConnectedInteriorTester.cpp geos-3.1.1/source/operation/valid/ConnectedInteriorTester.cpp
--- geos-3.1.1-orig/source/operation/valid/ConnectedInteriorTester.cpp	Thu Apr  9 02:00:11 2009
+++ geos-3.1.1/source/operation/valid/ConnectedInteriorTester.cpp	Wed Dec  9 11:23:01 2009
@@ -225,7 +225,12 @@
 		}
 	}
 	std::vector<EdgeRing*> *edgeRings=new std::vector<EdgeRing*>();
+#ifndef _RWSTD_NO_MEMBER_TEMPLATES
 	edgeRings->assign(minEdgeRings.begin(), minEdgeRings.end());
+#else
+	edgeRings->erase(edgeRings->begin(),edgeRings->end());
+	std::copy(minEdgeRings.begin(),minEdgeRings.end(),std::back_inserter(*edgeRings));
+#endif
 	return edgeRings;
 }
 

