diff --git a/bundles/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
index 2392378..526183c 100644
--- a/bundles/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
@@ -7,7 +7,7 @@
 Bundle-Activator: org.eclipse.equinox.internal.p2.core.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.repository",
+Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.engine",
  org.eclipse.equinox.internal.p2.core.helpers;
   x-friends:="org.eclipse.equinox.frameworkadmin.test,
    org.eclipse.equinox.p2.artifact.optimizers,
diff --git a/bundles/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF
index cb812be2..21ba682 100644
--- a/bundles/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF
@@ -25,16 +25,19 @@
  J2SE-1.4,
  CDC-1.1/Foundation-1.1
 Bundle-ActivationPolicy: lazy
-Service-Component: OSGI-INF/profileRegistry.xml, OSGI-INF/engine.xml
+Service-Component: OSGI-INF/profileRegistry.xml, OSGI-INF/engine.xml,
+ OSGI-INF/MasterRepositoryPreferenceProvider.xml
 Import-Package: javax.xml.parsers,
  org.eclipse.core.internal.preferences,
  org.eclipse.core.runtime.preferences,
+ org.eclipse.equinox.internal.p2.core,
  org.eclipse.equinox.internal.p2.core.helpers,
  org.eclipse.equinox.internal.p2.metadata,
  org.eclipse.equinox.internal.p2.metadata.index,
  org.eclipse.equinox.internal.p2.metadata.repository.io,
  org.eclipse.equinox.internal.p2.persistence,
  org.eclipse.equinox.internal.p2.repository,
+ org.eclipse.equinox.internal.p2.repository.helpers,
  org.eclipse.equinox.internal.provisional.p2.core.eventbus,
  org.eclipse.equinox.internal.provisional.p2.repository,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
diff --git a/bundles/org.eclipse.equinox.p2.engine/MasterRepositoryPreferenceProvider.xml b/bundles/org.eclipse.equinox.p2.engine/MasterRepositoryPreferenceProvider.xml
new file mode 100644
index 0000000..026fa0e
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.engine/OSGI-INF/MasterRepositoryPreferenceProvider.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.equinox.p2.engine.IMasterRepositoryPreferenceProviderService">
+   <implementation class="org.eclipse.equinox.p2.engine.MasterProfilePreferencesProvider"/>
+   <service>
+      <provide interface="org.eclipse.equinox.internal.p2.repository.helpers.IMasterProfilePreferencesProvider"/>
+   </service>
+</scr:component>
diff --git a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/MasterProfilePreferencesProvider.java b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/MasterProfilePreferencesProvider.java
new file mode 100644
index 0000000..0fef156
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/MasterProfilePreferencesProvider.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Red Hat,Inc. 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:
+ *     Red Hat,Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.engine;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Hashtable;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.equinox.internal.p2.core.ProvisioningAgent;
+import org.eclipse.equinox.internal.p2.engine.EngineActivator;
+import org.eclipse.equinox.internal.p2.repository.Activator;
+import org.eclipse.equinox.internal.p2.repository.helpers.IMasterProfilePreferencesProvider;
+import org.eclipse.equinox.p2.core.IAgentLocation;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.prefs.Preferences;
+
+public class MasterProfilePreferencesProvider implements IMasterProfilePreferencesProvider {
+
+   public Preferences getMasterPreferences(String profileName, String node) {
+
+       URI location;
+       try {
+           String sharedConfig = Activator.getContext().getProperty("osgi.sharedConfiguration.area"); //$NON-NLS-1$
+
+           if (sharedConfig == null)
+               return null;
+           //find where the profile is located by default
+           location = URIUtil.fromString(sharedConfig + "../p2" + '/'); //$NON-NLS-1$
+
+       } catch (URISyntaxException e1) {
+           //should not happen as Equinox will complain first.
+           return null;
+       }
+
+       if (location == null) {
+           // no master location, quit
+           return null;
+       }
+
+       // This is copied from tests
+       ProvisioningAgent agent = new ProvisioningAgent();
+       agent.setLocation(location);
+       agent.setBundleContext(EngineActivator.getContext());
+       IAgentLocation agentLocation = (IAgentLocation) agent.getService(IAgentLocation.SERVICE_NAME);
+       Hashtable<String, String> props = new Hashtable<String, String>();
+       props.put("locationURI", location.toString()); //$NON-NLS-1$
+
+       @SuppressWarnings("rawtypes")
+       ServiceRegistration reg = EngineActivator.getContext().registerService(IProvisioningAgent.SERVICE_NAME, agent, props);
+       try {
+           return new ProfileScope(agentLocation, profileName).getNode(node);
+       } finally {
+           reg.unregister();
+       }
+   }
+}
diff --git a/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
index e32ff0f..b1d12c1 100644
--- a/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
@@ -26,7 +26,8 @@
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.repository.tools,
    org.eclipse.equinox.p2.ui,
