diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java
index 9fd8844546f7770444b635a8dc80e2bdae4c6924..60c8e5b0bbbb4e551dabf966681c247869ed990c 100644
--- a/src/ac/ed/lurg/ModelMain.java
+++ b/src/ac/ed/lurg/ModelMain.java
@@ -110,7 +110,7 @@ public class ModelMain {
 
 			LogWriter.println("Country " + ca.getCountry());
 			Collection<RasterKey> countryKeys = countryBoundaryRaster.getKeysFor(ca.getCountry());
-			YieldRaster countryYieldSurfaces = yieldSurfaces.getSubsetRasterForKeys(countryKeys);
+			YieldRaster countryYieldSurfaces = yieldSurfaces.createSubsetForKeys(countryKeys);
 
 			GamsRasterOutput result = null;
 
@@ -305,8 +305,8 @@ public class ModelMain {
 			}
 
 			List<RasterKey> keys = countryBoundaryRaster.getKeysFor(cc);
-			RasterSet<LandCoverItem> initCountryLC = initLC.popSubsetForKeys(new RasterSet<LandCoverItem>(initLC.getHeaderDetails()), keys);
-			RasterSet<IrrigationItem> irrigationCosts = allIrrigationCosts.popSubsetForKeys(new RasterSet<IrrigationItem>(allIrrigationCosts.getHeaderDetails()), keys);
+			RasterSet<LandCoverItem> initCountryLC = initLC.createSubsetForKeys(keys);
+			RasterSet<IrrigationItem> irrigationCosts = allIrrigationCosts.createSubsetForKeys(keys);
 			Map<CropType, CropUsageData> countryCommodityData = cropUsageDataMap.get(cc);
 
 			if (countryCommodityData == null) {
diff --git a/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java b/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java
index 7c3bacec96a926652001d8667e75378f6b1fce24..5494bd8e53cc251c8f07f5d6135ef2b3be4a2ce7 100644
--- a/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java
+++ b/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java
@@ -145,7 +145,7 @@ public class GamsRasterOptimiser {
 			Set<RasterKey> keys = mapping.get(locId);
 
 			if (DEBUG) 
-				checkedTotalAreas(newLandUseRaster.popSubsetForKeys(new RasterSet<LandUseItem>(newLandUseRaster.getHeaderDetails()), keys), locId + " before");
+				checkedTotalAreas(newLandUseRaster.createSubsetForKeys(keys), locId + " before");
 
 			double pastureChange = newLandUseAggItem.getLandCoverArea(LandCoverType.PASTURE) - prevLandUseAggItem.getLandCoverArea(LandCoverType.PASTURE);
 			double croplandChange = newLandUseAggItem.getLandCoverArea(LandCoverType.CROPLAND) - prevLandUseAggItem.getLandCoverArea(LandCoverType.CROPLAND);
@@ -187,7 +187,7 @@ public class GamsRasterOptimiser {
 				LogWriter.printlnError("This should never happen, due to GAMS constraint. Not able to incorporate all changes, as not enough forest or natural areas left: " + locId + ": " + shortfall);
 
 			if (DEBUG) 
-				checkedTotalAreas(newLandUseRaster.popSubsetForKeys(new RasterSet<LandUseItem>(newLandUseRaster.getHeaderDetails()), keys), locId + " after");
+				checkedTotalAreas(newLandUseRaster.createSubsetForKeys(keys), locId + " after");
 
 			for (RasterKey key : keys) {
 				LandUseItem newLandUseItem = newLandUseRaster.get(key);
diff --git a/src/ac/ed/lurg/yield/YieldRaster.java b/src/ac/ed/lurg/yield/YieldRaster.java
index a3eba786afca9323b7b622f9154d1a70718ecdad..2e0c80cbb58860433f68b3a84fd9ffda02ca83e9 100644
--- a/src/ac/ed/lurg/yield/YieldRaster.java
+++ b/src/ac/ed/lurg/yield/YieldRaster.java
@@ -19,8 +19,9 @@ public class YieldRaster extends RasterSet<YieldResponsesItem> {
 	}
 	
 	// not very efficient, we could keep the mapping of country to area somewhere.
-	public YieldRaster getSubsetRasterForKeys(Collection<RasterKey> keys) {
-		YieldRaster subsetYieldRaster = new YieldRaster(this.getHeaderDetails());
+	@Override
+	public YieldRaster createSubsetForKeys(Collection<RasterKey> keys) {
+		YieldRaster subsetYieldRaster = new YieldRaster(getHeaderDetails());
 		popSubsetForKeys(subsetYieldRaster, keys);		
 		return subsetYieldRaster;
 	}
diff --git a/src/ac/sac/raster/RasterSet.java b/src/ac/sac/raster/RasterSet.java
index 5eb3820dfce3963cc30f567e76f36842986cf2da..7bc26df3d43207af016a947c216bfff0fac1a2ca 100755
--- a/src/ac/sac/raster/RasterSet.java
+++ b/src/ac/sac/raster/RasterSet.java
@@ -151,7 +151,11 @@ public class RasterSet<D extends RasterItem> extends HashMap<RasterKey, D> {
 		return h.getXCellSize() == header.getXCellSize() && h.getYCellSize() == header.getYCellSize();
 	}
 	
-	public RasterSet<D> popSubsetForKeys(RasterSet<D> subset, Collection<RasterKey> keys) {
+	public RasterSet<D> createSubsetForKeys(Collection<RasterKey> keys) {
+		return popSubsetForKeys (new RasterSet<D>(getHeaderDetails()), keys);
+	}
+
+	protected RasterSet<D> popSubsetForKeys(RasterSet<D> subset, Collection<RasterKey> keys) {		
 		for (RasterKey key : keys) {
 			//LogWriter.println("popSubsetForKeys: " + key.getCol() + ", "  + key.getRow() + ": " + getXCoordin(key) + ", " + getYCoordin(key));
 			subset.put(key, get(key));