diff --git a/modules/library/referencing/src/main/java/org/geotools/referencing/factory/ReferencingFactory.java b/modules/library/referencing/src/main/java/org/geotools/referencing/factory/ReferencingFactory.java
index a8e1c2a..814e600 100644
--- a/modules/library/referencing/src/main/java/org/geotools/referencing/factory/ReferencingFactory.java
+++ b/modules/library/referencing/src/main/java/org/geotools/referencing/factory/ReferencingFactory.java
@@ -75,7 +75,7 @@ public class ReferencingFactory extends AbstractFactory implements Factory {
      * not a valid authority name (not declared in {@link AllAuthoritiesFactory}
      * because we want to avoid this dependency in {@link IdentifiedObjectFinder}).
      */
-    static final Citation ALL;
+    public static final Citation ALL;
     static {
         final CitationImpl citation = new CitationImpl(Vocabulary.format(VocabularyKeys.ALL));
         citation.freeze();
diff --git a/modules/library/referencing/src/main/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKT.java b/modules/library/referencing/src/main/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKT.java
index 5c9345f..306d733 100644
--- a/modules/library/referencing/src/main/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKT.java
+++ b/modules/library/referencing/src/main/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKT.java
@@ -243,11 +243,7 @@ public class CoordinateOperationFactoryUsingWKT extends DeferredAuthorityFactory
             String sourceCRS, String targetCRS) throws NoSuchAuthorityCodeException, FactoryException {
         Set<CoordinateOperation> coordops = super.createFromCoordinateReferenceSystemCodes(sourceCRS, targetCRS);
         if (coordops.isEmpty()) {
-            // If not found, delegate to the fallback factory.
-            CoordinateOperationAuthorityFactory fallback = getFallbackAuthorityFactory();
-            if (fallback != null) {
-                coordops = fallback.createFromCoordinateReferenceSystemCodes(sourceCRS, targetCRS);
-            }
+            throw new FactoryException("Could not create coordinate operations from " + sourceCRS + " to " + targetCRS);
         }
         return coordops;
     }
@@ -269,61 +265,9 @@ public class CoordinateOperationFactoryUsingWKT extends DeferredAuthorityFactory
             throws NoSuchAuthorityCodeException, FactoryException {
         CoordinateOperation coordop = super.createCoordinateOperation(code);
         if (coordop == null) {
-            CoordinateOperationAuthorityFactory fallback = getFallbackAuthorityFactory();
-            if (fallback != null) {
-                coordop = fallback.createCoordinateOperation(code);
-            }
+            throw new FactoryException("Could not create CoordinateOperation from code " + code);
         }
         return coordop;
     }
-    
-    /**
-     * Gets the next available {@link CoordinateOperationAuthorityFactory}
-     * in the priority list.
-     * 
-     * @return the alternative CoordinateOperationAuthorityFactory.
-     * @throws NoSuchAuthorityCodeException if a specified code was not found.
-     * @throws FactoryException if the object creation failed for some other reason.
-     */
-    protected CoordinateOperationAuthorityFactory getFallbackAuthorityFactory()
-            throws NoSuchAuthorityCodeException, FactoryException {
-
-        if(!fallbackAuthorityFactorySearched) { // Search once
-            CoordinateOperationAuthorityFactory candidate = null;
-            
-            // These hints are to prevent infinite recursion when called
-            // from OrderedAxisAuthorityFactory. See "noForce(Hints)"
-            // from AuthorityBackedFactory.
-            // See also: http://jira.codehaus.org/browse/GEOT-1161
-            Hints h = new Hints();
-            h.put(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.FALSE);
-            h.put(Hints.FORCE_STANDARD_AXIS_DIRECTIONS,   Boolean.FALSE);
-            h.put(Hints.FORCE_STANDARD_AXIS_UNITS,        Boolean.FALSE);
-            
-            Set<CoordinateOperationAuthorityFactory> factories = ReferencingFactoryFinder.
-                    getCoordinateOperationAuthorityFactories(h);
-            Iterator<CoordinateOperationAuthorityFactory> it = factories.iterator();
-            
-            // Skip factories with higher priority than me.
-            while (it.hasNext()) {
-                candidate = it.next();
-                if (candidate == this) {
-                    break;
-                }
-            }
-            
-            // Get the next one for this same authority
-            while (it.hasNext()) {
-                candidate = it.next();
-                if (!(candidate instanceof CoordinateOperationFactoryUsingWKT)
-                        && candidate.getAuthority().getTitle().equals(this.getAuthority().getTitle())) {
-                    fallbackAuthorityFactory = candidate;
-                    break;
-                }
-            }
-            fallbackAuthorityFactorySearched = true;
-        }
 
-        return fallbackAuthorityFactory;
-    }
 }
\ No newline at end of file
diff --git a/modules/library/referencing/src/main/java/org/geotools/referencing/operation/AuthorityBackedFactory.java b/modules/library/referencing/src/main/java/org/geotools/referencing/operation/AuthorityBackedFactory.java
index a715479..8dd551c 100644
--- a/modules/library/referencing/src/main/java/org/geotools/referencing/operation/AuthorityBackedFactory.java
+++ b/modules/library/referencing/src/main/java/org/geotools/referencing/operation/AuthorityBackedFactory.java
@@ -34,10 +34,13 @@ import org.opengis.referencing.operation.*;
 import org.geotools.factory.Hints;
 import org.geotools.factory.OptionalFactory;
 import org.geotools.factory.FactoryRegistryException;
