diff --git a/src/mapfile.py b/src/mapfile.py
index ac5314bcbf9a53d190ec6c09728eae9dae0113a9..08a432d7aa8cb5b15141d08ec7229096e9d3852a 100644
--- a/src/mapfile.py
+++ b/src/mapfile.py
@@ -291,6 +291,16 @@ class LayerModel(MetadataMixin):
         self.configure_layer(layer, ws)
         return layer
 
+    def get_extent(self):
+        extent = self.ms.getExtent()
+        return stores.Extent(extent.minx, extent.miny, extent.maxx, extent.maxy)
+
+    def get_latlon_extent(self):
+        rect = mapscript.rectObj(*self.get_extent())
+        res = rect.project(mapscript.projectionObj(self.ms.getProjection()),
+                           mapscript.projectionObj('+init=epsg:4326'))
+        return stores.Extent(rect.minx, rect.miny, rect.maxx, rect.maxy)
+
 
 class FeatureTypeModel(LayerModel):
     """
@@ -318,7 +328,7 @@ class FeatureTypeModel(LayerModel):
             self.ms.connection = "dbname=%s port=%s host=%s user=%s password=%s" % (
                 cparam["database"], cparam["port"], cparam["host"], cparam["user"], cparam["password"])
             self.ms.data = "%s FROM %s" % (ds[ft_name].get_geometry_column(), ft_name)
-            self.set_metadata("wms_extent", "%s %s %s %s" % 
+            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())
                 )
@@ -359,7 +369,6 @@ class FeatureTypeModel(LayerModel):
         layer.ms.setMetaData("wfs_getfeature_formatlist", "OGRGML,SHAPEZIP")
         layer.ms.setMetaData("gml_types", "auto")
 
-        # TODO: layer.ms.setMetaData("wfs_extent", "")
         # TODO: layer.ms.setMetaData("wfs_metadataurl_format", "")
         # TODO: layer.ms.setMetaData("wfs_metadataurl_href", "")
         # TODO: layer.ms.setMetaData("wfs_metadataurl_type", "")
@@ -453,7 +462,6 @@ class CoverageModel(LayerModel):
             layer.ms.setMetaData("wcs_enable_request", "GetCapabilities GetCoverage DescribeCoverage")
 
         # TODO: layer.set_metadata("wcs_srs", "")
-        # TODO: layer.set_metadata("wcs_extent", "")
         # TODO: layer.set_metadata("wcs_getfeature_formatlist", "")
         # TODO: layer.set_metadata("wcs_metadataurl_format", "")
         # TODO: layer.set_metadata("wcs_metadataurl_href", "")
diff --git a/src/server.py b/src/server.py
index 787da9be5a707621a481ecbeb920d0d4e59ebccf..6b052199b70f67e6c4fa71e661c85d007a39c399 100755
--- a/src/server.py
+++ b/src/server.py
@@ -224,15 +224,16 @@ class featuretype(object):
     @HTTPCompatible()
     def GET(self, map_name, ws_name, ds_name, ft_name, format):
         mf, ws = get_mapfile_workspace(map_name, ws_name)
-        with webapp.mightNotFound("featureType", datastore=ds_name):
-            ft = ws.get_featuretypemodel(ft_name, ds_name)
 
         ds = ws.get_datastore(ds_name)
         with webapp.mightNotFound("dataStore", datastore=ds_name):
             dsft = ds[ft_name]
 
-        extent = dsft.get_extent()
-        latlon_extent = dsft.get_latlon_extent()
+        with webapp.mightNotFound("featureType", datastore=ds_name):
+            ft = ws.get_featuretypemodel(ft_name, ds_name)
+
+        extent = ft.get_extent()
+        latlon_extent = ft.get_latlon_extent()
 
         return {"featureType": ({
                     "name": ft.name,
@@ -399,7 +400,7 @@ class coverage(object):
         with webapp.mightNotFound("coveragestore", workspace=ws_name):
             cs = ws.get_coveragestore(cs_name)
 
-        extent = cs.get_extent()
+        extent = c.get_extent()
         latlon_extent = cs.get_latlon_extent()
 
         return {"coverage": ({