diff --git a/asciidoc/release-notes.adoc b/asciidoc/release-notes.adoc
index 7de155a..782e75d 100644
--- a/asciidoc/release-notes.adoc
+++ b/asciidoc/release-notes.adoc
@@ -19,7 +19,7 @@
 
 = Ivy Release Announcement
 
-XXXX Date XXXX - The Apache Ivy project is pleased to announce its 2.6.0 release.
+XXXX Date XXXX - The Apache Ivy project is pleased to announce its 2.5.3 release.
 
 == What is Ivy?
 Apache Ivy is a tool for managing (recording, tracking, resolving and reporting) project dependencies, characterized by flexibility,
@@ -34,7 +34,7 @@
 
 == Key features in this release
 
-Key features of this 2.6.0 release are:
+Key features of this 2.5.3 release are:
 
 == List of Changes in this Release
 
@@ -42,6 +42,8 @@
 
 *List of changes since Ivy 2.5.2:*
 
+- FIX: trying to set safe XML features causes SAXExceptions when used with certain XML parsers (jira:IVY-1647[])
+
 ////
  Samples :
 - NEW: bla bla bla (jira:IVY-1234[]) (Thanks to Jane Doe)
diff --git a/src/java/org/apache/ivy/util/XMLHelper.java b/src/java/org/apache/ivy/util/XMLHelper.java
index e5bfa7b..9fc740a 100644
--- a/src/java/org/apache/ivy/util/XMLHelper.java
+++ b/src/java/org/apache/ivy/util/XMLHelper.java
@@ -88,9 +88,11 @@
             }
         }
         final XMLReader reader = parser.getXMLReader();
-        reader.setFeature(XML_NAMESPACE_PREFIXES, true);
-        reader.setProperty(XML_ACCESS_EXTERNAL_SCHEMA, externalResources.getAllowedProtocols());
-        reader.setProperty(XML_ACCESS_EXTERNAL_DTD, externalResources.getAllowedProtocols());
+        trySetFeature(reader, XML_NAMESPACE_PREFIXES, true);
+        trySetProperty(reader, XML_ACCESS_EXTERNAL_SCHEMA,
+                       externalResources.getAllowedProtocols());
+        trySetProperty(reader, XML_ACCESS_EXTERNAL_DTD,
+                       externalResources.getAllowedProtocols());
         return parser;
     }
 
@@ -425,6 +427,15 @@
         }
     }
 
+    private static boolean isFeatureSupported(final XMLReader reader, final String feature) {
+        try {
+            reader.getFeature(feature);
+            return true;
+        } catch (SAXException e) {
+            return false;
+        }
+    }
+
     private static boolean isAttributeSupported(final TransformerFactory factory, final String attribute) {
         try {
             factory.getAttribute(attribute);
@@ -434,6 +445,15 @@
         }
     }
 
+    private static boolean isPropertySupported(final XMLReader reader, final String property) {
+        try {
+            reader.getProperty(property);
+            return true;
+        } catch (SAXException e) {
+            return false;
+        }
+    }
+
     private static boolean trySetFeature(final DocumentBuilderFactory factory,
                                                final String feature, final boolean val) {
         if (!isFeatureSupported(factory, feature)) {
@@ -472,6 +492,21 @@
         }
     }
 
+    private static boolean trySetFeature(final XMLReader reader,
+                                         final String feature, final boolean val) {
+        if (!isFeatureSupported(reader, feature)) {
+            return false;
+        }
+        try {
+            reader.setFeature(feature, val);
+            return true;
+        } catch (SAXException e) {
+            // log and continue
+            Message.warn("Failed to set feature " + feature + " on XMLReader", e);
+            return false;
+        }
+    }
+
     private static boolean trySetAttribute(final TransformerFactory factory,
                                          final String attribute, final String val) {
         if (!isAttributeSupported(factory, attribute)) {
@@ -487,6 +522,21 @@
         }
     }
 
+    private static boolean trySetProperty(final XMLReader reader,
+                                          final String property, final Object val) {
+        if (!isPropertySupported(reader, property)) {
+            return false;
+        }
+        try {
+            reader.setProperty(property, val);
+            return true;
+        } catch (SAXException e) {
+            // log and continue
+            Message.warn("Failed to set property " + property + " on XMLReader", e);
+            return false;
+        }
+    }
+
     private static final InputSource EMPTY_INPUT_SOURCE = new InputSource(new StringReader(""));
 
     private static class NoopEntityResolver implements EntityResolver {
diff --git a/version.properties b/version.properties
index 57a0493..e1f7821 100644
--- a/version.properties
+++ b/version.properties
@@ -16,9 +16,9 @@
 #	 * specific language governing permissions and limitations
 #	 * under the License.
 #	 ***************************************************************
-target.ivy.version=2.6.0
+target.ivy.version=2.5.3
 # Following OSGi spec: have to be 3 numbers separated by dots
-target.ivy.bundle.version=2.6.0
+target.ivy.bundle.version=2.5.3
 # in case we want to add a qualifier such as alpha, beta, etc...
 # if non empty, add a '_' at the end of the qualifier, so the version would look like 1.2.3.alpha_200901011200
 # NB: be careful with naming, OSGi orders version alphabetically. Suggested values: alpha_, beta_, cr1_ (for RC-1), final_