+import org.geotools.metadata.iso.citation.Citations;
 import org.geotools.referencing.AbstractIdentifiedObject;
 import org.geotools.referencing.CRS;
 import org.geotools.referencing.ReferencingFactoryFinder;
 import org.geotools.referencing.factory.BackingStoreException;
+import org.geotools.referencing.factory.ManyAuthoritiesFactory;
+import org.geotools.referencing.factory.ReferencingFactory;
 import org.geotools.resources.i18n.Loggings;
 import org.geotools.resources.i18n.LoggingKeys;
 
@@ -168,8 +171,9 @@ public class AuthorityBackedFactory extends DefaultCoordinateOperationFactory
              */
             final Hints hints = new Hints();
             noForce(hints);
-            authorityFactory = ReferencingFactoryFinder
-                    .getCoordinateOperationAuthorityFactory(DEFAULT_AUTHORITY, hints);
+            Set<CoordinateOperationAuthorityFactory> factories = ReferencingFactoryFinder
+                    .getCoordinateOperationAuthorityFactories(hints);
+            authorityFactory = new ManyAuthoritiesFactory(factories);
         }
         return authorityFactory;
     }
@@ -210,7 +214,10 @@ public class AuthorityBackedFactory extends DefaultCoordinateOperationFactory
          * Now performs the real work.
          */
         final CoordinateOperationAuthorityFactory authorityFactory = getAuthorityFactory();
-        final Citation  authority = authorityFactory.getAuthority();
+        Citation  authority = authorityFactory.getAuthority();
+        if(authority == ReferencingFactory.ALL) {
+            authority = null;
+        }
         final Identifier sourceID = AbstractIdentifiedObject.getIdentifier(sourceCRS, authority);
         if (sourceID == null) {
             return null;
@@ -219,8 +226,8 @@ public class AuthorityBackedFactory extends DefaultCoordinateOperationFactory
         if (targetID == null) {
             return null;
         }
-        final String sourceCode = sourceID.getCode().trim();
-        final String targetCode = targetID.getCode().trim();
+        final String sourceCode = sourceID.toString();
+        final String targetCode = targetID.toString();
         if (sourceCode.equals(targetCode)) {
             /*
              * NOTE: This check is mandatory because this method may be invoked in some situations
diff --git a/modules/library/referencing/src/test/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKTTest.java b/modules/library/referencing/src/test/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKTTest.java
index 3d42f24..3d03735 100644
--- a/modules/library/referencing/src/test/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKTTest.java
+++ b/modules/library/referencing/src/test/java/org/geotools/referencing/factory/epsg/CoordinateOperationFactoryUsingWKTTest.java
@@ -129,10 +129,10 @@ public class CoordinateOperationFactoryUsingWKTTest {
     public void testCreateCoordinateOperation() throws TransformException {
         
         try {
-            assertNull(factory.createCoordinateOperation(INVALID_CRS));
+            factory.createCoordinateOperation(INVALID_CRS);
+            fail("Should have failed with a FactoryException");
         } catch (FactoryException e) {
-            fail(factory.getClass().getSimpleName() + " threw a FactoryException when requesting"
-              + "a nonexistent operation. Instead, a NoSuchAuthorityCodeException was expected.");
+            // fine
         }
 
         try {
@@ -166,12 +166,11 @@ public class CoordinateOperationFactoryUsingWKTTest {
     @Test
     public void testCreateFromCoordinateReferenceSystemCodes() throws TransformException {
         try {
-            Set<CoordinateOperation> cos = factory.createFromCoordinateReferenceSystemCodes(
+            factory.createFromCoordinateReferenceSystemCodes(
                     INVALID_CRS, INVALID_CRS);
-            assertTrue(cos.isEmpty());
+            fail("Should have failed with a FactoryException");
         } catch (FactoryException e) {
-            fail(factory.getClass().getSimpleName() + " threw a FactoryException when requesting"
-                    + "a nonexistent operation. Instead, a NoSuchAuthorityCodeException was expected.");
+            // fine
         }
         
         try {
diff --git a/modules/plugin/epsg-hsql/src/test/java/org/geotools/referencing/factory/epsg/LongitudeFirstFactoryOverrideTest.java b/modules/plugin/epsg-hsql/src/test/java/org/geotools/referencing/factory/epsg/LongitudeFirstFactoryOverrideTest.java
index 12a0f9d..cf7e925 100644
--- a/modules/plugin/epsg-hsql/src/test/java/org/geotools/referencing/factory/epsg/LongitudeFirstFactoryOverrideTest.java
+++ b/modules/plugin/epsg-hsql/src/test/java/org/geotools/referencing/factory/epsg/LongitudeFirstFactoryOverrideTest.java
@@ -24,6 +24,7 @@ import org.geotools.factory.AbstractFactory;
 import org.geotools.referencing.CRS;
 import org.geotools.referencing.ReferencingFactoryFinder;
 import org.junit.After;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -71,10 +72,8 @@ public class LongitudeFirstFactoryOverrideTest {
     }
     
     @After
-    public void tearDown() {
-        // unset axis ordering hint
+    public void tearDown() throws Exception {
         System.clearProperty("org.geotools.referencing.forceXY");
-        
         CRS.reset("all");
     }
     
