diff --git a/src/mapfile.py b/src/mapfile.py
index 08a432d7aa8cb5b15141d08ec7229096e9d3852a..3e4f8932abf3a83986cc6fe3114b9d3296a59712 100644
--- a/src/mapfile.py
+++ b/src/mapfile.py
@@ -301,6 +301,15 @@ class LayerModel(MetadataMixin):
                            mapscript.projectionObj('+init=epsg:4326'))
         return stores.Extent(rect.minx, rect.miny, rect.maxx, rect.maxy)
 
+    def get_proj4(self):
+        return self.ms.getProjection()
+
+    def get_wkt(self):
+        return tools.proj4_to_wkt(self.ms.getProjection())
+
+    def get_authority(self):
+        return tools.wkt_to_authority(self.get_wkt())
+
 
 class FeatureTypeModel(LayerModel):
     """
diff --git a/src/server.py b/src/server.py
index c04661a46f79f8fdfac8895010d44d9a431f27bf..be652bc78c6557367e57aa2d687d09999e262b35 100755
--- a/src/server.py
+++ b/src/server.py
@@ -250,8 +250,8 @@ class featuretype(object):
                     "title": ft.get_mra_metadata("title", ft.name),
                     "abstract": ft.get_mra_metadata("abstract", None),
                     "keywords": ft.get_mra_metadata("keywords", []),
-                    "srs": dsft.get_projection(),
-                    "nativeCRS": dsft.get_native(),
+                    "srs": "%s:%s" % (ft.get_authority()[0], ft.get_authority()[1]),
+                    "nativeCRS": ft.get_wkt(),
                     "attributes": [{
                             "name": f.get_name(),
                             "minOccurs": 0 if f.is_nullable() else 1,
@@ -405,14 +405,15 @@ class coverage(object):
     @HTTPCompatible()
     def GET(self, map_name, ws_name, cs_name, c_name, format):
         mf, ws = get_mapfile_workspace(map_name, ws_name)
+
+        # with webapp.mightNotFound("coveragestore", workspace=ws_name):
+        #     cs = ws.get_coveragestore(cs_name)
+
         with webapp.mightNotFound("coverage", coveragestore=cs_name):
             c = ws.get_coveragemodel(c_name, cs_name)
 
-        with webapp.mightNotFound("coveragestore", workspace=ws_name):
-            cs = ws.get_coveragestore(cs_name)
-
         extent = c.get_extent()
-        latlon_extent = cs.get_latlon_extent()
+        latlon_extent = c.get_latlon_extent()
 
         return {"coverage": ({
                     "name": c.name,
@@ -424,7 +425,8 @@ class coverage(object):
                     "title": c.get_mra_metadata("title", c.name),
                     "abstract": c.get_mra_metadata("abstract", None),
                     "keywords": c.get_mra_metadata("keywords", []),
-                    "srs": cs.get_projection(),
+                    "srs": "%s:%s" % (c.get_authority()[0], c.get_authority()[1]),
+                    "nativeCRS": c.get_wkt(),
                     "nativeBoundingBox": {
                         "minx": extent.minX(),
                         "miny": extent.minY(),
diff --git a/src/stores.py b/src/stores.py
index 0000b7e163f48f5116ef9b4613aca460b68bc697..d96efea7a69fffaea41697dc8ef0713dfc6d28b9 100644
--- a/src/stores.py
+++ b/src/stores.py
@@ -404,9 +404,7 @@ class Coveragestore(object):
         return self.backend.GetProjection()
 
     def get_proj4(self):
-        proj = osr.SpatialReference()
-        proj.ImportFromWkt(self.get_projection())
-        return proj.ExportToProj4()
+        return tools.wkt_to_proj4(self.get_projection())
 
     def nbbands(self):
         return self.backend.RasterCount
diff --git a/src/tools.py b/src/tools.py
index 6e486cb4ebc4e929cbb2ad902ee0181e58d5c4d0..567f5e0e30e84e11c192e51a72c0359e1dcec741 100644
--- a/src/tools.py
+++ b/src/tools.py
@@ -34,6 +34,7 @@ import pyxml
 import webapp
 
 import xml.etree.ElementTree as etree
+from osgeo import osr
 
 __config = None
 
@@ -156,4 +157,26 @@ def is_hidden(path):
     # MacOSX has at least four ways to hide files...
     return os.path.basename(path).startswith(".")
 
+def wkt_to_proj4(wkt):
+    srs = osr.SpatialReference()
+    srs.ImportFromWkt(wkt)
+    return srs.ExportToProj4()
+
+def proj4_to_wkt(proj4):
+    srs = osr.SpatialReference()
+    srs.ImportFromProj4(proj4)
+    return srs.ExportToWkt()
+
+def wkt_to_authority(wkt):
+    srs = osr.SpatialReference()
+    srs.ImportFromWkt(wkt)
+    
+    # Are there really no other with osgeo? Oo
+    
+    if srs.GetAuthorityCode('PROJCS') == None and srs.GetAuthorityCode('GEOGCS') != None :
+        return srs.GetAuthorityName('GEOGCS'), srs.GetAuthorityCode('GEOGCS')
+    if srs.GetAuthorityCode('PROJCS') != None:
+        return srs.GetAuthorityName('PROJCS'), srs.GetAuthorityCode('PROJCS')
+    else:
+        raise KeyError("Unable to get authority from %s" % wkt)