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,18 +5,15 @@
 package org.geoserver.catalog;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.io.Serializable;
+import java.util.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.measure.unit.Unit;
 import javax.media.jai.PlanarImage;
 
+import org.geoserver.catalog.impl.CoverageInfoImpl;
 import org.geoserver.catalog.impl.ModificationProxy;
 import org.geoserver.catalog.impl.ResourceInfoImpl;
 import org.geoserver.catalog.impl.StoreInfoImpl;
@@ -873,81 +870,111 @@
         // 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) {
+            ((CoverageInfoImpl) 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) {
+            ((CoverageInfoImpl) 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) {
+            ((CoverageInfoImpl) 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) {
+            ((CoverageInfoImpl) 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) {
+            ((CoverageInfoImpl) 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) {
+            ((CoverageInfoImpl) cinfo).setSupportedFormats(new ArrayList<String>());
+        }
+        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);
+                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) {
+            ((CoverageInfoImpl) cinfo).setInterpolationMethods(new ArrayList<String>());
+        }
 
+        if (cinfo.getInterpolationMethods().size() == 0) {
+            cinfo.setDefaultInterpolationMethod("nearest neighbor");
+            cinfo.getInterpolationMethods().add("nearest neighbor");
+            cinfo.getInterpolationMethods().add("bilinear");
+            cinfo.getInterpolationMethods().add("bicubic");
+        }
+
         // read parameters (get the params again since we altered the map to optimize the 
         // coverage read)
-        cinfo.getParameters().putAll(CoverageUtils.getParametersKVP(readParams));
+        if(cinfo.getParameters() == null) {
+            ((CoverageInfoImpl) cinfo).setParameters(new HashMap<String, Serializable>());
+        }
+        if (cinfo.getParameters().size() == 0)
+        {
+            cinfo.getParameters().putAll(CoverageUtils.getParametersKVP(readParams));
+        }
 
         /// dispose coverage 
         gc.dispose(true);

