diff --git a/src/mapfile.py b/src/mapfile.py
index 7da06a6a05d3d8da1f4c2b5442cba1f40831f4f9..edd15d8c0badde4fae50352e17a8017c842c5079 100644
--- a/src/mapfile.py
+++ b/src/mapfile.py
@@ -80,7 +80,8 @@ class Layer(MetadataMixin):
 
     def enable(self, enabled=True):
         requests = ["GetCapabilities", "GetMap", "GetFeatureInfo", "GetLegendGraphic"]
-        self.ms.setMetaData("wms_enable_request",  " ".join(('%s' if enabled else "!%s") % c for c in requests))
+        self.ms.status = mapscript.MS_ON if enabled else mapscript.MS_OFF
+        self.set_metadata("wms_enable_request",  " ".join(('%s' if enabled else "!%s") % c for c in requests))
 
     def get_type_name(self):
         return {
@@ -296,8 +297,7 @@ class FeatureTypeModel(LayerModel):
             self.ms.data = "%s FROM %s" % (ds[ft_name].get_geometry_column(), ft_name)
             self.set_metadata("ows_extent", "%s %s %s %s" %
                 (ft.get_extent().minX(), ft.get_extent().minY(),
-                ft.get_extent().maxX(), ft.get_extent().maxY())
-                )
+                ft.get_extent().maxX(), ft.get_extent().maxY()))
         #elif cpram["dbtype"] in ["shp", "shapefile"]:
         else:
             self.ms.connectiontype = mapscript.MS_SHAPEFILE
@@ -309,8 +309,10 @@ class FeatureTypeModel(LayerModel):
         #    raise ValueError("Unhandled type '%s'" % info["dbtype"])
 
         # Deactivate wms and wfs requests, because we are a virtual layer.
-        self.set_metadata("wms_enable_request", "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic")
-        self.set_metadata("wfs_enable_request", "!GetCapabilities !DescribeFeatureType !GetFeature")
+        self.set_metadatas({
+            "wms_enable_request": "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic",
+            "wfs_enable_request": "!GetCapabilities !DescribeFeatureType !GetFeature",
+            })
 
         # Update mra metadatas, and make sure the mandatory ones are left untouched.
         self.update_mra_metadatas(metadata)
@@ -347,16 +349,7 @@ class FeatureTypeModel(LayerModel):
                 })
 
         if enabled:
-            layer.ms.setMetaData("wfs_enable_request", "GetCapabilities GetFeature DescribeFeatureType")
-
-        layer.set_metadata("wfs_srs", "EPSG:4326")
-        layer.ms.setMetaData("wfs_getfeature_formatlist", "OGRGML,SHAPEZIP")
-        layer.ms.setMetaData("gml_types", "auto")
-
-        # TODO: layer.ms.setMetaData("wfs_metadataurl_format", "")
-        # TODO: layer.ms.setMetaData("wfs_metadataurl_href", "")
-        # TODO: layer.ms.setMetaData("wfs_metadataurl_type", "")
-        # TODO: layer.ms.setMetaData("gml_xml_items", "")
+            layer.set_metadata("wfs_enable_request", "GetCapabilities GetFeature DescribeFeatureType")
 
         # Configure the layer based on information from the store.
         ds = ws.get_datastore(self.get_mra_metadata("storage"))
@@ -365,29 +358,24 @@ class FeatureTypeModel(LayerModel):
         # Configure the different fields.
         field_names = []
         for field in ft.iterfields():
-            layer.set_metadata("gml_%s_alias" % field.get_name(), field.get_name())
-            layer.set_metadata("gml_%s_type" % field.get_name(), field.get_type_gml())
-            #TODO: layer.set_metadata("gml_%s_precision" field.get_name(), "")
-            #TODO: layer.set_metadata("gml_%s_width" field.get_name(), "")
-            #TODO: layer.set_metadata("gml_%s_value" field.get_name(), "")
+            layer.set_metadatas({
+                "gml_%s_alias" % field.get_name(): field.get_name(),
+                "gml_%s_type" % field.get_name(): field.get_type_gml(),
+                # TODO: Add gml_<field name>_precision, gml_<field name>_width
+                })
             field_names.append(field.get_name())
-        layer.set_metadata("wfs_include_items", ",".join(field_names))
-        layer.set_metadata("gml_include_items", ",".join(field_names))
 
