diff --git a/src/mra.py b/src/mra.py
index fab07cad365d128732224c98e052fe1cb172c166..1eb99ff0eda2dc84700754c5fce7dda6775b859f 100644
--- a/src/mra.py
+++ b/src/mra.py
@@ -545,9 +545,6 @@ class FeatureTypeModel(LayerModel):
                 self.ms.data += ' USING UNIQUE %s' % ft.get_fid_column()
             if ft.get_authority_code() is not None:
                 self.ms.data += ' USING SRID=%s' % ft.get_authority_code()
-            # 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()))
         # elif cpram["dbtype"] in ["shp", "shapefile"]:
         # TODO: clean up this fallback.
         else:
@@ -592,20 +589,29 @@ class FeatureTypeModel(LayerModel):
         # Configure the different fields.
         field_names = []
         for field in ft.iterfields():
+            field_name = field.get_name()
+            field_names.append(field_name)
             layer.set_metadatas({
-                "ows_name": layer_name,
-                "ows_title": layer.get_metadata("ows_title", None) or layer_name,
-                "ows_abstract": layer.get_metadata("ows_abstract", None) or layer_name,
-                "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
+                "gml_%s_alias" % field_name: field_name,
+                "gml_%s_type" % field_name: field.get_type_gml(),
+                # "gml_%s_precision" % field_name
+                # "gml_%s_width" % field_name
                 })
-            field_names.append(field.get_name())
 
         geometry_column = ft.get_geometry_column()
         if geometry_column is None:
             geometry_column = "geometry"
+
         layer.set_metadatas({
+            "ows_name": layer_name,
+            "ows_title": layer.get_metadata("ows_title", None) or layer_name,
+            "ows_abstract": layer.get_metadata("ows_abstract", None) or layer_name,
+            "ows_extent": "%s %s %s %s" % (
+                self.ms.extent.minx,
+                self.ms.extent.miny,
+                self.ms.extent.maxx,
+                self.ms.extent.maxy,
+                ),
             "ows_include_items": ",".join(field_names),
             "gml_include_items": ",".join(field_names),
             "gml_geometries": geometry_column,
@@ -719,6 +725,12 @@ class CoverageModel(LayerModel):
             "ows_name": layer_name,
             "ows_title": layer.get_metadata("ows_title", None) or layer_name,
             "ows_abstract": layer.get_metadata("ows_abstract", None) or layer_name,
+            "ows_extent": "%s %s %s %s" % (
+                self.ms.extent.minx,
+                self.ms.extent.miny,
+                self.ms.extent.maxx,
+                self.ms.extent.maxy,
+                ),
             "wcs_name": layer.get_metadata("wcs_name", None) or layer_name,
             "wcs_label": layer.get_metadata("wcs_label", None) or layer_name,
             "wcs_description": layer.get_metadata("wcs_description", None) or layer_name
@@ -985,7 +997,7 @@ class MRA(object):
         try:
             self.config = yaml.load(
                 open(config_path, "r"),
-                # Loader=yaml.FullLoader  # Deprecated
+                # Loader=yaml.FullLoader
                 )
         except yaml.YAMLError as e:
             exit("Error in configuration file: %s" % e)
diff --git a/src/server.py b/src/server.py
index 80ac871f60ad3581251450a2dcdfb5ea2ea1aa55..8aef27fa952d5671d85c9912ea4007b4cf8155bc 100755
--- a/src/server.py
+++ b/src/server.py
@@ -1114,13 +1114,6 @@ class layer(object):
         layer.enable(l_enabled)
         wslayer.enable(l_enabled)
 
-        for k in data:
-            if k in ("title", "abstract"):
-                layer.set_metadata("ows_%s" % k, data.get(k))
-                wslayer.set_metadata("ows_%s" % k, data.get(k))
-
-        # update resource if changed
-        href = data.get("resource", {}).get("href")
         if href:
             try:
                 ws_name, st_type, st_name, r_type, r_name = mra.href_parse(href, 5)
@@ -1128,25 +1121,38 @@ class layer(object):
                 raise webapp.NotFound(message="resource \"%s\" was not found." % href)
 
             st_type, r_type = st_type[:-1], r_type[:-1]  # Remove trailing s.
+        else:
+            ws_name = layer.get_mra_metadata("workspace")
+            r_type, st_type = {
+                "featuretype": ("featuretype", "datastore"),
+                "coverage": ("coverage", "coveragestore")
+                }[layer.get_mra_metadata("type")]
+            r_name = layer.get_mra_metadata("name")
 
-            ws = get_workspace(ws_name)
-            with webapp.mightNotFound(r_type, workspace=ws_name):
-                try:
-                    model = ws.get_layermodel(r_type, st_name, r_name)
-                except ValueError:
-                    raise KeyError(r_type)
-
-            if layer.get_mra_metadata("type") != r_type:
-                raise webapp.BadRequest(
-                    "Can't change a \"%s\" layer into a \"%s\"."
-                    % (layer.get_mra_metadata("type"), r_type))
-            if wslayer.get_mra_metadata("type") != r_type:
-                raise webapp.BadRequest(
-                    "Can't change a \"%s\" layer into a \"%s\"."
-                    % (wslayer.get_mra_metadata("type"), r_type))
-
-            model.configure_layer(layer, l_enabled)
-            model.configure_layer(wslayer, l_enabled)
+        ws = get_workspace(ws_name)
+        with webapp.mightNotFound(r_type, workspace=ws_name):
+            try:
+                model = ws.get_layermodel(r_type, st_name, r_name)
+            except ValueError:
+                raise KeyError(r_type)
+
+        if layer.get_mra_metadata("type") != r_type:
+            raise webapp.BadRequest(
+                "Can't change a \"%s\" layer into a \"%s\"."
+                % (layer.get_mra_metadata("type"), r_type))
+        if wslayer.get_mra_metadata("type") != r_type:
+            raise webapp.BadRequest(
+                "Can't change a \"%s\" layer into a \"%s\"."
+                % (wslayer.get_mra_metadata("type"), r_type))
+
+        model.configure_layer(layer, l_enabled)
+        model.configure_layer(wslayer, l_enabled)
+
+        # Change some value
+        for k in data:
+            if k in ("title", "abstract"):
+                layer.set_metadata("ows_%s" % k, data.get(k))
+                wslayer.set_metadata("ows_%s" % k, data.get(k))
 
         # If we have a defaultStyle apply it.
         s_name = data.get("defaultStyle", {}).get("name")