Index: src/main/src/main/java/org/geoserver/security/decorators/DecoratingCoverageInfo.java
===================================================================
--- src/main/src/main/java/org/geoserver/security/decorators/DecoratingCoverageInfo.java	(revision 16592)
+++ src/main/src/main/java/org/geoserver/security/decorators/DecoratingCoverageInfo.java	(working copy)
@@ -86,6 +86,10 @@
         return delegate.getDimensions();
     }
 
+    public void setDimensions(List<CoverageDimensionInfo> dimensions) {
+        delegate.setDimensions(dimensions);
+    }
+
     public GridGeometry getGrid() {
         return delegate.getGrid();
     }
@@ -118,6 +122,10 @@
         return delegate.getKeywords();
     }
 
+    public void setKeywords(List<KeywordInfo> keywords) {
+        delegate.setKeywords(keywords);
+    }
+
     public List<String> keywordValues() {
         return delegate.keywordValues();
     }
@@ -130,6 +138,10 @@
         return delegate.getMetadata();
     }
 
+    public void setMetadata(MetadataMap metadata) {
+        delegate.setMetadata(metadata);
+    }
+
     public List<MetadataLinkInfo> getMetadataLinks() {
         return delegate.getMetadataLinks();
     }
@@ -204,6 +216,11 @@
         return delegate.getSupportedFormats();
     }
 
+    public void setSupportedFormats(List<String> formats)
+    {
+        delegate.setSupportedFormats(formats);
+    }
+
     public String getTitle() {
         return delegate.getTitle();
     }
Index: src/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSLayerInfo.java
===================================================================
--- src/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSLayerInfo.java	(revision 16592)
+++ src/main/src/main/java/org/geoserver/security/decorators/DecoratingWMSLayerInfo.java	(working copy)
@@ -82,6 +82,10 @@
         return delegate.getKeywords();
     }
 
+    public void setKeywords(List<KeywordInfo> keywords) {
+        delegate.setKeywords(keywords);
+    }
+
     public List<String> keywordValues() {
         return delegate.keywordValues();
     }
@@ -94,6 +98,10 @@
         return delegate.getMetadata();
     }
 
+    public void setMetadata(MetadataMap metadata) {
+        delegate.setMetadata(metadata);
+    }
+
     public List<MetadataLinkInfo> getMetadataLinks() {
         return delegate.getMetadataLinks();
     }
Index: src/main/src/main/java/org/geoserver/security/decorators/DecoratingFeatureTypeInfo.java
===================================================================
--- src/main/src/main/java/org/geoserver/security/decorators/DecoratingFeatureTypeInfo.java	(revision 16592)
+++ src/main/src/main/java/org/geoserver/security/decorators/DecoratingFeatureTypeInfo.java	(working copy)
@@ -107,6 +107,10 @@
         return delegate.getKeywords();
     }
 
+    public void setKeywords(List<KeywordInfo> keywords) {
+        delegate.setKeywords(keywords);
+    }
+
     public List<String> keywordValues() {
         return delegate.keywordValues();
     }
@@ -123,6 +127,10 @@
         return delegate.getMetadata();
     }
 
+    public void setMetadata(MetadataMap metadata) {
+        delegate.setMetadata(metadata);
+    }
+
     public List<MetadataLinkInfo> getMetadataLinks() {
         return delegate.getMetadataLinks();
     }
Index: src/main/src/main/java/org/geoserver/catalog/CatalogBuilder.java
===================================================================
--- src/main/src/main/java/org/geoserver/catalog/CatalogBuilder.java	(revision 16592)
+++ src/main/src/main/java/org/geoserver/catalog/CatalogBuilder.java	(working copy)
@@ -5,8 +5,10 @@
 package org.geoserver.catalog;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
@@ -712,6 +714,13 @@
      * Initialize a coverage object and set any unset info.
      */
     public void initCoverage(CoverageInfo cinfo) throws Exception {
+        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());
@@ -722,14 +731,29 @@
             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) {
@@ -753,73 +777,13 @@
     		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.");
+        GridEnvelope originalRange = reader.getOriginalGridRange();
+        if (cinfo.getGrid() == null) {
+            cinfo.setGrid(new GridGeometry2D(originalRange, reader
+                    .getOriginalGridToWorld(PixelInCell.CELL_CENTER), nativeCRS));
         }
 
-        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);
-        }
-
-        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));
-
         // /////////////////////////////////////////////////////////////////////
         //
         // Now reading a fake small GridCoverage just to retrieve meta
@@ -873,80 +837,112 @@
         // 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() == null) {
+            cinfo.setDimensions(new ArrayList<CoverageDimensionInfo>());
+        }
+        if (cinfo.getDimensions().size() == 0) {
+            cinfo.getDimensions().addAll(getCoverageDimensions(gc.getSampleDimensions()));
+        }
+
         String name = gc.getName().toString();
-        cinfo.setName(name);
+        if (cinfo.getName() == null) {
+            cinfo.setName(name);
+        }
         cinfo.setNativeName(name);
-        cinfo.setTitle(name);
-        cinfo.setDescription(new StringBuilder("Generated from ").append(format.getName()).toString());
+        if (cinfo.getTitle() == null) {
+            cinfo.setTitle(name);
+            cinfo.setDescription(new StringBuilder("Generated from ").append(format.getName()).toString());
+        }
 
         // keywords