-        layer.set_metadata("wfs_featureid", ft.get_fid_column())
-        layer.set_metadata("gml_featureid", ft.get_fid_column())
-        layer.set_metadata("gml_geometries", ft.get_geometry_column())
-        layer.set_metadata("gml_%s_type" % ft.get_geometry_column(), ft.get_geomtype_gml())
-        # TODO: layer.set_metadata("gml_%s_occurances" ft.get_geometry_column(), "")
-
-        # TODO: Check if class already exists.
-        # If no class exists we add a new class by default
-#        if layer.ms.type == mapscript.MS_LAYER_POINT:
-#            maptools.create_def_point_class(layer.ms)
-#        elif layer.ms.type == mapscript.MS_LAYER_LINE:
-#            maptools.create_def_line_class(layer.ms)
-#        elif layer.ms.type == mapscript.MS_LAYER_POLYGON:
-#            maptools.create_def_polygon_class(layer.ms)
+        layer.set_metadatas({
+            "wfs_include_items": ",".join(field_names),
+            "gml_include_items": ",".join(field_names),
+            "wfs_featureid": ft.get_fid_column(),
+            "gml_featureid": ft.get_fid_column(),
+            "gml_geometries": ft.get_geometry_column(),
+            "gml_%s_type" % ft.get_geometry_column(): ft.get_geomtype_gml(),
+            # TODO: Add gml_<geometry name>_occurances,
+            "wfs_srs": "EPSG:4326",
+            "wfs_getfeature_formatlist": "OGRGML,SHAPEZIP",
+            })
 
         plugins.extend("post_configure_vector_layer", self, ws, ds, ft, layer)
 
@@ -423,8 +411,10 @@ class CoverageModel(LayerModel):
         #    raise ValueError("Unhandled type '%s'" % cparam["dbtype"])
 
         # Deactivate wms and wcs requests, because we are a virtual layer.
-        self.set_metadata("wms_enable_request", "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic")
-        self.set_metadata("wcs_enable_request", "!GetCapabilities !DescribeCoverage !GetCoverage")
+        self.set_metadatas({
+            "wms_enable_request": "!GetCapabilities !GetMap !GetFeatureInfo !GetLegendGraphic",
+            "wcs_enable_request": "!GetCapabilities !DescribeCoverage !GetCoverage",
+            })
 
         # Update mra metadatas, and make sure the mandatory ones are left untouched.
         self.update_mra_metadatas(metadata)
@@ -459,24 +449,17 @@ class CoverageModel(LayerModel):
                 "wfs_name": layer.get_metadata("wms_name"),
                 "wfs_title": layer.get_metadata("wms_title"),
                 "wfs_abstract": layer.get_metadata("wms_abstract"),
-                #"wfs_keywordlist": layer.get_metadata("wms_keywordlist"),
+                # TODO: wfs_keywordlist, wcs_srs, wcs_getfeature_formatlist...
                 })
 
         if enabled:
-            layer.ms.setMetaData("wcs_enable_request", "GetCapabilities GetCoverage DescribeCoverage")
-
-        # TODO: layer.set_metadata("wcs_srs", "")
-        # TODO: layer.set_metadata("wcs_getfeature_formatlist", "")
-        # TODO: layer.set_metadata("wcs_metadataurl_format", "")
-        # TODO: layer.set_metadata("wcs_metadataurl_href", "")
-        # TODO: layer.set_metadata("wcs_metadataurl_type", "")
-        # ...
+            layer.set_metadata("wcs_enable_request", "GetCapabilities GetCoverage DescribeCoverage")
 
         plugins.extend("post_configure_raster_layer", self, ws, layer)
 
 
-
 class Workspace(object):
+    # TODO
     pass
 
 class MapfileWorkspace(Workspace):
@@ -537,7 +520,6 @@ class MapfileWorkspace(Workspace):
         with self.mapfile.mra_metadata(st_type, {}) as stores:
             del stores[name]
 
-
     # Datastores:
 
     def get_datastore(self, name):
@@ -647,7 +629,6 @@ class MapfileWorkspace(Workspace):
         ft = self.get_featuretypemodel(ft_name, ds_name)
         self.mapfile.ms.removeLayer(ft.ms.index)
 
-
     # Coverages
 
     def iter_coveragemodels(self, cs_name=None, **kwargs):
@@ -796,7 +777,6 @@ class Mapfile(MetadataMixin):
         # but everything should be configured() anyway.
         layer = Layer(model.ms.clone())
         layer.ms.name = l_name
-        layer.ms.status = mapscript.MS_ON
         layer.ms.dump = mapscript.MS_TRUE
         layer.ms.tolerance = 6
         layer.ms.toleranceunits = mapscript.MS_PIXELS
@@ -820,19 +800,19 @@ class Mapfile(MetadataMixin):
         # "wms_getmap_formatlist"
         # "wms_getfeatureinfo_formatlist"
         # "wms_getlegendgraphic_formatlist"
