diff --git a/src/main/src/main/java/org/geoserver/catalog/CatalogBuilder.java b/src/main/src/main/java/org/geoserver/catalog/CatalogBuilder.java
index 00ecb7b..cb7c254 100644
--- a/src/main/src/main/java/org/geoserver/catalog/CatalogBuilder.java
+++ b/src/main/src/main/java/org/geoserver/catalog/CatalogBuilder.java
@@ -616,9 +616,16 @@ public class CatalogBuilder {
      * Initialize a coverage object and set any unset info.
      */
     public void initCoverage(CoverageInfo cinfo) throws Exception {
-    	CoverageStoreInfo csinfo = (CoverageStoreInfo) store;
+        initCoverage(cinfo, null);
+    }
+
+    /**
+     * Initialize a coverage object and set any unset info.
+     */
+    private void initCoverage(CoverageInfo cinfo, Map customParameters) throws Exception {
+        CoverageStoreInfo csinfo = (CoverageStoreInfo) store;
         AbstractGridCoverage2DReader reader = (AbstractGridCoverage2DReader) catalog
-            	.getResourcePool().getGridCoverageReader(csinfo, GeoTools.getDefaultHints());
+                .getResourcePool().getGridCoverageReader(csinfo, GeoTools.getDefaultHints());
 
         initResourceInfo(cinfo);
 
@@ -626,14 +633,28 @@ public class CatalogBuilder {
             throw new Exception("Unable to acquire a reader for this coverage with format: "
                     + csinfo.getFormat().getName());
 
+        CoordinateReferenceSystem nativeCRS = cinfo.getNativeCRS();
         if (cinfo.getNativeCRS() == null) {
-        	cinfo.setNativeCRS(reader.getCrs());
-        }
+            nativeCRS = reader.getCrs();
+            cinfo.setNativeCRS(nativeCRS);
 
-        CoordinateReferenceSystem nativeCRS = cinfo.getNativeCRS();
+            // mind the default projection policy, Coverages do not have a flexible
+            // handling as feature types, they do reproject if the native srs is set,
+            // force if missing
+            if (nativeCRS != null && !nativeCRS.getIdentifiers().isEmpty()) {
+                cinfo.setSRS(nativeCRS.getIdentifiers().toArray()[0].toString());
+                cinfo.setProjectionPolicy(ProjectionPolicy.REPROJECT_TO_DECLARED);
+            }
+            if (nativeCRS == null) {
+                cinfo.setProjectionPolicy(ProjectionPolicy.FORCE_DECLARED);
+            }
+        }
 
         if (cinfo.getSRS() == null) {
-        	cinfo.setSRS(nativeCRS.getIdentifiers().toArray()[0].toString());
+            Object[] crsIDs = nativeCRS.getIdentifiers().toArray();
+            if (crsIDs.length > 0) {
+                cinfo.setSRS(crsIDs[0].toString());
+            }
         }
 
         if (cinfo.getProjectionPolicy() == null) {
@@ -645,84 +666,23 @@ public class CatalogBuilder {
             }
         }
 
-    	if (cinfo.getLatLonBoundingBox() == null
-    			&& cinfo.getNativeBoundingBox() == null) {
-    		GeneralEnvelope envelope = reader.getOriginalEnvelope();
-
-    		cinfo.setNativeBoundingBox(new ReferencedEnvelope(envelope));
-    		cinfo.setLatLonBoundingBox(new ReferencedEnvelope(CoverageStoreUtils.getWGS84LonLatEnvelope(envelope)));
-    	} else if (cinfo.getLatLonBoundingBox() == null) {
-    		setupBounds(cinfo);
-    	} else if (cinfo.getNativeBoundingBox() == null && cinfo.getNativeCRS() != null) {
-    		ReferencedEnvelope boundsLatLon = cinfo.getLatLonBoundingBox();
-    		cinfo.setNativeBoundingBox(boundsLatLon.transform(cinfo.getNativeCRS(), true));
-    	}
-    }
-
-    /**
-     * Builds the default coverage contained in the current store
-     * 
-     * @return
-     * @throws Exception
-     */
-    public CoverageInfo buildCoverage() throws Exception {
-        if (store == null || !(store instanceof CoverageStoreInfo)) {
-            throw new IllegalStateException("Coverage store not set.");
-        }
-
-        CoverageStoreInfo csinfo = (CoverageStoreInfo) store;
-        AbstractGridCoverage2DReader reader = (AbstractGridCoverage2DReader) catalog
-                .getResourcePool().getGridCoverageReader(csinfo, GeoTools.getDefaultHints());
-
-        if (reader == null)
-            throw new Exception("Unable to acquire a reader for this coverage with format: "
-                    + csinfo.getFormat().getName());
-
-        return buildCoverage(reader, null);
-    }
-
-    /**
-     * Builds a coverage from a geotools grid coverage reader.
-     * @param customParameters 
-     */
-    public CoverageInfo buildCoverage(AbstractGridCoverage2DReader reader, Map customParameters) throws Exception {
-        if (store == null || !(store instanceof CoverageStoreInfo)) {
-            throw new IllegalStateException("Coverage store not set.");
-        }
-
-        CoverageStoreInfo csinfo = (CoverageStoreInfo) store;
-        CoverageInfo cinfo = catalog.getFactory().createCoverage();
-
-        cinfo.setStore(csinfo);
-        cinfo.setEnabled(true);
-
-        WorkspaceInfo workspace = store.getWorkspace();
-        NamespaceInfo namespace = catalog.getNamespaceByPrefix(workspace.getName());
-        if (namespace == null) {
-            namespace = catalog.getDefaultNamespace();
-        }
-        cinfo.setNamespace(namespace);
-
-        CoordinateReferenceSystem nativeCRS = reader.getCrs();
-        cinfo.setNativeCRS(nativeCRS);
-
-        // mind the default projection policy, Coverages do not have a flexible
-        // handling as feature types, they do reproject if the native srs is set,
-        // force if missing
-        if (nativeCRS != null && !nativeCRS.getIdentifiers().isEmpty()) {
-            cinfo.setSRS(nativeCRS.getIdentifiers().toArray()[0].toString());
-            cinfo.setProjectionPolicy(ProjectionPolicy.REPROJECT_TO_DECLARED);
-        }
-        if (nativeCRS == null) {
-            cinfo.setProjectionPolicy(ProjectionPolicy.FORCE_DECLARED);
+        if (cinfo.getLatLonBoundingBox() == null && cinfo.getNativeBoundingBox() == null) {
+            GeneralEnvelope envelope = reader.getOriginalEnvelope();
+            cinfo.setNativeBoundingBox(new ReferencedEnvelope(envelope));
+            cinfo.setLatLonBoundingBox(new ReferencedEnvelope(CoverageStoreUtils
+                    .getWGS84LonLatEnvelope(envelope)));
+        } else if (cinfo.getLatLonBoundingBox() == null) {
+            setupBounds(cinfo);
+        } else if (cinfo.getNativeBoundingBox() == null && cinfo.getNativeCRS() != null) {
+            ReferencedEnvelope boundsLatLon = cinfo.getLatLonBoundingBox();
+            cinfo.setNativeBoundingBox(boundsLatLon.transform(cinfo.getNativeCRS(), true));
         }
 
-        GeneralEnvelope envelope = reader.getOriginalEnvelope();
-        cinfo.setNativeBoundingBox(new ReferencedEnvelope(envelope));
-        cinfo.setLatLonBoundingBox(new ReferencedEnvelope(CoverageStoreUtils.getWGS84LonLatEnvelope(envelope)));
-
         GridEnvelope originalRange = reader.getOriginalGridRange();
-        cinfo.setGrid(new GridGeometry2D(originalRange, reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER), nativeCRS));
+        if (cinfo.getGrid() == null) {
+            cinfo.setGrid(new GridGeometry2D(originalRange, reader
+                    .getOriginalGridToWorld(PixelInCell.CELL_CENTER), nativeCRS));
+        }
 
         // /////////////////////////////////////////////////////////////////////
         //
@@ -730,8 +690,8 @@ public class CatalogBuilder {
         // information about bands:
         //
         // - calculating a new envelope which is just 5x5 pixels
-        // - if it's a mosaic, limit the number of tiles we're going to read to one 
-        //   (with time and elevation there might be hundreds of superimposed tiles)
+        // - if it's a mosaic, limit the number of tiles we're going to read to one
+        // (with time and elevation there might be hundreds of superimposed tiles)
         // - reading the GridCoverage subset
         //
         // /////////////////////////////////////////////////////////////////////
@@ -751,25 +711,29 @@ public class CatalogBuilder {
         final GridEnvelope2D testRange = new GridEnvelope2D(minX, minY, maxX, maxY);
 
         // build the corresponding envelope
-        final MathTransform gridToWorldCorner = reader.getOriginalGridToWorld(PixelInCell.CELL_CORNER);
-        final GeneralEnvelope testEnvelope = CRS.transform(gridToWorldCorner, new GeneralEnvelope(testRange.getBounds()));
+        final MathTransform gridToWorldCorner = reader
+                .getOriginalGridToWorld(PixelInCell.CELL_CORNER);
+        final GeneralEnvelope testEnvelope = CRS.transform(gridToWorldCorner, new GeneralEnvelope(
+                testRange.getBounds()));
         testEnvelope.setCoordinateReferenceSystem(nativeCRS);
 
         if (customParameters != null) {
-        	parameters.putAll(customParameters);
+            parameters.putAll(customParameters);
         }
-        
-        // make sure mosaics with many superimposed tiles won't blow up with 
+
+        // make sure mosaics with many superimposed tiles won't blow up with
         // a "too many open files" exception
         String maxAllowedTiles = ImageMosaicFormat.MAX_ALLOWED_TILES.getName().toString();
-        if(parameters.keySet().contains(maxAllowedTiles)) {
+        if (parameters.keySet().contains(maxAllowedTiles)) {
             parameters.put(maxAllowedTiles, 1);
         }
-        
-        parameters.put(AbstractGridFormat.READ_GRIDGEOMETRY2D.getName().toString(), new GridGeometry2D(testRange, testEnvelope));
+
+        parameters.put(AbstractGridFormat.READ_GRIDGEOMETRY2D.getName().toString(),
+                new GridGeometry2D(testRange, testEnvelope));
 
         // try to read this coverage
-        gc = (GridCoverage2D) reader.read(CoverageUtils.getParameters(readParams, parameters, true));
+        gc = (GridCoverage2D) reader
+                .read(CoverageUtils.getParameters(readParams, parameters, true));
         if (gc == null) {
             throw new Exception("Unable to acquire test coverage for format:" + format.getName());
         }
@@ -777,87 +741,146 @@ public class CatalogBuilder {
         // remove read grid geometry since it is request specific
         parameters.remove(AbstractGridFormat.READ_GRIDGEOMETRY2D.getName().toString());
 
-        cinfo.getDimensions().addAll(getCoverageDimensions(gc.getSampleDimensions()));
-        // TODO:
-        // dimentionNames = getDimensionNames(gc);
-        /*
-         * StringBuilder cvName =null; int count = 0; while (true) { final StringBuilder key = new
-         * StringBuilder(gc.getName().toString()); if (count > 0) { key.append("_").append(count); }
-         * 
-         * Map coverages = dataConfig.getCoverages(); Set cvKeySet = coverages.keySet(); boolean
-         * key_exists = false;
-         * 
-         * for (Iterator it = cvKeySet.iterator(); it.hasNext();) { String cvKey = ((String)
-         * it.next()).toLowerCase(); if (cvKey.endsWith(key.toString().toLowerCase())) { key_exists
-         * = true; } }
-         * 
-         * if (!key_exists) { cvName = key; break; } else { count++; } }
-         * 
-         * String name = cvName.toString();
-         */
+        if (cinfo.getDimensions().size() == 0) {
+            cinfo.getDimensions().addAll(getCoverageDimensions(gc.getSampleDimensions()));
+        }
+
         String name = gc.getName().toString();
-        cinfo.setName(name);
-        cinfo.setTitle(name);
-        cinfo.setDescription(new StringBuilder("Generated from ").append(format.getName()).toString());
+        if (cinfo.getName() == null) {
+            cinfo.setName(name);
+        }
+        if (cinfo.getTitle() == null) {
+            cinfo.setTitle(name);
+        }
+        if (cinfo.getDescription() == null) {
+            cinfo.setDescription(new StringBuilder("Generated from ").append(format.getName())
+                    .toString());
+        }
 
         // keywords
-        cinfo.getKeywords().add("WCS");
-        cinfo.getKeywords().add(format.getName());
-        cinfo.getKeywords().add(name);
+        if (cinfo.getKeywords().size() == 0) {
+            cinfo.getKeywords().add("WCS");
+            cinfo.getKeywords().add(format.getName());
+            cinfo.getKeywords().add(name);
+        }
 
         // native format name
         cinfo.setNativeFormat(format.getName());
-        cinfo.getMetadata().put("dirName", new StringBuilder(store.getName()).append("_").append(name).toString());
+        if (cinfo.getMetadata().size() == 0) {
+            cinfo.getMetadata().put("dirName",
+                    new StringBuilder(store.getName()).append("_").append(name).toString());
+        }
 
         // request SRS's
-        if ((gc.getCoordinateReferenceSystem2D().getIdentifiers() != null)
-                && !gc.getCoordinateReferenceSystem2D().getIdentifiers().isEmpty()) {
-            cinfo.getRequestSRS().add(((Identifier) gc.getCoordinateReferenceSystem2D().getIdentifiers().toArray()[0]).toString());
+        if (cinfo.getRequestSRS().size() == 0) {
+            if ((gc.getCoordinateReferenceSystem2D().getIdentifiers() != null)
+                    && !gc.getCoordinateReferenceSystem2D().getIdentifiers().isEmpty()) {
+                cinfo.getRequestSRS().add(
+                        ((Identifier) gc.getCoordinateReferenceSystem2D().getIdentifiers()
+                                .toArray()[0]).toString());
+            }
         }
 
         // response SRS's
-        if ((gc.getCoordinateReferenceSystem2D().getIdentifiers() != null)
-                && !gc.getCoordinateReferenceSystem2D().getIdentifiers().isEmpty()) {
-            cinfo.getResponseSRS().add(((Identifier) gc.getCoordinateReferenceSystem2D().getIdentifiers().toArray()[0]).toString());
+        if (cinfo.getResponseSRS().size() == 0) {
+            if ((gc.getCoordinateReferenceSystem2D().getIdentifiers() != null)
+                    && !gc.getCoordinateReferenceSystem2D().getIdentifiers().isEmpty()) {
+                cinfo.getResponseSRS().add(
+                        ((Identifier) gc.getCoordinateReferenceSystem2D().getIdentifiers()
+                                .toArray()[0]).toString());
+            }
         }
 
         // supported formats
-        final List formats = CoverageStoreUtils.listDataFormats();
-        for (Iterator i = formats.iterator(); i.hasNext();) {
-            final Format fTmp = (Format) i.next();
-            final String fName = fTmp.getName();
-
-            if (fName.equalsIgnoreCase("WorldImage")) {
-                // TODO check if coverage can encode Format
-                cinfo.getSupportedFormats().add("GIF");
-                cinfo.getSupportedFormats().add("PNG");
-                cinfo.getSupportedFormats().add("JPEG");
-                cinfo.getSupportedFormats().add("TIFF");
-            } else if (fName.toLowerCase().startsWith("geotiff")) {
-                // TODO check if coverage can encode Format
-                cinfo.getSupportedFormats().add("GEOTIFF");
-            } else {
-                // TODO check if coverage can encode Format
-                cinfo.getSupportedFormats().add(fName);
+        if (cinfo.getSupportedFormats().size() == 0) {
+            final List formats = CoverageStoreUtils.listDataFormats();
+            for (Iterator i = formats.iterator(); i.hasNext();) {
+                final Format fTmp = (Format) i.next();
+                final String fName = fTmp.getName();
+
+                if (fName.equalsIgnoreCase("WorldImage")) {
+                    // TODO check if coverage can encode Format
+                    cinfo.getSupportedFormats().add("GIF");
+                    cinfo.getSupportedFormats().add("PNG");
+                    cinfo.getSupportedFormats().add("JPEG");
+                    cinfo.getSupportedFormats().add("TIFF");
+                } else if (fName.toLowerCase().startsWith("geotiff")) {
+                    // TODO check if coverage can encode Format
+                    cinfo.getSupportedFormats().add("GEOTIFF");
+                } else {
+                    // TODO check if coverage can encode Format
+                    cinfo.getSupportedFormats().add(fName);
+                }
             }
         }
 
         // interpolation methods
-        cinfo.setDefaultInterpolationMethod("nearest neighbor");
-        cinfo.getInterpolationMethods().add("nearest neighbor");
-        cinfo.getInterpolationMethods().add("bilinear");
-        cinfo.getInterpolationMethods().add("bicubic");
+        if (cinfo.getInterpolationMethods().size() == 0) {
+            cinfo.getInterpolationMethods().add("nearest neighbor");
+            cinfo.getInterpolationMethods().add("bilinear");
+            cinfo.getInterpolationMethods().add("bicubic");
+        }
+        if (cinfo.getDefaultInterpolationMethod() == null) {
+            cinfo.setDefaultInterpolationMethod("nearest neighbor");
+        }
 
-        // read parameters (get the params again since we altered the map to optimize the 
+        // read parameters (get the params again since we altered the map to optimize the
         // coverage read)
         cinfo.getParameters().putAll(CoverageUtils.getParametersKVP(readParams));
 
-        /// dispose coverage 
+        // / dispose coverage
         gc.dispose(true);
-        if(gc.getRenderedImage() instanceof PlanarImage) {
+        if (gc.getRenderedImage() instanceof PlanarImage) {
             ImageUtilities.disposePlanarImageChain((PlanarImage) gc.getRenderedImage());
         }
+    }
+
+    /**
+     * Builds the default coverage contained in the current store
+     *
+     * @return
+     * @throws Exception
+     */
+    public CoverageInfo buildCoverage() throws Exception {
+        if (store == null || !(store instanceof CoverageStoreInfo)) {
+            throw new IllegalStateException("Coverage store not set.");
+        }
 
+        CoverageStoreInfo csinfo = (CoverageStoreInfo) store;
+        AbstractGridCoverage2DReader reader = (AbstractGridCoverage2DReader) catalog
+                .getResourcePool().getGridCoverageReader(csinfo, GeoTools.getDefaultHints());
+
+        if (reader == null)
+            throw new Exception("Unable to acquire a reader for this coverage with format: "
+                    + csinfo.getFormat().getName());
+
+        return buildCoverage(reader, null);
+    }
+
+    /**
+     * Builds a coverage from a geotools grid coverage reader.
+     * @param customParameters
+     */
+    public CoverageInfo buildCoverage(AbstractGridCoverage2DReader reader, Map customParameters) throws Exception {
+        if (store == null || !(store instanceof CoverageStoreInfo)) {
+            throw new IllegalStateException("Coverage store not set.");
+        }
+
+        CoverageStoreInfo csinfo = (CoverageStoreInfo) store;
+        CoverageInfo cinfo = catalog.getFactory().createCoverage();
+
+        cinfo.setStore(csinfo);
+        cinfo.setEnabled(true);
+
+        WorkspaceInfo workspace = store.getWorkspace();
+        NamespaceInfo namespace = catalog.getNamespaceByPrefix(workspace.getName());
+        if (namespace == null) {
+            namespace = catalog.getDefaultNamespace();
+        }
+        cinfo.setNamespace(namespace);
+
+        initCoverage(cinfo);
+        
         return cinfo;
     }
 
diff --git a/src/main/src/main/java/org/geoserver/config/util/XStreamPersister.java b/src/main/src/main/java/org/geoserver/config/util/XStreamPersister.java
index 246ea74..e59bb74 100644
--- a/src/main/src/main/java/org/geoserver/config/util/XStreamPersister.java
+++ b/src/main/src/main/java/org/geoserver/config/util/XStreamPersister.java
@@ -9,6 +9,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -1410,16 +1411,30 @@ public class XStreamPersister {
             super(clazz);
         }
         
-        public Object doUnmarshal(Object result,
-                HierarchicalStreamReader reader, UnmarshallingContext context) {
-            ResourceInfo obj = (ResourceInfo) super.doUnmarshal(result, reader, context);
-            
+        public Object doUnmarshal(Object result, HierarchicalStreamReader reader,
+                UnmarshallingContext context) {
+            ResourceInfoImpl obj = (ResourceInfoImpl) super.doUnmarshal(result, reader, context);
+
+            // ensure null list does not result
+            if (obj.getMetadata() == null) {
+                obj.setMetadata(new MetadataMap());
+            }
+            if (obj.getAlias() == null) {
+                obj.setAlias(new ArrayList<String>());
+            }
+            if (obj.getMetadataLinks() == null) {
+                obj.setMetadataLinks(new ArrayList<MetadataLinkInfo>());
+            }
+            if (obj.getKeywords() == null) {
+                obj.setKeywords(new ArrayList<String>());
+            }
+
             String enabled = obj.isEnabled() ? "enabled" : "disabled";
-            String type = obj instanceof CoverageInfo ? "coverage" : 
-                obj instanceof FeatureTypeInfo ? "feature type" : "resource";
-            
-            LOGGER.info( "Loaded " + type + " '" + obj.getName() + "', " + enabled );
-            
+            String type = obj instanceof CoverageInfo ? "coverage"
+                    : obj instanceof FeatureTypeInfo ? "feature type" : "resource";
+
+            LOGGER.info("Loaded " + type + " '" + obj.getName() + "', " + enabled);
+
             return obj;
         }
     }
@@ -1436,6 +1451,7 @@ public class XStreamPersister {
         @Override
         protected void postDoMarshal(Object result,
                 HierarchicalStreamWriter writer, MarshallingContext context) {
+
             FeatureTypeInfoImpl featureType = (FeatureTypeInfoImpl) result;
             
             //ensure null list does not result
@@ -1448,6 +1464,20 @@ public class XStreamPersister {
             
             callback.postEncodeFeatureType(featureType, writer, context);
         }
+
+        @Override
+        public Object doUnmarshal(Object result, HierarchicalStreamReader reader,
+                UnmarshallingContext context) {
+            FeatureTypeInfoImpl featureType = (FeatureTypeInfoImpl) super.doUnmarshal(result,
+                    reader, context);
+
+            // ensure null list does not result
+            if (featureType.getAttributes() == null) {
+                featureType.setAttributes(new ArrayList<AttributeTypeInfo>());
+            }
+
+            return featureType;
+        }
     }
     
     /**
@@ -1459,9 +1489,35 @@ public class XStreamPersister {
         }
         
         @Override
-        protected void postDoMarshal(Object result,
-                HierarchicalStreamWriter writer, MarshallingContext context) {
-            callback.postEncodeCoverage((CoverageInfo)result, writer, context);
+        public Object doUnmarshal(Object result, HierarchicalStreamReader reader,
+                UnmarshallingContext context) {
+            CoverageInfoImpl coverage = (CoverageInfoImpl) super.doUnmarshal(result, reader,
+                    context);
+
+            // ensure null list does not result
+            if (coverage.getSupportedFormats() == null) {
+                coverage.setSupportedFormats(new ArrayList<String>());
+            }
+            if (coverage.getMetadata() == null) {
+                coverage.setMetadata(new MetadataMap());
+            }
+            if (coverage.getInterpolationMethods() == null) {
+                coverage.setInterpolationMethods(new ArrayList<String>());
+            }
+            if (coverage.getDimensions() == null) {
+                coverage.setDimensions(new ArrayList<CoverageDimensionInfo>());
+            }
+            if (coverage.getRequestSRS() == null) {
+                coverage.setRequestSRS(new ArrayList<String>());
+            }
+            if (coverage.getResponseSRS() == null) {
+                coverage.setResponseSRS(new ArrayList<String>());
+            }
+            if (coverage.getParameters() == null) {
+                coverage.setParameters(new HashMap<String, Serializable>());
+            }
+
+            return coverage;
         }
     }
     
diff --git a/src/restconfig/src/test/java/org/geoserver/catalog/rest/CoverageTest.java b/src/restconfig/src/test/java/org/geoserver/catalog/rest/CoverageTest.java
index 777b156..cbbe3e3 100644
--- a/src/restconfig/src/test/java/org/geoserver/catalog/rest/CoverageTest.java
+++ b/src/restconfig/src/test/java/org/geoserver/catalog/rest/CoverageTest.java
@@ -103,7 +103,7 @@ public class CoverageTest extends CatalogRESTTestSupport {
                 "<title>usa is a A raster file accompanied by a spatial data file</title>" + 
                 "<description>Generated from WorldImage</description>" + 
                 "<srs>EPSG:4326</srs>" +
-                /*"<latLonBoundingBox>"+
+                "<latLonBoundingBox>"+
                   "<minx>-130.85168</minx>"+
                   "<maxx>-62.0054</maxx>"+
                   "<miny>20.7052</miny>"+
@@ -115,7 +115,7 @@ public class CoverageTest extends CatalogRESTTestSupport {
                   "<miny>20.7052</miny>"+
                   "<maxy>54.1141</maxy>"+
                   "<crs>EPSG:4326</crs>"+
-                "</nativeBoundingBox>"+*/
+                "</nativeBoundingBox>"+
                 "<grid dimension=\"2\">"+
                     "<range>"+
                       "<low>0 0</low>"+
@@ -158,40 +158,49 @@ public class CoverageTest extends CatalogRESTTestSupport {
         assertXpathEvaluatesTo("-130.85168", "/coverage/latLonBoundingBox/minx", dom);
     }
 
-//    public void testPostAsJSON() throws Exception {
-//        Document dom = getAsDOM( "wfs?request=getfeature&typename=wcs:pdsa");
-//        assertEquals( "ows:ExceptionReport", dom.getDocumentElement().getNodeName());
-//        
-//        addPropertyDataStore(false);
-//        String json = 
-//          "{" + 
-//           "'coverage':{" + 
-//              "'name':'pdsa'," +
-//              "'nativeName':'pdsa'," +
-//              "'srs':'EPSG:4326'," +
-//              "'nativeBoundingBox':{" +
-//                 "'minx':0.0," +
-//                 "'maxx':1.0," +
-//                 "'miny':0.0," +
-//                 "'maxy':1.0," +
-//                 "'crs':'EPSG:4326'" +
-//              "}," +
-//              "'nativeCRS':'EPSG:4326'," +
-//              "'store':'pds'" +
-//             "}" +
-//          "}";
-//        MockHttpServletResponse response =  
-//            postAsServletResponse( "/rest/workspaces/gs/coveragestores/pds/coverages/", json, "text/json");
-//        
-//        assertEquals( 201, response.getStatusCode() );
-//        assertNotNull( response.getHeader( "Location") );
-//        assertTrue( response.getHeader("Location").endsWith( "/workspaces/gs/coveragestores/pds/coverages/pdsa" ) );
-//        
-//        dom = getAsDOM( "wfs?request=getfeature&typename=gs:pdsa");
-//        assertEquals( "wfs:FeatureCollection", dom.getDocumentElement().getNodeName());
-//        assertEquals( 2, dom.getElementsByTagName( "gs:pdsa").getLength());
-//    }
-//    
+    public void testPostAsJSON() throws Exception {
+        String req = "wcs?service=wcs&request=getcoverage&version=1.1.1&identifier=gs:usa" +
+        "&boundingbox=-100,30,-80,44,EPSG:4326&format=image/tiff" +
+        "&gridbasecrs=EPSG:4326&store=true";
+
+        Document dom = getAsDOM( req );
+        assertEquals( "ows:ExceptionReport", dom.getDocumentElement().getNodeName());
+
+        addCoverageStore(false);
+        dom = getAsDOM( "/rest/workspaces/gs/coveragestores/usaWorldImage/coverages.xml");
+        assertEquals( 0, dom.getElementsByTagName( "coverage").getLength() );
+
+        String json =
+          "{" +
+           "'coverage':{" +
+              "'name':'usa'," +
+              "'store':'usaWorldImage'" +
+             "}" +
+          "}";
+        MockHttpServletResponse response =
+            postAsServletResponse( "/rest/workspaces/gs/coveragestores/usaWorldImage/coverages/", json, "text/json");
+
+        assertEquals( 201, response.getStatusCode() );
+        assertNotNull( response.getHeader( "Location") );
+        assertTrue( response.getHeader("Location").endsWith( "/workspaces/gs/coveragestores/usaWorldImage/coverages/usa" ) );
+
+        dom = getAsDOM( req );
+        assertEquals( "wcs:Coverages", dom.getDocumentElement().getNodeName() );
+
+        dom = getAsDOM("/rest/workspaces/gs/coveragestores/usaWorldImage/coverages/usa.xml");
+
+        assertXpathEvaluatesTo("-130.85168", "/coverage/latLonBoundingBox/minx", dom);
+        assertXpathEvaluatesTo("-130.85168", "/coverage/nativeBoundingBox/minx", dom);
+        assertXpathEvaluatesTo("EPSG:4326", "/coverage/srs", dom);
+        assertXpathEvaluatesTo("EPSG:4326", "/coverage/grid/crs", dom);
+        assertXpathEvaluatesTo("983 598", "/coverage/grid/range/high", dom);
+        assertXpathEvaluatesTo("EPSG:4326", "/coverage/requestSRS/string", dom);
+        assertXpathEvaluatesTo("EPSG:4326", "/coverage/responseSRS/string", dom);
+        assertXpathEvaluatesTo("8", "count(/coverage/supportedFormats/string)", dom); // count of formats
+        assertXpathEvaluatesTo("usa", "/coverage/title", dom);
+        assertXpathEvaluatesTo("Generated from WorldImage", "/coverage/description", dom);
+    }
+
     public void testPostToResource() throws Exception {
         String xml = 
             "<coverage>"+