-        cinfo.getKeywords().add(new Keyword("WCS"));
-        cinfo.getKeywords().add(new Keyword(format.getName()));
-        cinfo.getKeywords().add(new Keyword(name));
+        if (cinfo.getKeywords() == null) {
+            cinfo.setKeywords(new ArrayList<KeywordInfo>());
+        }
+        if (cinfo.getKeywords().size() == 0) {
+            cinfo.getKeywords().add(new Keyword("WCS"));
+            cinfo.getKeywords().add(new Keyword(format.getName()));
+            cinfo.getKeywords().add(new Keyword(name));
+        }
 
         // native format name
         cinfo.setNativeFormat(format.getName());
-        cinfo.getMetadata().put("dirName", new StringBuilder(store.getName()).append("_").append(name).toString());
+        if (cinfo.getMetadata() == null) {
+            cinfo.setMetadata(new MetadataMap());
+        }
 
+        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() == null) {
+            cinfo.setRequestSRS(new ArrayList<String>());
         }
+        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() == null) {
+            cinfo.setResponseSRS(new ArrayList<String>());
         }
+        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 (cinfo.getSupportedFormats() == null) {
+            cinfo.setSupportedFormats(new ArrayList<String>());
+        }
 
-            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() == null) {
+            cinfo.setInterpolationMethods(new ArrayList<String>());
+        }
 
+        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 
         // coverage read)
+        if(cinfo.getParameters() == null) {
+            cinfo.setParameters(new HashMap<String, Serializable>());
+        }
         cinfo.getParameters().putAll(CoverageUtils.getParametersKVP(readParams));
 
         /// dispose coverage 
@@ -954,10 +950,57 @@
         if(gc.getRenderedImage() instanceof PlanarImage) {
             ImageUtilities.disposePlanarImageChain((PlanarImage) gc.getRenderedImage());
         }
+    }
 
-        return cinfo;
+    /**
+     * 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;
+     }
+
     List<CoverageDimensionInfo> getCoverageDimensions(GridSampleDimension[] sampleDimensions) {
 
         final int length = sampleDimensions.length;
Index: src/main/src/main/java/org/geoserver/catalog/ResourceInfo.java
===================================================================
--- src/main/src/main/java/org/geoserver/catalog/ResourceInfo.java	(revision 16592)
+++ src/main/src/main/java/org/geoserver/catalog/ResourceInfo.java	(working copy)
@@ -174,6 +174,12 @@
     List<KeywordInfo> getKeywords();
 
     /**
+     * Set the keywords for this resource.
+     * @param keywords
+     */
+    void setKeywords(List<KeywordInfo> keywords);
+
+    /**
      * List of keyword values, derived from {@link #getKeywords()}.
      */
     List<String> keywordValues();
@@ -315,6 +321,11 @@
     MetadataMap getMetadata();
 
     /**
+     * Set the metadata for the resource info.
+     */
+    void setMetadata(MetadataMap metadata);
+
+    /**
      * A flag indicating if the resource is enabled or not.
      * 
      * @uml.property name="enabled"
Index: src/main/src/main/java/org/geoserver/catalog/CoverageInfo.java
===================================================================
--- src/main/src/main/java/org/geoserver/catalog/CoverageInfo.java	(revision 16592)
+++ src/main/src/main/java/org/geoserver/catalog/CoverageInfo.java	(working copy)
@@ -53,6 +53,11 @@
     List<String> getSupportedFormats();
 
     /**
+     * Set the supported formats for the coverage.
+     */
+    void setSupportedFormats(List<String> supportedFormats);
+
+    /**
      * The collection of identifiers of the crs's the coverage supports in a
      * request.
      * 
@@ -61,6 +66,11 @@
     List<String> getRequestSRS();
 
     /**
+     * Set the request SRS.
+     */
+    void setRequestSRS(List<String> requestSRS);
+
+    /**
      * The collection of identifiers of the crs's the coverage supports in a
      * response.
      * 
@@ -69,6 +79,11 @@
     List<String> getResponseSRS();
 
     /**
+     * Set the response SRS.
+     */
+    void setResponseSRS(List<String> requestSRS);
+
+    /**
      * The default interpolation method for hte coverage.
      * 
      * @uml.property name="defaultInterpolationMethod"
@@ -90,6 +105,11 @@
     List<String> getInterpolationMethods();
 
     /**
+     * Set the interpolation methods available for the coverage.
+     */
+    void setInterpolationMethods(List<String> interpolationMethods);
+
+    /**
      * A map of coverage specific parameters.
      * 
      * @uml.property name="parameters"
@@ -97,6 +117,11 @@
     Map<String,Serializable> getParameters();
 
     /**
+     * Set parameters.
+     */
+    void setParameters(Map<String, Serializable> parameters);
+
+    /**
      * The dimensions of the coverage.
      * 
      * @uml.property name="dimensions"
@@ -106,6 +131,11 @@
     List<CoverageDimensionInfo> getDimensions();
 
     /**
+     * Sets the dimensions.
+     */
+    void setDimensions(List<CoverageDimensionInfo> dimensions);
+
+    /**
      * The grid geometry.
      */
     GridGeometry getGrid();
Index: src/restconfig/src/test/java/org/geoserver/catalog/rest/CoverageTest.java
===================================================================
--- src/restconfig/src/test/java/org/geoserver/catalog/rest/CoverageTest.java	(revision 16592)
+++ src/restconfig/src/test/java/org/geoserver/catalog/rest/CoverageTest.java	(working copy)
@@ -103,7 +103,7 @@
                 "<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 @@
                   "<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 @@
         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>"+