-        # "wms_attribution_title"
-        # "wms_attribution_onlineresource": ""
-        # "wms_attribution_logourl_href"
-        # "wms_attribution_logourl_format"
-        # "wms_attribution_logourl_height"
-        # "wms_attribution_logourl_width"
-        # "wms_identifier_authority"
-        # "wms_identifier_value"
-        # "wms_authorityurl_name"
-        # "wms_authorityurl_href"
-        # "wms_metadataurl_type"
-        # "wms_metadataurl_href"
-        # "wms_metadataurl_format"
+        # "ows_attribution_title"
+        # "ows_attribution_onlineresource": ""
+        # "ows_attribution_logourl_href"
+        # "ows_attribution_logourl_format"
+        # "ows_attribution_logourl_height"
+        # "ows_attribution_logourl_width"
+        # "ows_identifier_authority"
+        # "ows_identifier_value"
+        # "ows_authorityurl_name"
+        # "ows_authorityurl_href"
+        # "ows_metadataurl_type"
+        # "ows_metadataurl_href"
+        # "ows_metadataurl_format"
 
         # TODO: pass correct data (title, abstract, ...) to layer.update()
         layer.update(l_metadata)
@@ -993,7 +973,6 @@ class Mapfile(MetadataMixin):
         # This is a ugly hack. We clone the layer and remove all the other styles.
         # Then we ask mapscript to generate the sld, but aprently for that the
         # cloned style needs to be in the mapfile... so be it.
-
         clone = layer.ms.clone()
         for c_index in reversed(xrange(clone.numclasses)):
             c = clone.getClass(c_index)
diff --git a/src/metadata.py b/src/metadata.py
index 398073806cfa5a1af6e01637b4c4b1347d8b7370..5baaa62a437b71c8f4904a25b50f947f18706cff 100644
--- a/src/metadata.py
+++ b/src/metadata.py
@@ -77,7 +77,6 @@ def set_metadatas(obj, metadatas):
         set_metadata(obj, key, value)
 
 def update_metadatas(obj, metadatas):
-    print metadatas
     for key, value in metadatas.iteritems():
         set_metadata(obj, key, value)
 
diff --git a/src/server.py b/src/server.py
index b19bc890822dd7b31a0212738fd022d8604fbbf1..de4ff1cdb7c16d1a7ff8580a78ff6af3725e5d31 100755
--- a/src/server.py
+++ b/src/server.py
@@ -171,7 +171,7 @@ class datastores(object):
     def POST(self, map_name, ws_name, format):
         mf, ws = get_mapfile_workspace(map_name, ws_name)
 
-        data = get_data(name="dataStore", mandatory=["name"], authorized=["name", "title", "abstract"])
+        data = get_data(name="dataStore", mandatory=["name"], authorized=["name", "title", "abstract", "connectionParameters"])
         ds_name = data.pop("name")
 
         with webapp.mightConflict("dataStore", workspace=ws_name):
@@ -199,7 +199,7 @@ class datastore(object):
     def PUT(self, map_name, ws_name, ds_name, format):
         mf, ws = get_mapfile_workspace(map_name, ws_name)
 
-        data = get_data(name="dataStore", mandatory=["name"], authorized=["name", "title", "abstract"])
+        data = get_data(name="dataStore", mandatory=["name"], authorized=["name", "title", "abstract", "connectionParameters"])
         if ds_name != data.pop("name"):
             raise webapp.Forbidden("Can't change the name of a data store.")
 
@@ -346,7 +346,7 @@ class coveragestores(object):
     def POST(self, map_name, ws_name, format):
         mf, ws = get_mapfile_workspace(map_name, ws_name)
 
-        data = get_data(name="coverageStore", mandatory=["name"], authorized=["name", "title", "abstract"])
+        data = get_data(name="coverageStore", mandatory=["name"], authorized=["name", "title", "abstract", "connectionParameters"])
         cs_name = data.pop("name")
 
         with webapp.mightConflict("coverageStore", workspace=ws_name):
@@ -373,7 +373,7 @@ class coveragestore(object):
     def PUT(self, map_name, ws_name, cs_name, format):
         mf, ws = get_mapfile_workspace(map_name, ws_name)
 
-        data = get_data(name="coverageStore", mandatory=["name"], authorized=["name", "title", "abstract"])
+        data = get_data(name="coverageStore", mandatory=["name"], authorized=["name", "title", "abstract", "connectionParameters"])
         if cs_name != data.pop("name"):
             raise webapp.Forbidden("Can't change the name of a coverage store.")
 
@@ -672,8 +672,9 @@ class layers(object):
 
     @HTTPCompatible()
     def POST(self, map_name, format):
-        data = get_data(name="layer", mandatory=["name", "resource"],
-                        authorized=["name", "title", "abstract", "resource"])
+        data = get_data(name="layer",
+                        mandatory=["name", "resource"],
+                        authorized=["name", "title", "abstract", "resource", "enabled"])
 
         l_name = data.pop("name")
         l_enabled = data.pop("enabled", True)
@@ -747,7 +748,7 @@ class layer(object):
         mf = get_mapfile(map_name)
 
         data = get_data(name="layer", mandatory=["name", "resource"],
-                        authorized=["name", "title", "abstract", "resource"])
+                        authorized=["name", "title", "abstract", "resource", "enabled"])
         if l_name != data.pop("name"):
             raise webapp.Forbidden("Can't change the name of a layer.")