diff --git a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryPreferences.java b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryPreferences.java
index a126e80..23ce204 100644
--- a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryPreferences.java
+++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryPreferences.java
@@ -15,25 +15,44 @@
  */
 public class RepositoryPreferences {
 
+	/** See bug 574173: allow to retry download if specified */
+	private static boolean retryOnSocketTimeout = Boolean.getBoolean("p2.RepositoryPreferences.retryOnSocketTimeout"); //$NON-NLS-1$
+
+	/** See bug 574173 */
+	private static int connectionRetryCount = Integer.getInteger("p2.RepositoryPreferences.connectionRetryCount", 1); //$NON-NLS-1$
+
+	/** See bug 574173 */
+	private static int connectionMsRetryDelay = Integer.getInteger("p2.RepositoryPreferences.connectionMsRetryDelay", //$NON-NLS-1$
+			200);
+
 	/**
-	 * Number of attempts to connect (with same credentials) before giving up.
-	 * Note that newer ECF using apache HTTPclient has retry by default.
-	 * TODO - make this configurable via a property.
-	 * TODO - consider removing this option
+	 * Number of attempts to connect (with same credentials) before giving up. Note
+	 * that newer ECF using apache HTTPclient has retry by default. TODO - consider
+	 * removing this option
+	 *
 	 * @return the value 1
 	 */
 	public static int getConnectionRetryCount() {
-		return 1;
+		return connectionRetryCount;
 	}
 
 	/**
 	 * Reconnect delay after failure to connect (with same credentials)- in milliseconds.
 	 * Current implementation returns 200ms.
-	 * TODO - make this configurable via a property
 	 * @return the value 200
 	 */
 	public static long getConnectionMsRetryDelay() {
-		return 200;
+		return connectionMsRetryDelay;
+	}
+
+	/**
+	 * Whether an attempt should be made to retry download if the connection was
+	 * terminated by SocketTimeoutException
+	 *
+	 * @return {@code false} by default
+	 */
+	public static boolean getRetryOnSocketTimeout() {
+		return retryOnSocketTimeout;
 	}
 
 	/**
diff --git a/bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileReader.java b/bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileReader.java
index 6e6d6b9..97c7e2f 100644
--- a/bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileReader.java
+++ b/bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileReader.java
@@ -108,6 +108,8 @@
 	private ProgressStatistics statistics;
 	private final int connectionRetryCount;
 	private final long connectionRetryDelay;
+	/** See bug 574173: allow to retry download if specified */
+	private final boolean retryOnSocketTimeout;
 	private final IConnectContext connectContext;
 	private URI requestUri;
 	protected IFileTransferConnectStartEvent connectEvent;
@@ -130,6 +132,7 @@
 		setUser(false);
 		connectionRetryCount = RepositoryPreferences.getConnectionRetryCount();
 		connectionRetryDelay = RepositoryPreferences.getConnectionMsRetryDelay();
+		retryOnSocketTimeout = RepositoryPreferences.getRetryOnSocketTimeout();
 		connectContext = aConnectContext;
 		this.agent = aAgent;
 	}
@@ -512,11 +515,14 @@
 			if (t instanceof CoreException)
 				throw RepositoryStatusHelper.unwindCoreException((CoreException) t);
 
-			// not meaningful to try 'timeout again' - if a server is that busy, we
-			// need to wait for quite some time before retrying- it is not likely it is
-			// just a temporary network thing.
-			if (t instanceof SocketTimeoutException)
-				throw RepositoryStatusHelper.wrap(t);
+			if (!retryOnSocketTimeout) {
+				// not meaningful to try 'timeout again' - if a server is that busy, we
+				// need to wait for quite some time before retrying- it is not likely it is
+				// just a temporary network thing.
+				if (t instanceof SocketTimeoutException) {
+					throw RepositoryStatusHelper.wrap(t);
+				}
+			}
 
 			if (t instanceof IOException && attemptCounter < connectionRetryCount) {
 				// TODO: Retry only certain exceptions or filter out
