diff --git a/org.eclipse.help.base/META-INF/MANIFEST.MF b/org.eclipse.help.base/META-INF/MANIFEST.MF
index bd52a88..41cf716 100644
--- a/org.eclipse.help.base/META-INF/MANIFEST.MF
+++ b/org.eclipse.help.base/META-INF/MANIFEST.MF
@@ -44,7 +44,8 @@
  org.eclipse.help;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
  org.eclipse.core.expressions;bundle-version="[3.4.200,4.0.0)",
  org.apache.lucene.analysis;bundle-version="[3.5.0,4.0.0)",
- org.apache.lucene.core;bundle-version="[3.5.0,4.0.0)"
+ org.apache.lucene.core;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.net;bundle-version="1.2.200"
 Import-Package: com.ibm.icu.text,
  org.eclipse.equinox.http.jetty;resolution:=optional
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpProvider.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpProvider.java
index 6e3c8ab..b5fd3e8 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpProvider.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@
 import java.net.URL;
 
 import org.eclipse.help.internal.HelpPlugin.IHelpProvider;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.protocols.HelpURLStreamHandler;
 
 /*
@@ -31,7 +32,7 @@
 		try {
 			URL helpURL = new URL("help", //$NON-NLS-1$
 					null, -1, href + "?lang=" + locale, HelpURLStreamHandler.getDefault()); //$NON-NLS-1$
-			return helpURL.openStream();
+			return ProxyUtil.getStream(helpURL);
 		} catch (IOException ioe) {
 			return null;
 		}
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteContextProvider.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteContextProvider.java
index bf39816..5a0d07b 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteContextProvider.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteContextProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@
 import org.eclipse.help.AbstractContextProvider;
 import org.eclipse.help.IContext;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.context.Context;
 import org.eclipse.help.internal.dynamic.DocumentReader;
 
@@ -59,7 +60,7 @@
 						if(protocols[i].equals(PROTOCOL))
 						{
 							url = new URL(PROTOCOL, host[i], new Integer(port[i]).intValue(), path[i]+ PATH_CONTEXT + '?' + PARAM_ID + '=' + id + '&' + PARAM_LANG + '=' + locale);
-							connection = (HttpURLConnection) url.openConnection();
+							connection = (HttpURLConnection)ProxyUtil.getConnection(url);
 							if (connection.getResponseCode() == 200) {
 								in = connection.getInputStream();
 								
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteExtensionProvider.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteExtensionProvider.java
index 4b0388b..2758ae5 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteExtensionProvider.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteExtensionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others.
+ * Copyright (c) 2006, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@
 import org.eclipse.help.IContentExtension;
 import org.eclipse.help.internal.UAElement;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.dynamic.DocumentReader;
 
 public class RemoteExtensionProvider extends AbstractContentExtensionProvider {
@@ -52,7 +53,7 @@
 						
 						if(url.getProtocol().equalsIgnoreCase(PROTOCOL_HTTP))
 						{
-							in = url.openStream();
+							in = ProxyUtil.getStream(url);
 						}
 						else
 						{
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java
index c8ef685..1cae296 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others.
+ * Copyright (c) 2006, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@
 import org.eclipse.help.AbstractIndexProvider;
 import org.eclipse.help.IIndexContribution;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 
 /*
  * Provides the TOC data that is located on the remote infocenter, if the system
@@ -65,7 +66,7 @@
 						if(protocol[ic].equals(PROTOCOL_HTTP))
 						{
 							url = RemoteHelp.getURL(ic, PATH_INDEX + '?' + PARAM_LANG + '=' + locale);
-							in = url.openStream();
+							in = ProxyUtil.getStream(url);
 						}
 						else
 						{
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java
index 5f9f005..cc2eb70 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java
@@ -1,5 +1,5 @@
 /***************************************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and others. All rights reserved. This program and the
+ * Copyright (c) 2006, 2014 IBM Corporation and others. All rights reserved. This program and the
  * accompanying materials are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.search.ISearchHitCollector;
 import org.eclipse.help.internal.search.ISearchQuery;
 import org.eclipse.help.internal.search.QueryTooComplexException;
@@ -61,7 +62,7 @@
 							if(protocols[i].equals(PROTOCOL_HTTP))
 							{
 								url = new URL("http", host[i], new Integer(port[i]).intValue(), path[i] + PATH_SEARCH + '?' + PARAM_PHRASE + '=' + URLCoder.encode(searchQuery.getSearchWord()) + '&' + PARAM_LANG + '=' + searchQuery.getLocale()); //$NON-NLS-1$
-								in = url.openStream();
+								in = ProxyUtil.getStream(url);
 							}
 							else
 							{
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteTocProvider.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteTocProvider.java
index af42144..30055fb 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteTocProvider.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteTocProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@
 import org.eclipse.help.AbstractTocProvider;
 import org.eclipse.help.ITocContribution;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 
 /*
  * Provides the TOC data that is located on the remote infocenter, if the system
@@ -88,7 +89,7 @@
 							url = new URL(protocol[i], host[i], new Integer(port[i]) .intValue(), 
 									path[i] + PATH_TOC + '?' + PARAM_LANG + '=' + locale);
 							
-							in = url.openStream();
+							in = ProxyUtil.getStream(url);
 							urlStr = PROTOCOL + "://"+host[i] + ":" + port[i] + path[i]; //$NON-NLS-1$ //$NON-NLS-2$
 						}
 						else
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/ProxyUtil.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/ProxyUtil.java
new file mode 100644
index 0000000..c5308ab
--- /dev/null
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/ProxyUtil.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.internal.base.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.net.Authenticator;
+import java.net.InetSocketAddress;
+import java.net.PasswordAuthentication;
+import java.net.Proxy;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.internal.net.ProxyManager;
+import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.net.proxy.IProxyService;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+
+public class ProxyUtil {
+	
+	public static boolean isAuthConnSupported()
+	{
+		try {
+			Class.forName("org.eclipse.core.net.proxy.IProxyService"); //$NON-NLS-1$
+			return true;
+		} catch (ClassNotFoundException e) {
+			e.printStackTrace();
+		}
+		return false;
+	}
+	
+	public static IProxyData getProxy(URL url)
+	{
+		if (!isAuthConnSupported())
+			return null;
+		
+		IProxyService service = ProxyManager.getProxyManager();
+		IProxyData data[];
+		
+		if (!service.isProxiesEnabled())
+			return null;
+		
+		try {
+			URI uri = url.toURI();
+			if (shouldBypass(uri))
+				return null;
+			data = service.select(uri);
+		} catch (URISyntaxException e) {
+			e.printStackTrace();
+			return null;
+		}
+		
+		if (data.length==0)
+			return null;
+		return data[0];
+	}
+	
+	public static boolean shouldBypass(URI uri)
+	{
+		String host = uri.getHost();
+		if (host==null)
+			return true;
+		
+		List<String> hosts = getProxyBypassHosts();
+		if (hosts.contains(host))
+			return true;
+		if ((host.equals("localhost") || host.equals("127.0.0.1")) && hosts.contains("<local>")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			return true;
+		return false;
+	}
+	
+
+	public static List<String> getProxyBypassHosts()
+	{
+		List<String> hosts = new ArrayList<String>();
+		if (!isAuthConnSupported())
+			return hosts;
+		
+		IProxyService service = ProxyManager.getProxyManager();
+		String manuals[] = service.getNonProxiedHosts();
+		String natives[] = null;
+		if (service instanceof ProxyManager)
+			natives = ((ProxyManager)service).getNativeNonProxiedHosts();
+
+		for (int m=0;m<manuals.length;m++)
+			hosts.add(manuals[m]);
+		if (natives!=null)
+			for (int n=0;n<natives.length;n++)
+				hosts.add(natives[n]);
+		return hosts;
+	}
+	
+	public static URLConnection getConnection(URL url) throws IOException
+	{
+		IProxyData data = getProxy(url);
+		if (data==null)
+			return url.openConnection();
+
+		if (data.isRequiresAuthentication())
+			Authenticator.setDefault(new ProxyAuthenticator(data.getUserId(),data.getPassword()));
+		else
+			Authenticator.setDefault(null);
+
+		Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(data.getHost(), data.getPort()));
+		return url.openConnection(proxy);
+	}
+
+	
+	public static InputStream getStream(URL url) throws IOException
+	{
+		return getConnection(url).getInputStream();
+	}
+
+	
+	private static class ProxyAuthenticator extends Authenticator {  
+
+		private String user, password;  
+ 
+		public ProxyAuthenticator(String user, String password) {  
+			this.user = user;  
+			this.password = password;  
+		}  
+		
+		protected PasswordAuthentication getPasswordAuthentication() {  
+			return new PasswordAuthentication(user, password.toCharArray());  
+		}  
+	}  
+}
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/TestConnectionUtility.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/TestConnectionUtility.java
index b5a30d6..ac84dcb 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/TestConnectionUtility.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/TestConnectionUtility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * Copyright (c) 2008, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,7 +65,7 @@
 	{
 		InputStream in = null;
 		try{
-			URLConnection connection = url.openConnection();
+			URLConnection connection = ProxyUtil.getConnection(url);
 			setTimeout(connection, SOCKET_TIMEOUT);
 			connection.connect();
 			in = connection.getInputStream();
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java b/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
index c12e02f..00a7abe 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@
 import org.eclipse.help.internal.base.remote.RemoteContentLocator;
 import org.eclipse.help.internal.base.remote.RemoteHelp;
 import org.eclipse.help.internal.base.remote.RemoteHelpInputStream;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.util.ResourceLocator;
 import org.eclipse.help.internal.util.URLCoder;
 import org.osgi.framework.Bundle;
@@ -408,7 +409,7 @@
 			if(remoteURL.startsWith(PROTOCOL_HTTP))
 			{
 				url = new URL(remoteURL + pathSuffix);
-				HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+				HttpURLConnection connection = (HttpURLConnection) ProxyUtil.getConnection(url);
 				in = connection.getInputStream();
 			}
 			else
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLDocParser.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLDocParser.java
index 36cc296..9e42fa5 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLDocParser.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLDocParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@
 import java.util.StringTokenizer;
 
 import org.apache.lucene.demo.html.HTMLParser;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 
 /**
  * Parser HTML documents. Extracts document encoding from header, and delegates
@@ -62,14 +63,14 @@
 	 * @throws IOException
 	 */
 	public void openDocument(URL url) throws IOException {
-		inputStream = url.openStream();
+		inputStream = ProxyUtil.getStream(url);
 
 		String encoding = getCharsetFromHTML(inputStream);
 		try {
 			inputStream.close();
 		} catch (IOException closeIOE) {
 		}
-		inputStream = url.openStream();
+		inputStream = ProxyUtil.getStream(url);
 		if (encoding != null) {
 			try {
 				htmlParser = new HTMLParser(new InputStreamReader(inputStream,
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java
index def26f9..a855870 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@
 import org.eclipse.core.runtime.content.IContentDescriber;
 import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.xhtml.XHTMLContentDescriber;
 import org.eclipse.help.search.IHelpSearchIndex;
 import org.eclipse.help.search.ISearchDocument;
@@ -105,7 +106,7 @@
 		}
 		InputStream in = null;
 		try {
-			in = url.openStream();
+			in = ProxyUtil.getStream(url);
 			return (xhtmlDescriber.describe(in, null) == IContentDescriber.VALID);
 		} catch (Exception e) {
 			// if anything goes wrong, treat it as not xhtml
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/InfoCenter.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/InfoCenter.java
index 942184e..0722485 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/InfoCenter.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/InfoCenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@
 import org.eclipse.core.runtime.*;
 import org.eclipse.help.IHelpResource;
 import org.eclipse.help.internal.base.*;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.entityresolver.LocalEntityResolver;
 import org.eclipse.help.search.ISearchEngine;
 import org.eclipse.help.search.ISearchEngineResult;
@@ -158,7 +159,7 @@
 		InputStream is = null;
 		tocs.clear();
 		try {
-			URLConnection connection = url.openConnection();
+			URLConnection connection = ProxyUtil.getConnection(url);
 			monitor.beginTask(HelpBaseResources.InfoCenter_connecting, 5);
 			is = connection.getInputStream();
 			BufferedReader reader = new BufferedReader(new InputStreamReader(
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
index a5df71b..9466a90 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.util.ResourceLocator;
 import org.osgi.framework.Bundle;
 
@@ -142,7 +143,7 @@
 		}
 		InputStream in = null;
 		try {
-			in = url.openStream();
+			in = ProxyUtil.getStream(url);
 			Properties prop = new Properties();
 			prop.load(in);
 			String lucene = prop
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/EclipseConnection.java b/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/EclipseConnection.java
index 5bab464..80e0126 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/EclipseConnection.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/EclipseConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,8 @@
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 
+import org.eclipse.help.internal.base.util.ProxyUtil;
+
 /**
  * This program is used to start or stop Eclipse Infocenter application. It
  * should be launched from command line.
@@ -49,8 +51,7 @@
 
 	public void connect(URL url) throws InterruptedException, Exception {
 		try {
-			HttpURLConnection connection = (HttpURLConnection) url
-					.openConnection();
+			HttpURLConnection connection = (HttpURLConnection)ProxyUtil.getConnection(url);
 			if (connection instanceof HttpsURLConnection) {
 				HttpsURLConnection secureConnection = (HttpsURLConnection) connection;
 				// The following allows the connection to
diff --git a/org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipantXML.java b/org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipantXML.java
index 2918c07..fbf4435 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipantXML.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/search/SearchParticipantXML.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * Copyright (c) 2010, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.dynamic.DocumentReader;
 import org.eclipse.help.internal.dynamic.ExtensionHandler;
 import org.eclipse.help.internal.dynamic.IncludeHandler;
@@ -292,7 +293,7 @@
 			hasFilters = false;
 			ParsedXMLContent parsed = new ParsedXMLContent(index.getLocale());
 			XMLHandler handler = new XMLHandler(parsed);
-			stream = url.openStream();
+			stream = ProxyUtil.getStream(url);
 			stream = preprocess(stream, name, index.getLocale());
 			parser.parse(stream, handler);
 			doc.addContents(parsed.getContent());
diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java
index c6f6291..77e82ac 100644
--- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java
+++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2012 IBM Corporation and others.
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,11 +25,11 @@
 import org.eclipse.help.internal.base.HelpBasePlugin;
 import org.eclipse.help.internal.base.MissingContentManager;
 import org.eclipse.help.internal.base.remote.RemoteStatusData;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.protocols.HelpURLStreamHandler;
 import org.eclipse.help.internal.util.ProductPreferences;
 import org.eclipse.help.internal.webapp.data.UrlUtil;
 import org.eclipse.help.internal.webapp.data.WebappPreferences;
-
 import org.eclipse.core.runtime.Platform;
 
 
@@ -114,7 +114,7 @@
 					helpURL = new URL("help", //$NON-NLS-1$
 								null, -1, errorPage,
 								HelpURLStreamHandler.getDefault());
-					return helpURL.openStream();
+					return ProxyUtil.getStream(helpURL);
 				} catch (MalformedURLException e) {
 					HelpWebappPlugin.logError("Unable to locate error page: "+errorPage, e); //$NON-NLS-1$
 				} catch (IOException e) {
diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocFragmentParser.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocFragmentParser.java
index cd5cca6..a985a68 100644
--- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocFragmentParser.java
+++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocFragmentParser.java
@@ -17,6 +17,7 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.webapp.utils.JSonHelper;
 import org.eclipse.help.internal.webapp.utils.XMLHelper;
 import org.xml.sax.Attributes;
@@ -36,7 +37,7 @@
 	public void parse(URL tocURL, int level) 
 		throws ParserConfigurationException, SAXException, IOException
 	{
-		parse(tocURL.openStream(), level);
+		parse(ProxyUtil.getStream(tocURL), level);
 	}
 	
 	public void parse(InputStream in, int level) 
diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContentService.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContentService.java
index e1873a6..3b72eee 100644
--- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContentService.java
+++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContentService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 IBM Corporation and others.
+ * Copyright (c) 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.webapp.utils.Utils;
 
 /**
@@ -54,7 +55,7 @@
 			contentURL += '?' + query;
 		
 		URL url = new URL(contentURL);
-		URLConnection con = url.openConnection();
+		URLConnection con = ProxyUtil.getConnection(url);
 		con.setAllowUserInteraction(false);
 		con.setDoInput(true);
 		con.connect();
@@ -78,7 +79,7 @@
 			Utils.transferContent(is, out);
 			out.flush();
 		} else {
-			String response = Utils.convertStreamToString(url.openStream());
+			String response = Utils.convertStreamToString(ProxyUtil.getStream(url));
 			response = Utils.updateResponse(response);
 			PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8")); //$NON-NLS-1$
 			writer.write(response);
diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/NavService.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/NavService.java
index 987b239..b634cc1 100644
--- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/NavService.java
+++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/NavService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 IBM Corporation and others.
+ * Copyright (c) 2011, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@
 import org.eclipse.help.ITopic;
 import org.eclipse.help.base.AbstractHelpScope;
 import org.eclipse.help.internal.base.scope.ScopeUtils;
+import org.eclipse.help.internal.base.util.ProxyUtil;
 import org.eclipse.help.internal.webapp.data.RequestScope;
 import org.eclipse.help.internal.webapp.data.UrlUtil;
 import org.eclipse.help.internal.webapp.parser.NavParser;
@@ -104,7 +105,7 @@
 		if (query != null)
 			navURL += '?' + query;
 		URL url = new URL(navURL);
-		String response = Utils.convertStreamToString(url.openStream());
+		String response = Utils.convertStreamToString(ProxyUtil.getStream(url));
 		response = Utils.updateResponse(response);
 		
 		OutputStream out = resp.getOutputStream();
