diff --git a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/FallbackTransportFactory.java b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/FallbackTransportFactory.java
index 2af3b9a..1534b60 100644
--- a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/FallbackTransportFactory.java
+++ b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/FallbackTransportFactory.java
@@ -146,8 +146,9 @@
 		if (delegateFactory == null) {
 			BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext();
 			try {
-				Collection<ServiceReference<ITransportFactory>> serviceReferences = bundleContext
-						.getServiceReferences(ITransportFactory.class, null);
+				String disabledTransportsFilter = TransportFactory.computeDisabledTransportsFilter();
+				Collection<ServiceReference<ITransportFactory>> serviceReferences = bundleContext.getServiceReferences(
+						ITransportFactory.class, "".equals(disabledTransportsFilter) ? null : disabledTransportsFilter); //$NON-NLS-1$
 				if (!serviceReferences.isEmpty()) {
 					for (ServiceReference<ITransportFactory> serviceReference : serviceReferences) {
 						ITransportFactory service = bundleContext.getService(serviceReference);
diff --git a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/TransportFactory.java b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/TransportFactory.java
index de29ed4..347a733 100644
--- a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/TransportFactory.java
+++ b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/util/TransportFactory.java
@@ -18,8 +18,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.http.NoHttpResponseException;
 import org.eclipse.core.runtime.CoreException;
@@ -32,6 +34,7 @@
 import org.eclipse.epp.mpc.core.service.ITransportFactory;
 import org.eclipse.epp.mpc.core.service.ServiceHelper;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentConstants;
@@ -52,11 +55,49 @@
 
 	public static final String LEGACY_TRANSPORT_COMPONENT_NAME = "org.eclipse.epp.mpc.core.transportfactory.legacy"; //$NON-NLS-1$
 
+	public static final String DISABLED_TRANSPORTS_KEY = "org.eclipse.epp.mpc.core.service.transport.disabled"; //$NON-NLS-1$
+
 	private static final String[] factoryClasses = new String[] { //
 			"org.eclipse.epp.internal.mpc.core.util.P2TransportFactory", // //$NON-NLS-1$
 			"org.eclipse.epp.internal.mpc.core.util.Eclipse36TransportFactory", // //$NON-NLS-1$
 	"org.eclipse.epp.internal.mpc.core.util.JavaPlatformTransportFactory" }; //$NON-NLS-1$
 
+	private static final String HTTP_TRANSPORT_FACTORY_ID = "org.eclipse.epp.mpc.core.transport.http.factory"; //$NON-NLS-1$
+
+	private static final String HTTP_TRANSPORT_WRAPPER_ID = "org.eclipse.epp.mpc.core.transport.http.wrapper"; //$NON-NLS-1$
+
+	private static final String ECF_HTTPCLIENT4_TRANSPORT_ID = "org.eclipse.ecf.provider.filetransfer.httpclient4"; //$NON-NLS-1$
+
+	private static final String ECF_EXCLUDES_PROPERTY = "org.eclipse.ecf.provider.filetransfer.excludeContributors"; //$NON-NLS-1$
+
+	public static String computeDisabledTransportsFilter() {
+		BundleContext bundleContext = FrameworkUtil.getBundle(TransportFactory.class).getBundleContext();
+		String disabledTransportsStr = bundleContext.getProperty(DISABLED_TRANSPORTS_KEY);
+		if (disabledTransportsStr == null) {
+			disabledTransportsStr = ""; //$NON-NLS-1$
+		}
+		String excludeContributors = bundleContext
+				.getProperty(ECF_EXCLUDES_PROPERTY);
+		if (excludeContributors != null && excludeContributors.contains(ECF_HTTPCLIENT4_TRANSPORT_ID)) {
+			disabledTransportsStr += "," + HTTP_TRANSPORT_WRAPPER_ID + "," + HTTP_TRANSPORT_FACTORY_ID; //$NON-NLS-1$//$NON-NLS-2$
+		}
+		Set<String> disabledTransports = new HashSet<String>();
+		StringBuilder bldr = new StringBuilder("(&"); //$NON-NLS-1$
+		for (String transportName : disabledTransportsStr.split(",")) { //$NON-NLS-1$
+			transportName = transportName.trim();
+			if (!"".equals(transportName) && disabledTransports.add(transportName)) { //$NON-NLS-1$
+				bldr.append("(!(") //$NON-NLS-1$
+				.append(ComponentConstants.COMPONENT_NAME)
+				.append("=") //$NON-NLS-1$
+				.append(transportName)
+				.append("))"); //$NON-NLS-1$
+			}
+		}
+		bldr.append(")"); //$NON-NLS-1$
+		String disabledTransportsFilter = disabledTransports.isEmpty() ? "" : bldr.toString(); //$NON-NLS-1$
+		return disabledTransportsFilter;
+	}
+
 	public static final class LegacyFactory implements ITransportFactory {
 		private ITransportFactory delegate;
 
@@ -77,9 +118,11 @@
 			BundleContext bundleContext = context.getBundleContext();
 			Collection<ServiceReference<ITransportFactory>> serviceReferences = bundleContext.getServiceReferences(
 					ITransportFactory.class,
-					"(&(" + LEGACY_TRANSPORT_KEY + "=true)" //$NON-NLS-1$//$NON-NLS-2$
-					+ "(!(" + ComponentConstants.COMPONENT_NAME + "=" + LEGACY_TRANSPORT_COMPONENT_NAME //$NON-NLS-1$//$NON-NLS-2$
-					+ ")))"); //$NON-NLS-1$
+					"(&" //$NON-NLS-1$
+					+ "(" + LEGACY_TRANSPORT_KEY + "=true)" //$NON-NLS-1$//$NON-NLS-2$
+					+ "(!(" + ComponentConstants.COMPONENT_NAME + "=" + LEGACY_TRANSPORT_COMPONENT_NAME + "))" //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+					+ computeDisabledTransportsFilter()
+					+ ")"); //$NON-NLS-1$
 			if (!serviceReferences.isEmpty()) {
 				for (ServiceReference<ITransportFactory> serviceReference : serviceReferences) {
 					ITransportFactory service = bundleContext.getService(serviceReference);
@@ -174,13 +217,14 @@
 	public static org.eclipse.epp.mpc.core.service.ITransport createTransport() {
 		//search for registered factory service
 		BundleContext context = MarketplaceClientCorePlugin.getBundle().getBundleContext();
-		ServiceReference<ITransportFactory> serviceReference = context.getServiceReference(ITransportFactory.class);
+		ServiceReference<ITransportFactory> serviceReference = getTransportServiceReference(context);
 		if (serviceReference != null) {
 			ITransportFactory transportService = context.getService(serviceReference);
 			if (transportService != null) {
 				try {
 					return transportService.getTransport();
 				} finally {
+					transportService = null;
 					context.ungetService(serviceReference);
 				}
 			}
@@ -188,6 +232,26 @@
 		throw new IllegalStateException();
 	}
 
+	public static ServiceReference<ITransportFactory> getTransportServiceReference(BundleContext context) {
+		ServiceReference<ITransportFactory> serviceReference = null;
+		String disabledTransportsFilter = computeDisabledTransportsFilter();
+		if ("".equals(disabledTransportsFilter)) { //$NON-NLS-1$
+			serviceReference = context.getServiceReference(ITransportFactory.class);
+		} else {
+			try {
+				Collection<ServiceReference<ITransportFactory>> serviceReferences = context
+						.getServiceReferences(ITransportFactory.class, disabledTransportsFilter);
+				if (!serviceReferences.isEmpty()) {
+					serviceReference = serviceReferences.iterator().next();
+				}
+			} catch (InvalidSyntaxException e) {
+				MarketplaceClientCore.error(e);
+				serviceReference = context.getServiceReference(ITransportFactory.class);
+			}
+		}
+		return serviceReference;
+	}
+
 	public static List<ITransportFactory> listAvailableFactories() {
 		List<ITransportFactory> factories = new ArrayList<ITransportFactory>();
 		for (String factoryClass : factoryClasses) {
diff --git a/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF b/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF
index 12f5c54..b4aec1f 100644
--- a/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.epp.mpc.tests/META-INF/MANIFEST.MF
@@ -31,6 +31,8 @@
 Import-Package: org.eclipse.ecf.core;version="3.0.0",
  org.eclipse.ecf.core.util,
  org.eclipse.ecf.filetransfer,
+ org.eclipse.ecf.internal.provider.filetransfer,
+ org.eclipse.ecf.internal.provider.filetransfer.httpclient4,
  org.eclipse.equinox.security.storage;version="1.0.0",
  org.osgi.service.component
 Export-Package: org.eclipse.epp.mpc.tests;x-internal:=true,
diff --git a/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/util/TransportFactoryTest.java b/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/util/TransportFactoryTest.java
index 443cbaa..739f9b2 100644
--- a/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/util/TransportFactoryTest.java
+++ b/org.eclipse.epp.mpc.tests/src/org/eclipse/epp/mpc/tests/util/TransportFactoryTest.java
@@ -43,6 +43,7 @@
 import org.eclipse.epp.mpc.core.service.ServiceHelper;
 import org.eclipse.epp.mpc.core.service.ServiceUnavailableException;
 import org.hamcrest.CoreMatchers;
+import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Matchers;
 import org.mockito.Mockito;
@@ -53,6 +54,12 @@
 
 public class TransportFactoryTest {
 
+	@Before
+	public void clearTransportFilters() {
+		System.getProperties().remove("org.eclipse.epp.mpc.core.service.transport.disabled");
+		System.getProperties().remove("org.eclipse.ecf.provider.filetransfer.excludeContributors");
+	}
+
 	@Test
 	public void testRegisteredFactories() throws Exception {
 		BundleContext context = MarketplaceClientCorePlugin.getBundle().getBundleContext();
@@ -138,6 +145,30 @@
 		assertEquals("org.eclipse.epp.mpc.core.transport.http.wrapper", transportServiceName);
 	}
 
+	@Test
+	public void testDisableTransports() {
+		System.setProperty("org.eclipse.epp.mpc.core.service.transport.disabled",
+				"org.eclipse.epp.mpc.core.transport.http.wrapper");
+		String transportServiceName = getTransportServiceName();
+		assertEquals("legacy:org.eclipse.epp.internal.mpc.core.util.P2TransportFactory", transportServiceName);
+
+		System.setProperty("org.eclipse.epp.mpc.core.service.transport.disabled",
+				"org.eclipse.epp.mpc.core.transport.http.wrapper,"
+						+ "legacy:org.eclipse.epp.internal.mpc.core.util.P2TransportFactory,"
+						+ "legacy:org.eclipse.epp.internal.mpc.core.util.Eclipse36TransportFactory");
+		transportServiceName = getTransportServiceName();
+		assertEquals("legacy:org.eclipse.epp.internal.mpc.core.util.JavaPlatformTransportFactory",
+				transportServiceName);
+	}
+
+	@Test
+	public void testDisableHttpClientTransportsThroughECF() {
+		System.setProperty("org.eclipse.ecf.provider.filetransfer.excludeContributors",
+				"org.eclipse.ecf.provider.filetransfer.httpclient4");
+		String transportServiceName = getTransportServiceName();
+		assertEquals("legacy:org.eclipse.epp.internal.mpc.core.util.P2TransportFactory", transportServiceName);
+	}
+
 	@Test(expected = ServiceUnavailableException.class)
 	public void testHttpClientTransportErrorHandling() throws Exception {
 		createFailingHttpClientTransport().stream(URI.create("http://127.0.0.1:54321"), null);
@@ -186,6 +217,14 @@
 		assertSame(expectedResultStream, stream);
 	}
 
+	@Test
+	public void testECFContributorPropertiesUnchanged() {
+		assertEquals("org.eclipse.ecf.provider.filetransfer.excludeContributors",
+				org.eclipse.ecf.internal.provider.filetransfer.Activator.PLUGIN_EXCLUDED_SYS_PROP_NAME);
+		assertEquals("org.eclipse.ecf.provider.filetransfer.httpclient4",
+				org.eclipse.ecf.internal.provider.filetransfer.httpclient4.Activator.PLUGIN_ID);
+	}
+
 	private static HttpResponse mockResponse(StatusLine statusLine, HttpEntity entity) {
 		HttpResponse mockResponse = Mockito.mock(HttpResponse.class);
 		Mockito.when(mockResponse.getStatusLine()).thenReturn(statusLine);
@@ -202,8 +241,8 @@
 
 	private static String getTransportServiceName() {
 		BundleContext bundleContext = FrameworkUtil.getBundle(TransportFactory.class).getBundleContext();
-		ServiceReference<ITransportFactory> transportServiceReference = bundleContext.getServiceReference(
-				ITransportFactory.class);
+		ServiceReference<ITransportFactory> transportServiceReference = TransportFactory.getTransportServiceReference(
+				bundleContext);
 		if (transportServiceReference != null) {
 			String transportServiceName = (String) transportServiceReference.getProperty(
 					ComponentConstants.COMPONENT_NAME);