-   org.eclipse.equinox.p2.updatesite",
+   org.eclipse.equinox.p2.updatesite,
+   org.eclipse.equinox.p2.engine",
  org.eclipse.equinox.internal.provisional.p2.repository,
  org.eclipse.equinox.p2.repository;version="2.0.0",
  org.eclipse.equinox.p2.repository.artifact;version="2.1.0",
@@ -41,6 +42,7 @@
  CDC-1.1/Foundation-1.1
 Bundle-ActivationPolicy: lazy
 Import-Package: javax.xml.parsers,
+ org.eclipse.core.internal.preferences,
  org.eclipse.core.runtime.jobs,
  org.eclipse.core.runtime.preferences;version="3.2.0",
  org.eclipse.equinox.internal.p2.core,
diff --git a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/IMasterProfilePreferencesProvider.java b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/IMasterProfilePreferencesProvider.java
new file mode 100644
index 0000000..fac54ea
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/IMasterProfilePreferencesProvider.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Red Hat,Inc. 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:
+ *     Red Hat,Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.repository.helpers;
+
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * This service does its best to locate master profile and get preferences
+ * stored in master ProfileScope.
+ *
+ */
+public interface IMasterProfilePreferencesProvider {
+   public Preferences getMasterPreferences(String profileName, String node);
+}
--- a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java.orig	2012-05-05 15:24:03.000000000 +0200
+++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java	2012-05-18 16:18:18.029669647 +0200
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Wind River - fix for bug 299227
  *     Sonatype, Inc. - transport split
+ *     Red Hat,Inc. - fix for bug 249133
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.repository.helpers;
 
@@ -33,6 +34,7 @@
 import org.eclipse.osgi.util.NLS;
 import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.service.prefs.Preferences;
+import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * Common code shared between artifact and metadata repository managers.
@@ -981,6 +983,61 @@
 		saveToPreferences();
 	}
 
+   private void restoreFromMasterPreferences() {
+       // restore the list of repositories from the preference store
+       Preferences node = getPreferences();
+       if (node == null)
+           return;
+
+       {
+           ServiceTracker<IMasterProfilePreferencesProvider, IMasterProfilePreferencesProvider> tracker = new ServiceTracker<IMasterProfilePreferencesProvider, IMasterProfilePreferencesProvider>(Activator.getContext(), IMasterProfilePreferencesProvider.class.getName(), null);
+           tracker.open();
+           IMasterProfilePreferencesProvider pprovider = tracker.getService();
+	    if(pprovider == null) return;
+           String profileName = node.parent().parent().name();
+           String nodeName = node.parent().name();
+
+           Preferences rootNode = pprovider.getMasterPreferences(profileName, nodeName);
+
+           if (rootNode == null)
+               return;
+
+           /*repositories*/
+           node = rootNode.node(NODE_REPOSITORIES);
+       }
+
+       String[] children;
+       try {
+           children = node.childrenNames();
+       } catch (BackingStoreException e) {
+           log("Error restoring repositories from preferences", e); //$NON-NLS-1$
+           return;
+       }
+
+       for (int i = 0; i < children.length; i++) {
+           Preferences child = node.node(children[i]);
+           URI location = getRepositoryLocation(child);
+           if (location == null) {
+               try {
+                   child.removeNode();
+                   continue;
+               } catch (BackingStoreException e) {
+                   log("Error removing invalid repository", e); //$NON-NLS-1$
+               }
+           }
+           RepositoryInfo<T> info = new RepositoryInfo<T>();
+           info.location = location;
+           info.name = child.get(KEY_NAME, null);
+           info.nickname = child.get(KEY_NICKNAME, null);
+           info.description = child.get(KEY_DESCRIPTION, null);
+           info.isSystem = child.getBoolean(KEY_SYSTEM, false);
+           info.isEnabled = child.getBoolean(KEY_ENABLED, true);
+           info.suffix = child.get(KEY_SUFFIX, null);
+           repositories.put(getKey(info.location), info);
+        }
+    }
+
+
 	private void restoreFromSystemProperty() {
 		String locationString = Activator.getContext().getProperty(getRepositorySystemProperty());
 		if (locationString != null) {
@@ -1004,6 +1062,7 @@
 			restoreSpecialRepositories();
 			restoreFromSystemProperty();
 			restoreFromPreferences();
+			restoreFromMasterPreferences();
 		}
 	}
 
