Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.lib.impl/src/main/java/org/gvsig/geotools/proj/lib/DefaultTransformation.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.lib.impl/src/main/java/org/gvsig/geotools/proj/lib/DefaultTransformation.java	(revision 852)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.lib.impl/src/main/java/org/gvsig/geotools/proj/lib/DefaultTransformation.java	(revision 853)
@@ -17,7 +17,7 @@
 import org.gvsig.proj.catalog.exception.NoninvertibleTransformException;
 import org.gvsig.proj.catalog.exception.TransformationException;
 import org.gvsig.proj.catalog.exception.UnsupportedCoordinateReferenceSystemException;
-import org.gvsig.proj.catalog.ref.Extent;
+import org.gvsig.proj.catalog.extent.Extent;
 import org.opengis.referencing.ReferenceIdentifier;
 import org.opengis.referencing.operation.CoordinateOperation;
 import org.opengis.referencing.operation.MathTransform;
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/test/java/org/gvsig/geotools/proj/catalog/test/TestWKTUtils.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/test/java/org/gvsig/geotools/proj/catalog/test/TestWKTUtils.java	(revision 0)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/test/java/org/gvsig/geotools/proj/catalog/test/TestWKTUtils.java	(revision 853)
@@ -0,0 +1,83 @@
+package org.gvsig.geotools.proj.catalog.test;
+
+import static org.junit.Assert.*;
+
+import org.gvsig.geotools.proj.catalog.utils.WKTUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestWKTUtils {
+
+	@Before
+	public void setUp() throws Exception {
+	}
+
+	@After
+	public void tearDown() throws Exception {
+	}
+	
+	private String[] wktDefs = new String[] {
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y\",NORTH],AXIS[\"X\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y J\",NORTH],AXIS[\"X\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y J\\\\\",NORTH],AXIS[\"X\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y J\\\\\\\\\\\"\",NORTH],AXIS[\"X\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AXIS[\"X\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AXIS[\"\\\"Xjk \\\"\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AXIS[\"\\\"Xjk \\\"\",EAST],AXIS[\"\\\"Xjk \\\"\",UP],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AXIS[\"\\\"Xjk \\\"\",UP],AXIS[\"\\\"Xjk \\\"\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / AXIS[\\\"Y\\\",NORTH] LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Y\",NORTH],AXIS[\"X\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+	};
+	
+	
+	private String[] wktAxisRemovedDefs = new String[] {
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / AXIS[\\\"Y\\\",NORTH] LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]"
+	} ;
+	
+	private String[] wktSwappedAxisOrderDefs = new String[] {
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y J\",NORTH],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y J\\\\\",NORTH],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y J\\\\\\\\\\\"\",NORTH],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"\\\"Xjk \\\"\",EAST],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"\\\"Xjk \\\"\",EAST],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AXIS[\"\\\"Xjk \\\"\",UP],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"\\\"Xjk \\\"\",UP],AXIS[\"Y J\\\\\\\\\\\" a b c\",NORTH],AXIS[\"\\\"Xjk \\\"\",EAST],AUTHORITY[\"EPSG\",\"3035\"]]",
+			"PROJCS[\"ETRS89 / AXIS[\\\"Y\\\",NORTH] LAEA Europe\",GEOGCS[\"ETRS89\",DATUM[\"European_Terrestrial_Reference_System_1989\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4258\"]], PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],PARAMETER[\"latitude_of_center\",52],PARAMETER[\"longitude_of_center\",10],PARAMETER[\"false_easting\",4321000],PARAMETER[\"false_northing\",3210000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"3035\"]]"
+	} ;
+
+	@Test
+	public void testRemoveAxis() {
+		for (int i=0; i<wktDefs.length; i++) {
+			doTestRemoveAxis(wktDefs[i], wktAxisRemovedDefs[i]);
+		}
+	}
+	
+	@Test
+	public void testAxisOrderSwapping() {
+		System.out.println("swap axis");
+		for (int i=0; i<wktDefs.length; i++) {
+			dotestAxisOrderSwapping(wktDefs[i], wktSwappedAxisOrderDefs[i]);
+		}
+	}
+	
+	public void doTestRemoveAxis(String wktDef, String expectedWktDef) {
+		assertEquals("TestRemoveAxis", WKTUtils.removeAxisDefinition(wktDef), expectedWktDef);	
+	}
+	
+	public void dotestAxisOrderSwapping(String wktDef, String expectedWktDef) {
+		assertEquals("TestRemoveAxis", WKTUtils.swapAxisOrder(wktDef), expectedWktDef);
+	}
+
+}
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/DefaultTransformationDefinition.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/DefaultTransformationDefinition.java	(revision 852)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/DefaultTransformationDefinition.java	(revision 853)
@@ -18,7 +18,7 @@
 import org.gvsig.proj.catalog.exception.TransformationException;
 import org.gvsig.proj.catalog.exception.UnsupportedFormatException;
 import org.gvsig.proj.catalog.exception.UnsupportedTransformationException;
-import org.gvsig.proj.catalog.ref.Extent;
+import org.gvsig.proj.catalog.extent.Extent;
 import org.opengis.referencing.ReferenceIdentifier;
 import org.opengis.referencing.operation.ConcatenatedOperation;
 import org.opengis.referencing.operation.CoordinateOperation;
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/DefaultCRSDefinition.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/DefaultCRSDefinition.java	(revision 852)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/DefaultCRSDefinition.java	(revision 853)
@@ -10,6 +10,9 @@
 import org.geotools.referencing.wkt.Formatter;
 import org.geotools.referencing.wkt.Symbols;
 import org.gvsig.geotools.proj.catalog.datum.DefaultDatum;
+import org.gvsig.geotools.proj.catalog.extent.DefaultExtent;
+import org.gvsig.geotools.proj.catalog.extent.DefaultGeographicBoundingBox;
+import org.gvsig.geotools.proj.catalog.extent.DefaultVerticalExtent;
 import org.gvsig.geotools.proj.catalog.utils.IdentifiedObjectUtils;
 import org.gvsig.proj.catalog.CRSDefinition;
 import org.gvsig.proj.catalog.CRSType;
@@ -21,7 +24,9 @@
 import org.gvsig.proj.catalog.datum.Datum;
 import org.gvsig.proj.catalog.exception.CoordinateReferenceSystemException;
 import org.gvsig.proj.catalog.exception.UnsupportedCoordinateReferenceSystemException;
-import org.gvsig.proj.catalog.ref.Extent;
+import org.gvsig.proj.catalog.extent.Extent;
+import org.gvsig.proj.catalog.extent.GeographicBoundingBox;
+import org.gvsig.proj.catalog.extent.VerticalExtent;
 import org.opengis.metadata.Identifier;
 import org.opengis.referencing.FactoryException;
 import org.opengis.referencing.ReferenceIdentifier;
@@ -37,32 +42,56 @@
 import org.opengis.referencing.operation.Conversion;
 
 public class DefaultCRSDefinition implements CRSDefinition {
+	/**
+	 * Coordinate reference system in the original axis order
+	 */
 	final private CoordinateReferenceSystem origCrs;
+	/**
+	 * Coordinate reference system in the internal axis order (east-north)
+	 */
+	final private CoordinateReferenceSystem internalCrs;
 	final private String wkt;
 	private CoordinateReferenceSystem epsgCrs = null;
 
-	public DefaultCRSDefinition(String wktDefinition) throws UnsupportedCoordinateReferenceSystemException {
-		this.wkt = wktDefinition;
-		try {
-			this.origCrs = CRS.parseWKT(wktDefinition);
-		} catch (FactoryException e) {
-			throw new UnsupportedCoordinateReferenceSystemException(e);
-		}
+	public DefaultCRSDefinition(CoordinateReferenceSystem crs) {
+		this(crs, crs, null);
 	}
 	
-	public DefaultCRSDefinition(CoordinateReferenceSystem crs) {
+	public DefaultCRSDefinition(CoordinateReferenceSystem crs, String wkt) {
+		this(crs, crs, wkt);
+	}
+	
+	public DefaultCRSDefinition(CoordinateReferenceSystem crs,  CoordinateReferenceSystem eastNorthCrs, String wkt) {
 		this.origCrs = crs;
-		this.wkt = null;
+		this.wkt = wkt;
+		this.internalCrs = eastNorthCrs;
 	}
 
+	/**
+	 * Gets the Geotools instance backing this definition, using the gvSIG internal
+	 * axis order (east-north).
+	 * definition
+	 * 
+	 * @return
+	 */
 	public CoordinateReferenceSystem getInternalCRS() {
+		return internalCrs;
+	}
+	
+	/**
+	 * Gets the Geotools instance backing this definition, using the original,
+	 * unmodified axis order as defined by the defining authority or WKT string.
+	 * 
+	 * @return
+	 */
+	public CoordinateReferenceSystem getOrigCRS() {
 		return origCrs;
 	}
 	
 	@Override
 	public String getName() {
 		if (origCrs.getName() != null) {
-			return origCrs.getName().toString();
+			return origCrs.getName().getCode();
 		}
 		if (getIdentifier() != null) {
 			return getIdentifier();
@@ -89,7 +118,8 @@
 		if (id!=null) {
 			return id;
 		}
-		return IdentifiedObjectUtils.getIdentifier(getEpsgCrs());
+		return null;
+		/*return IdentifiedObjectUtils.getIdentifier(getEpsgCrs());*/
 	}
 	
 	/**
@@ -97,8 +127,8 @@
 	 * null if not found
 	 * @return
 	 */
-	protected CoordinateReferenceSystem getEpsgCrs() {
-		// FIXME: this method makes the class immutable
+	/*protected CoordinateReferenceSystem getEpsgCrs() {
+		// FIXME: this method makes the class mutable
 		if (epsgCrs==null) {
 			try {
 				String code = CRS.lookupIdentifier(Citations.EPSG, origCrs, true);
@@ -109,7 +139,7 @@
 			catch (FactoryException exc) {}
 		}
 		return epsgCrs;
-	}
+	}*/
 
 	@Override
 	public Set<String> getIdentifiers() {
@@ -117,11 +147,12 @@
 		for (ReferenceIdentifier id: origCrs.getIdentifiers()) {
 			ids.add(id.toString());
 		}
+		/*
 		if (!getAuthorityName().equals("EPSG") && getEpsgCrs() != null) {
 			for (ReferenceIdentifier id: getEpsgCrs().getIdentifiers()) {
 				ids.add(id.toString());
 			}
-		}
+		}*/
 		return ids;
 	}
 
@@ -132,13 +163,69 @@
 
 	@Override
 	public Extent getDomainOfValidity() {
-		// TODO Auto-generated method stub
+		// FIXME: should we cache this?
+		org.opengis.metadata.extent.Extent extent = origCrs.getDomainOfValidity();
+		if (extent != null) {
+			String desc;
+			if (origCrs.getDomainOfValidity().getDescription() != null) {
+				desc = origCrs.getDomainOfValidity().getDescription().toString();
+			}
+			else {
+				desc = null;
+			}
+			ArrayList<GeographicBoundingBox> horizontalExtentList = new ArrayList<GeographicBoundingBox>();
+			for (org.opengis.metadata.extent.GeographicExtent horizExtent: origCrs.getDomainOfValidity().getGeographicElements()) {
+				if (horizExtent instanceof org.opengis.metadata.extent.GeographicBoundingBox) {
+					DefaultGeographicBoundingBox bb = new DefaultGeographicBoundingBox(
+							((org.opengis.metadata.extent.GeographicBoundingBox) horizExtent).getWestBoundLongitude(),
+							((org.opengis.metadata.extent.GeographicBoundingBox) horizExtent).getEastBoundLongitude(),
+							((org.opengis.metadata.extent.GeographicBoundingBox) horizExtent).getNorthBoundLatitude(),
+							((org.opengis.metadata.extent.GeographicBoundingBox) horizExtent).getSouthBoundLatitude()); 
+					horizontalExtentList.add(bb);
+				}				
+			}
+			
+			ArrayList<VerticalExtent> vertExtentList = new ArrayList<VerticalExtent>();
+			for (org.opengis.metadata.extent.VerticalExtent verticalExtent: origCrs.getDomainOfValidity().getVerticalElements()) {
+				DefaultVerticalExtent ve = new DefaultVerticalExtent(
+						new DefaultCRSDefinition(verticalExtent.getVerticalCRS()),
+						verticalExtent.getMinimumValue(),
+						verticalExtent.getMaximumValue()
+						);
+				vertExtentList.add(ve);
+			}
+			return new DefaultExtent(desc, horizontalExtentList, vertExtentList);
+		}
 		return null;
 	}
 
 	@Override
 	public String getDescription() {
-		return "Scope: " + origCrs.getScope() + "\nRemarks: " + origCrs.getRemarks();
+		StringBuilder desc = new StringBuilder();
+		if (origCrs.getScope() != null) {
+			desc.append("Scope: ").append(origCrs.getScope());
+		}
+		if (origCrs.getRemarks() != null) {
+			if (desc.length()>0) {
+				desc.append("\nRemarks: ");
+			}
+			else {
+				desc.append("Remarks: ");
+			}
+			desc.append(origCrs.getRemarks());
+		}
+		if (origCrs.getDomainOfValidity() != null &&
+				origCrs.getDomainOfValidity().getDescription() != null) {
+			if (desc.length()>0) {
+				desc.append("\nDomain: ");
+			}
+			else {
+				desc.append("Domain: ");
+			}
+			desc.append(origCrs.getDomainOfValidity().getDescription());
+		}
+		
+		return desc.toString();
 	}
 
 	@Override
@@ -172,13 +259,18 @@
 		if (wkt!=null) {
 			return wkt;
 		}
-		return origCrs.toWKT();
+		return toString(Format.WKT1);
 	}
 	
+	@Override
+	public String toString() {
+		return (getIdentifier()!=null)?(getIdentifier() + " - " + getName()):getName();
+	}
+	
 
 	@Override
 	public String toString(Format format) throws UnsupportedOperationException {
-		return toString(format, null, 0);
+		return toString(format, null, 2);
 	}
 
 	@Override
@@ -246,12 +338,12 @@
 
 	@Override
 	public CoordinateSystemAxis getAxisInternal(int dimension) throws IndexOutOfBoundsException {
-		// TODO Auto-generated method stub
-		return null;
+		return new DefaultCoordinateSystemAxis(internalCrs.getCoordinateSystem().getAxis(dimension));
 	}
 
 	@Override
 	public CRSDefinition getBaseCRS() {
+		// FIXME: consider the axis order of the base CRS
 		if (origCrs instanceof GeneralDerivedCRS) {
 			CoordinateReferenceSystem base = ((GeneralDerivedCRS)origCrs).getBaseCRS();
 			return new DefaultCRSDefinition(base);
@@ -284,13 +376,13 @@
 	
 	@Override
 	public Object clone() throws CloneNotSupportedException {
-		return new DefaultCRSDefinition(this.origCrs);
+		return new DefaultCRSDefinition(this.origCrs, this.internalCrs, this.wkt);
 	}
 	
 	@Override
 	public boolean equals(Object obj) {
 		if (obj instanceof DefaultCRSDefinition) {
-			return origCrs.equals(((DefaultCRSDefinition)obj).getInternalCRS());
+			return origCrs.equals(((DefaultCRSDefinition)obj).getOrigCRS());
 		}
 		if (obj instanceof CRSDefinition) {
 			return toString(Format.WKT1, WKTConvention.EPSG, 0).equals(((CRSDefinition)obj).toString(Format.WKT1, WKTConvention.EPSG, 0));
@@ -300,7 +392,25 @@
 
 	@Override
 	public boolean equals(CRSDefinition definition, boolean ignoreAxis, boolean ignoreMetadata) {
-		// TODO Auto-generated method stub
-		return this.equals(definition);
+		if (definition instanceof DefaultCRSDefinition) {
+			DefaultCRSDefinition def = (DefaultCRSDefinition) definition;
+			if (ignoreAxis) {
+				if (ignoreMetadata) {
+					return CRS.equalsIgnoreMetadata(this.internalCrs, def.getInternalCRS());	
+				}
+				else {
+					return this.internalCrs.equals(def.getInternalCRS());
+				}
+			}
+			else if (ignoreMetadata) {
+				return CRS.equalsIgnoreMetadata(this.origCrs, def.getOrigCRS());
+			}
+			else {
+				return CRS.equalsIgnoreMetadata(this.origCrs, def.getOrigCRS());
+			}
+		}
+		else {
+			return equals(definition);
+		}
 	}
 }
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultExtent.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultExtent.java	(revision 0)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultExtent.java	(revision 853)
@@ -0,0 +1,48 @@
+package org.gvsig.geotools.proj.catalog.extent;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.gvsig.proj.catalog.extent.Extent;
+import org.gvsig.proj.catalog.extent.GeographicBoundingBox;
+import org.gvsig.proj.catalog.extent.VerticalExtent;
+
+public class DefaultExtent implements Extent {
+	final private String description;
+	final private Collection<GeographicBoundingBox> horizontalBoundingBoxList;
+	final private Collection<VerticalExtent> verticalBoundingBoxList;
+
+	public DefaultExtent(String description,
+			Collection<GeographicBoundingBox> horizontalBoundingBoxList,
+			Collection<VerticalExtent> verticalBoundingBoxList) {
+		this.description = description;
+		if (horizontalBoundingBoxList != null) {
+			this.horizontalBoundingBoxList = Collections.unmodifiableCollection(horizontalBoundingBoxList);
+		}
+		else {
+			this.horizontalBoundingBoxList = Collections.emptyList();
+		}
+		if (verticalBoundingBoxList != null) {
+			this.verticalBoundingBoxList = Collections.unmodifiableCollection(verticalBoundingBoxList);
+		}
+		else {
+			this.verticalBoundingBoxList = Collections.emptyList();
+		}
+	}
+
+	@Override
+	public String getDescription() {
+		return description;
+	}
+
+	@Override
+	public Collection<GeographicBoundingBox> getGeographicElements() {
+		return horizontalBoundingBoxList;
+	}
+
+	@Override
+	public Collection<VerticalExtent> getVerticalElements() {
+		return verticalBoundingBoxList;
+	}
+
+}
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultGeographicBoundingBox.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultGeographicBoundingBox.java	(revision 0)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultGeographicBoundingBox.java	(revision 853)
@@ -0,0 +1,38 @@
+package org.gvsig.geotools.proj.catalog.extent;
+
+import org.gvsig.proj.catalog.extent.GeographicBoundingBox;
+
+public class DefaultGeographicBoundingBox implements GeographicBoundingBox {
+	private final double westBoundLongitude, eastBoundLongitude,
+		northBoundLatitude, southBoundLatitude;
+
+	public DefaultGeographicBoundingBox(
+			double westBoundLongitude, double eastBoundLongitude,
+			double northBoundLatitude, double southBoundLatitude) {
+		this.westBoundLongitude = westBoundLongitude;
+		this.eastBoundLongitude = eastBoundLongitude;
+		this.northBoundLatitude = northBoundLatitude;
+		this.southBoundLatitude = southBoundLatitude;
+	}
+
+	@Override
+	public double getWestBoundLongitude() {
+		return westBoundLongitude;
+	}
+
+	@Override
+	public double getEastBoundLongitude() {
+		return eastBoundLongitude;
+	}
+
+	@Override
+	public double getSouthBoundLatitude() {
+		return southBoundLatitude;
+	}
+
+	@Override
+	public double getNorthBoundLatitude() {
+		return northBoundLatitude;
+	}
+
+}
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultVerticalExtent.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultVerticalExtent.java	(revision 0)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/extent/DefaultVerticalExtent.java	(revision 853)
@@ -0,0 +1,32 @@
+package org.gvsig.geotools.proj.catalog.extent;
+
+import org.gvsig.proj.catalog.CRSDefinition;
+import org.gvsig.proj.catalog.extent.VerticalExtent;
+
+public class DefaultVerticalExtent implements VerticalExtent {
+	final private CRSDefinition crs;
+	final private double minValue, maxValue;
+	
+	public DefaultVerticalExtent(CRSDefinition verticalCrs,
+			double minValue, double maxValue) {
+		this.crs = verticalCrs;
+		this.minValue = minValue;
+		this.maxValue = maxValue;
+	}
+
+	@Override
+	public double getMinimumValue() {
+		return minValue;
+	}
+
+	@Override
+	public double getMaximumValue() {
+		return maxValue;
+	}
+
+	@Override
+	public CRSDefinition getVerticalCRS() {
+		return crs;
+	}
+
+}
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/GtCRSCatalogManager.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/GtCRSCatalogManager.java	(revision 852)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/GtCRSCatalogManager.java	(revision 853)
@@ -8,11 +8,13 @@
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.regex.Pattern;
 
 import javax.sql.DataSource;
 
@@ -21,6 +23,7 @@
 import org.geotools.factory.Hints;
 import org.geotools.metadata.iso.citation.Citations;
 import org.geotools.referencing.CRS;
+import org.geotools.referencing.CRS.AxisOrder;
 import org.geotools.referencing.ReferencingFactoryFinder;
 import org.geotools.referencing.factory.AbstractAuthorityFactory;
 import org.geotools.referencing.factory.BufferedAuthorityFactory;
@@ -30,8 +33,14 @@
 import org.geotools.referencing.wkt.Parser;
 import org.geotools.resources.i18n.ErrorKeys;
 import org.geotools.resources.i18n.Errors;
+import org.gvsig.geotools.proj.catalog.extent.DefaultExtent;
+import org.gvsig.geotools.proj.catalog.extent.DefaultGeographicBoundingBox;
+import org.gvsig.geotools.proj.catalog.extent.DefaultVerticalExtent;
+import org.gvsig.geotools.proj.catalog.utils.IdentifiedObjectUtils;
+import org.gvsig.geotools.proj.catalog.utils.WKTUtils;
 import org.gvsig.proj.catalog.CRSCatalogManager;
 import org.gvsig.proj.catalog.CRSDefinition;
+import org.gvsig.proj.catalog.CRSType;
 import org.gvsig.proj.catalog.TextSerialization;
 import org.gvsig.proj.catalog.TextSerialization.Format;
 import org.gvsig.proj.catalog.TransformationDefinition;
@@ -39,6 +48,9 @@
 import org.gvsig.proj.catalog.exception.UnsupportedCoordinateReferenceSystemException;
 import org.gvsig.proj.catalog.exception.UnsupportedFormatException;
 import org.gvsig.proj.catalog.exception.UnsupportedTransformationException;
+import org.gvsig.proj.catalog.extent.Extent;
+import org.gvsig.proj.catalog.extent.GeographicBoundingBox;
+import org.gvsig.proj.catalog.extent.VerticalExtent;
 import org.opengis.referencing.AuthorityFactory;
 import org.opengis.referencing.FactoryException;
 import org.opengis.referencing.NoSuchAuthorityCodeException;
@@ -66,7 +78,7 @@
 public class GtCRSCatalogManager implements CRSCatalogManager {
 	private static final String EPSG_DB_SUBFOLDER = "epsg";	
 	private static final List<TextSerialization.Format> SUPPORTED_FORMATS = Arrays.asList(TextSerialization.Format.WKT1);
-	private static final List<String> supportedAuthorities = Collections.unmodifiableList(Arrays.asList("EPSG", "ESRI", "USER"));
+	private static final List<String> supportedAuthorities = Collections.unmodifiableList(Arrays.asList("EPSG", "ESRI", "USER"));	
 
 	public GtCRSCatalogManager() {
 		
@@ -123,27 +135,37 @@
 	@Override
 	public List<String> search(String searchString) {
 		// FIXME handle other authorities
-		return searchEpsg(searchString);
+		return searchEpsg(searchString, null, null);
 	}
 
 	@Override
 	public List<String> search(String authority, String searchString) {
 		// FIXME handle other authorities
 		if (authority.equals("EPSG")) {
-			return searchEpsg(searchString);
+			return searchEpsg(searchString, null, null);
 		}
 		return Collections.emptyList();
 	}
 	
-	protected List<String> searchEpsg(String searchString) {
+	@Override
+	public List<String> search(String authority, String searchString, CRSType[] includeTypes, CRSType[] excludeTypes) {
 		// FIXME handle other authorities
+		if (authority.equals("EPSG")) {
+			return searchEpsg(searchString, includeTypes, excludeTypes);
+		}
+		return Collections.emptyList();
+	}
+
+	
+	protected List<String> searchEpsg(String searchString, CRSType[] includeTypes, CRSType[] excludeTypes) {
+		// FIXME handle other authorities
 		CRSAuthorityFactory factory = ReferencingFactoryFinder.getCRSAuthorityFactory("EPSG", null);
 		if (factory instanceof ThreadedEpsgFactory) {
 			ThreadedEpsgFactory epsgFactory = (ThreadedEpsgFactory) factory;
 			try {
 				DataSource ds = epsgFactory.getDataSource();
 				Connection c = ds.getConnection();
-				return searchEpsg(searchString, c);
+				return searchEpsg(searchString, c, includeTypes, excludeTypes);
 			} catch (SQLException e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
@@ -152,33 +174,78 @@
 		return Collections.EMPTY_LIST;
 	}
 	
-    public synchronized List<String> searchEpsg(String searchString, Connection conn) throws SQLException
+	private boolean isExcluded(CRSType type,  CRSType[] excludeTypes) {
+		for (CRSType excluded: excludeTypes) {
+			if (type.equals(excluded)) {
+				return true;
+			}
+    	}
+		return false;
+	}
+	
+    public synchronized List<String> searchEpsg(String searchString, Connection conn,
+    		CRSType[] includeTypes, CRSType[] excludeTypes) throws SQLException
     {
     	ArrayList<String> codes = new ArrayList<String>();
     	
-    	if (searchString.startsWith("EPSG:")) {
+    	if (searchString == null) {
+    		searchString = "";
+    	}
+    	else if (searchString.startsWith("EPSG:")) {
     		searchString = searchString.substring(5);
     	}
     	searchString = "%" + searchString.toLowerCase() + "%";
+    	StringBuilder builder = new StringBuilder("SELECT COORD_REF_SYS_CODE,"
+                +       " COORD_REF_SYS_NAME,"
+                +       " AREA_OF_USE_CODE,"
+                +       " CRS_SCOPE,"
+                +       " REMARKS,"
+                +       " COORD_REF_SYS_KIND,"
+                +       " COORD_SYS_CODE,"       // Null for CompoundCRS
+                +       " DATUM_CODE,"           // Null for ProjectedCRS
+                +       " SOURCE_GEOGCRS_CODE,"  // For ProjectedCRS
+                +       " PROJECTION_CONV_CODE," // For ProjectedCRS
+                +       " CMPD_HORIZCRS_CODE,"   // For CompoundCRS only
+                +       " CMPD_VERTCRS_CODE,"     // For CompoundCRS only
+                +       " DEPRECATED"
+                + " FROM epsg_coordinatereferencesystem"
+                + " WHERE DEPRECATED = 0 AND (COORD_REF_SYS_CODE LIKE ? OR LCASE(COORD_REF_SYS_NAME) LIKE ?"
+                + " OR LCASE(REMARKS) LIKE ?"
+                + " OR LCASE(CRS_SCOPE) LIKE ?)");
+    	
+    	if (includeTypes != null) {
+    		boolean first = true;
+    		builder.append(" AND (");
+    		for (CRSType type: includeTypes) {
+    			if (first) {
+    				first = false;
+    				builder.append("COORD_REF_SYS_KIND LIKE '").append(type.toEpsgString()).append("'");
+    			}
+    			else {
+    				builder.append(" OR COORD_REF_SYS_KIND LIKE '").append(type.toEpsgString()).append("'");
+    			}
+    		}
+    		builder.append(")");
+    	}
+    	if (excludeTypes != null) {
+    		boolean first = true;
+    		builder.append(" AND NOT(");
+    		for (CRSType type: excludeTypes) {
+    			if (first) {
+    				first = false;
+    				builder.append("COORD_REF_SYS_KIND LIKE '").append(type.toEpsgString()).append("'");
+    			}
+    			else {
+    				builder.append(" OR COORD_REF_SYS_KIND LIKE '").append(type.toEpsgString()).append("'");
+    			}
+    		}
+    		builder.append(")");
+    	}
+    		
         try {
             // FIXME: JOIN query with area of use. Maybe also with  COORD_SYS_CODE to search for coord sys name
             final PreparedStatement stmt;
-            stmt = conn.prepareStatement("SELECT COORD_REF_SYS_CODE,"
-                  +       " COORD_REF_SYS_NAME,"
-                  +       " AREA_OF_USE_CODE,"
-                  +       " CRS_SCOPE,"
-                  +       " REMARKS,"
-                  +       " COORD_REF_SYS_KIND,"
-                  +       " COORD_SYS_CODE,"       // Null for CompoundCRS
-                  +       " DATUM_CODE,"           // Null for ProjectedCRS
-                  +       " SOURCE_GEOGCRS_CODE,"  // For ProjectedCRS
-                  +       " PROJECTION_CONV_CODE," // For ProjectedCRS
-                  +       " CMPD_HORIZCRS_CODE,"   // For CompoundCRS only
-                  +       " CMPD_VERTCRS_CODE"     // For CompoundCRS only
-                  + " FROM epsg_coordinatereferencesystem"
-                  + " WHERE COORD_REF_SYS_CODE LIKE ? OR LCASE(COORD_REF_SYS_NAME) LIKE ?"
-                  + " OR LCASE(REMARKS) LIKE ?"
-                  + " OR LCASE(CRS_SCOPE) LIKE ?");
+            stmt = conn.prepareStatement(builder.toString());
             stmt.setString(1, searchString);
             stmt.setString(2, searchString);
             stmt.setString(3, searchString);
@@ -190,6 +257,7 @@
                 final String area    = result.getString(3);
                 final String scope   = result.getString(4);
                 final String remarks = result.getString(5);
+                final String kind = result.getString(6);
 
                 final String csCode  = result.getString(7);
                 final String dmCode    = result.getString( 8); // geographic
@@ -198,7 +266,7 @@
                 // vertical:
                 final String code1 = result.getString(11);
                 final String code2 = result.getString(12);
-                codes.add(epsg);
+                codes.add("EPSG:"+epsg);
             }
             result.close();
         } catch (SQLException exception) {
@@ -211,21 +279,27 @@
 	@Override
 	public DefaultCRSDefinition getCRSDefinition(String code) throws UnsupportedCoordinateReferenceSystemException {
 		CoordinateReferenceSystem crs;
+		CoordinateReferenceSystem internalCrs;
 		try {
-			crs = CRS.decode(code);
-		} catch (NoSuchAuthorityCodeException e) {
+			crs = CRS.decode(code, false);
+			if (CRS.getAxisOrder(crs) == AxisOrder.NORTH_EAST) {
+				internalCrs = CRS.decode(code, true);
+			}
+			else {
+				internalCrs = crs;
+			}
+			return new DefaultCRSDefinition(crs, internalCrs, null);
+		}  catch (NoSuchAuthorityCodeException e) {
 			throw new UnsupportedCoordinateReferenceSystemException(code, e);
 		} catch (FactoryException e) {
 			throw new UnsupportedCoordinateReferenceSystemException(code, e);
 		}
-		return new DefaultCRSDefinition(crs);
 	}
 	
 	public DefaultCRSDefinition getCRSDefinition(CoordinateReferenceSystem crs) throws UnsupportedCoordinateReferenceSystemException {
 		return new DefaultCRSDefinition(crs);
 	}
 
-
 	@Override
 	public CRSDefinition getCompoundCRS(CRSDefinition... crsList) throws UnsupportedCoordinateReferenceSystemException {
 		ArrayList<CoordinateReferenceSystem> components = new ArrayList<CoordinateReferenceSystem>();
@@ -234,7 +308,7 @@
 				components.add(((DefaultCRSDefinition)def).getInternalCRS());	
 			}
 			else {
-				def = new DefaultCRSDefinition(def.toWKT());
+				def = parseCRSDefinition(def.toWKT());
 			}
 		}
 	    CRSFactory crsFactory = ReferencingFactoryFinder.getCRSFactory(null);
@@ -249,21 +323,41 @@
 		}
 	}
 	
+	/**
+	 * Removes axis definition from a WKT string
+	 * 
+	 * @param wktDef
+	 * @return A WKT string without any axis definition
+	 */
+	private static String removeWktAxis(String wktDef) {
+		return WKTUtils.removeAxisDefinition(wktDef);
+	}
+	
 	@Override
 	public DefaultCRSDefinition parseCRSDefinition(String def) throws UnsupportedCoordinateReferenceSystemException {
 		CoordinateReferenceSystem crs;
+		CoordinateReferenceSystem internalCrs;
 		try {
-			crs = CRS.decode(def);
-		} catch (FactoryException e1) {
-			try {
-				crs = CRS.parseWKT(def);
-			} catch (NoSuchAuthorityCodeException e) {
-				throw new UnsupportedCoordinateReferenceSystemException(def, e);
-			} catch (FactoryException e) {
-				throw new UnsupportedCoordinateReferenceSystemException(def, e);
-			}			
+			crs = CRS.parseWKT(def);
+			if (CRS.getAxisOrder(crs)==AxisOrder.NORTH_EAST) {
+				String id = IdentifiedObjectUtils.getIdentifier(crs);
+				if (id != null && id.startsWith("EPSG:")) { //FIXME: could this also work for other authorities such as ESRI?
+					internalCrs = CRS.decode(id, true);
+				}
+				else {
+					// Hack: remove the axis from the WKT. It could be better to try to derive a CRS with default axis order, but I don't see the way for non EPSG CRSs 
+					internalCrs = CRS.parseWKT(removeWktAxis(def));
+				}
+			}
+			else {
+				internalCrs = crs;
+			}
+		} catch (NoSuchAuthorityCodeException e) {
+			throw new UnsupportedCoordinateReferenceSystemException(def, e);
+		} catch (FactoryException e) {
+			throw new UnsupportedCoordinateReferenceSystemException(def, e);
 		}
-		return new DefaultCRSDefinition(crs);
+		return new DefaultCRSDefinition(crs, internalCrs, def);
 	}
 	
 
@@ -461,4 +555,21 @@
 		return SUPPORTED_FORMATS;
 	}
 
+	@Override
+	public GeographicBoundingBox createBoundingBox(double westBoundLongitude, double eastBoundLongitude,
+			double northBoundLatitude, double southBoundLatitude) {
+		return new DefaultGeographicBoundingBox(westBoundLongitude, eastBoundLongitude, northBoundLatitude, southBoundLatitude);
+	}
+
+	@Override
+	public VerticalExtent createVerticalExtent(CRSDefinition crs, double minValue, double maxValue) {
+		return new DefaultVerticalExtent(crs, minValue, maxValue);
+	}
+
+	@Override
+	public Extent createExtent(String description, 
+			Collection<GeographicBoundingBox> horizontalBoundingBoxList,
+			Collection<VerticalExtent> verticalBoundingBoxList) {
+		return new DefaultExtent(description, horizontalBoundingBoxList, verticalBoundingBoxList);
+	}
 }
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/utils/WKTUtils.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/utils/WKTUtils.java	(revision 0)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.catalog.impl/src/main/java/org/gvsig/geotools/proj/catalog/utils/WKTUtils.java	(revision 853)
@@ -0,0 +1,31 @@
+package org.gvsig.geotools.proj.catalog.utils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class WKTUtils {
+	private static final Pattern AXIS_REMOVER = Pattern.compile(",\\s*AXIS\\s*\\[\\s*\"(?:[^\"\\\\]|(?:\\\\.))*?\"\\s*,\\s*[^\\]]+\\s*\\]\\s*,\\s*AXIS\\s*\\[\\s*\"(?:[^\"\\\\]|(?:\\\\.))*?\"\\s*,\\s*[^\\]]+\\s*\\](?:,\\s*AXIS\\s*\\[\\s*\"(?:[^\"\\\\]|(?:\\\\.))*?\"\\s*,\\s*[^\\]]+\\s*\\])*");
+	
+	private static final Pattern AXIS_SWAPPER = Pattern.compile("(.*?)(,\\s*AXIS\\s*\\[\\s*\"(?:[^\"\\\\]|(?:\\\\.))*?\"\\s*,\\s*[^\\]]+\\s*\\]\\s*)(,\\s*AXIS\\s*\\[\\s*\"(?:[^\"\\\\]|(?:\\\\.))*?\"\\s*,\\s*[^\\]]+\\s*\\])(.*)");
+	
+	/**
+	 * Removes any AXIS definition from a WKT string.
+	 * @return The WKT without any AXIS definitions 
+	 */
+	public static String removeAxisDefinition(String wktDef) {
+		return AXIS_REMOVER.matcher(wktDef).replaceFirst("");
+	}
+	
+	/**
+	 * Swaps the order of the first 2 AXIS definitions from the provided
+	 * WKT string.
+	 * @return The WKT string with a swapped axis order 
+	 */
+	public static String swapAxisOrder(String wktDef) {
+		Matcher m = AXIS_SWAPPER.matcher(wktDef);
+		if (m.matches() && m.groupCount()==4) {
+			return m.group(1) + m.group(3) + m.group(2) + m.group(4);
+		}
+		return wktDef;
+	}
+}
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.app/src/test/java/org/gvsig/geotools/proj/app/test/TestCrsPanel.java
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.app/src/test/java/org/gvsig/geotools/proj/app/test/TestCrsPanel.java	(revision 0)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.app/src/test/java/org/gvsig/geotools/proj/app/test/TestCrsPanel.java	(revision 853)
@@ -0,0 +1,49 @@
+package org.gvsig.geotools.proj.app.test;
+
+
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Level;
+import org.apache.log4j.PatternLayout;
+import org.gvsig.proj.swing.CoordinateReferenceSystemSelectorComponent;
+import org.gvsig.proj.swing.CoordinateReferenceSystemSwingLocator;
+import org.gvsig.proj.swing.impl.DefaultCoordinateReferenceSystemSwingManager;
+import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
+
+public class TestCrsPanel {
+
+	public TestCrsPanel() {
+		// TODO Auto-generated constructor stub
+	}
+
+	public static void main(String[] args) {
+		ConsoleAppender console = new ConsoleAppender(); //create appender
+		//configure the appender
+		String PATTERN = "%d [%p|%c|%C{1}] %m%n";
+		console.setLayout(new PatternLayout(PATTERN)); 
+		console.setThreshold(Level.ALL);
+		console.activateOptions();
+		//add appender to any Logger (here is root)
+		org.apache.log4j.Logger.getRootLogger().addAppender(console);
+
+		DefaultLibrariesInitializer initializer = new DefaultLibrariesInitializer();
+		initializer.fullInitialize();
+		final JFrame frame = new JFrame();
+		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		DefaultCoordinateReferenceSystemSwingManager manager = (DefaultCoordinateReferenceSystemSwingManager) CoordinateReferenceSystemSwingLocator.getSwingManager();
+
+		CoordinateReferenceSystemSelectorComponent selector = manager.createCoordinateReferenceSystemSelectionComponent();
+		frame.add(selector.asJComponent());
+		frame.setSize(400, 600);
+		//frame.pack();
+		SwingUtilities.invokeLater(new Runnable() {
+			public void run() {
+				frame.setVisible(true);
+			}
+		});
+
+	}
+
+}
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.app/pom.xml
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.app/pom.xml	(revision 852)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/org.gvsig.geotools.proj.app/pom.xml	(revision 853)
@@ -26,6 +26,57 @@
             <groupId>org.gvsig</groupId>
             <artifactId>org.gvsig.geotools.proj.lib.impl</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.proj.swing.api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.proj.swing.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools</artifactId>
+            <scope>test</scope>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.swing.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.spi</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.services</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.dynform.impl</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <properties>
Index: org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/pom.xml
===================================================================
--- org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/pom.xml	(revision 852)
+++ org.gvsig.geotools.proj/trunk/org.gvsig.geotools.proj/pom.xml	(revision 853)
@@ -159,8 +159,9 @@
         <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
         <localRepository>${user.home}/.m2/repository</localRepository>
         <site-repository>dav:https://devel.gvsig.org/sites/${project.artifactId}/${project.version}</site-repository>
-        <gvsig.tools.version>3.0.145</gvsig.tools.version>
-        <gvsig.metadata.version>1.0.0</gvsig.metadata.version>
+        <gvsig.proj.version>1.0.5-SNAPSHOT</gvsig.proj.version>
+        <!-- <gvsig.tools.version>3.0.145</gvsig.tools.version>
+        <gvsig.metadata.version>1.0.0</gvsig.metadata.version>  -->
         <!-- <gvsig.projection.version>2.0.21</gvsig.projection.version> -->
     </properties>
     <dependencyManagement>
@@ -175,6 +176,13 @@
             </dependency>
             <dependency>
                 <groupId>org.gvsig</groupId>
+                <artifactId>org.gvsig.tools</artifactId>
+                <version>${gvsig.tools.version}</version>
+                <type>pom</type>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.gvsig</groupId>
                 <artifactId>org.gvsig.tools.lib</artifactId>
                 <version>${gvsig.tools.version}</version>
                 <type>test-jar</type>
@@ -189,17 +197,17 @@
             <dependency>
                 <groupId>org.gvsig</groupId>
                 <artifactId>org.gvsig.proj.lib.api</artifactId>
-                <version>1.0.5-SNAPSHOT</version>
+                <version>${gvsig.proj.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.gvsig</groupId>
                 <artifactId>org.gvsig.proj.catalog.api</artifactId>
-                <version>1.0.5-SNAPSHOT</version>
+                <version>${gvsig.proj.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.gvsig</groupId>
                 <artifactId>org.gvsig.proj.catalog.api</artifactId>
-                <version>1.0.5-SNAPSHOT</version>
+                <version>${gvsig.proj.version}</version>
                 <type>test-jar</type>
                 <scope>test</scope>
             </dependency>
@@ -284,6 +292,42 @@
                 <version>4.12</version>
                 <scope>test</scope>
             </dependency>
+	        <dependency>
+	            <groupId>org.gvsig</groupId>
+	            <artifactId>org.gvsig.tools.swing.api</artifactId>
+	            <version>${gvsig.tools.version}</version>
+	            <scope>test</scope>
+	        </dependency>
+	        <dependency>
+	            <groupId>org.gvsig</groupId>
+	            <artifactId>org.gvsig.tools.swing.impl</artifactId>
+	            <version>${gvsig.tools.version}</version>
+	            <scope>test</scope>
+	        </dependency>
+	        <dependency>
+	            <groupId>org.gvsig</groupId>
+	            <artifactId>org.gvsig.tools.dynform.api</artifactId>
+	            <version>${gvsig.tools.version}</version>
+	            <scope>test</scope>
+	        </dependency>
+	        <dependency>
+	            <groupId>org.gvsig</groupId>
+	            <artifactId>org.gvsig.tools.dynform.spi</artifactId>
+	            <version>${gvsig.tools.version}</version>
+	            <scope>test</scope>
+	        </dependency>
+	        <dependency>
+	            <groupId>org.gvsig</groupId>
+	            <artifactId>org.gvsig.tools.dynform.services</artifactId>
+	            <version>${gvsig.tools.version}</version>
+	            <scope>test</scope>
+	        </dependency>
+	        <dependency>
+	            <groupId>org.gvsig</groupId>
+	            <artifactId>org.gvsig.tools.dynform.impl</artifactId>
+	            <version>${gvsig.tools.version}</version>
+	            <scope>test</scope>
+	        </dependency>
         </dependencies>
     </dependencyManagement>
 
