diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceCatalog.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceCatalog.java
index a99bf50..7c720a1 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceCatalog.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceCatalog.java
@@ -246,7 +246,9 @@
 								.getService(IMetadataRepositoryManager.SERVICE_NAME);
 						try {
 							for (MarketplaceNodeCatalogItem item : catalogItemsThisSite) {
-								item.setAvailable(null);
+								if (Boolean.TRUE.equals(item.getAvailable())) {
+									item.setAvailable(null);
+								}
 							}
 							IMetadataRepository repository = manager.loadRepository(uri, pm);
 							IQuery<IInstallableUnit> query = QueryUtil.createMatchQuery( //
@@ -271,6 +273,9 @@
 									String key = createRepositoryIuKey(uri.toString(), iuItem.getId());
 									Version availableVersion = repositoryIuVersionById.get(key);
 									MarketplaceCatalog.this.repositoryIuVersionById.put(key, availableVersion);
+									if (availableVersion != null) {
+										item.setAvailable(true);
+									}
 								}
 							}
 							for (MarketplaceNodeCatalogItem item : catalogItemsThisSite) {
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/operations/AbstractProvisioningOperation.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/operations/AbstractProvisioningOperation.java
index d0af8dd..1a091ad 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/operations/AbstractProvisioningOperation.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/operations/AbstractProvisioningOperation.java
@@ -57,7 +57,7 @@
 	}
 
 	protected List<IMetadataRepository> addRepositories(SubMonitor monitor) throws
-			URISyntaxException, ProvisionException {
+	URISyntaxException, ProvisionException {
 		// tell p2 that it's okay to use these repositories
 		ProvisioningSession session = ProvisioningUI.getDefaultUI().getSession();
 		RepositoryTracker repositoryTracker = ProvisioningUI.getDefaultUI().getRepositoryTracker();
@@ -70,11 +70,14 @@
 
 		monitor.setWorkRemaining(items.size() * 5);
 		for (CatalogItem descriptor : items) {
-			URI uri = URLUtil.toURI(descriptor.getSiteUrl());
-			if (repositoryLocations.add(uri) && !knownRepositories.contains(uri)) {
-				checkCancelled(monitor);
-				repositoryTracker.addRepository(uri, null, session);
-				addedRepositoryLocations.add(uri);
+			String siteUrl = descriptor.getSiteUrl();
+			if (siteUrl != null) {
+				URI uri = URLUtil.toURI(siteUrl);
+				if (repositoryLocations.add(uri) && !knownRepositories.contains(uri)) {
+					checkCancelled(monitor);
+					repositoryTracker.addRepository(uri, null, session);
+					addedRepositoryLocations.add(uri);
+				}
 			}
 			monitor.worked(1);
 		}
@@ -124,7 +127,8 @@
 		final Set<String> installableUnitIdsThisRepository = new HashSet<String>();
 		// determine all installable units for this repository
 		for (CatalogItem descriptor : items) {
-			if (repository.getLocation().equals(URLUtil.toURI(descriptor.getSiteUrl()))) {
+			if (descriptor.getSiteUrl() != null
+					&& repository.getLocation().equals(URLUtil.toURI(descriptor.getSiteUrl()))) {
 				installableUnitIdsThisRepository.addAll(getFeatureIds(descriptor));
 			}
 		}
@@ -161,7 +165,7 @@
 
 	/**
 	 * remove the given repository locations from the repository tracker.
-	 * 
+	 *
 	 * @param repositoryLocations
 	 */
 	public static void removeRepositoryLocations(Set<URI> repositoryLocations) {
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/DiscoveryItem.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/DiscoveryItem.java
index 5320d53..85de795 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/DiscoveryItem.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/DiscoveryItem.java
@@ -17,6 +17,7 @@
 import java.text.MessageFormat;
 
 import org.eclipse.epp.internal.mpc.core.util.TextUtil;
+import org.eclipse.epp.internal.mpc.core.util.URLUtil;
 import org.eclipse.epp.internal.mpc.ui.MarketplaceClientUi;
 import org.eclipse.epp.internal.mpc.ui.MarketplaceClientUiPlugin;
 import org.eclipse.epp.internal.mpc.ui.catalog.MarketplaceCatalogSource;
@@ -680,7 +681,15 @@
 	}
 
 	private boolean hasInstallMetadata() {
-		return !connector.getInstallableUnits().isEmpty() && connector.getSiteUrl() != null;
+		if (!connector.getInstallableUnits().isEmpty() && connector.getSiteUrl() != null) {
+			try {
+				URLUtil.toURI(connector.getSiteUrl());
+				return true;
+			} catch (Exception ex) {
+				//ignore
+			}
+		}
+		return false;
 	}
 
 	protected void createProviderLabel(Composite parent) {
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplaceWizard.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplaceWizard.java
index 81cc1e3..cbfb387 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplaceWizard.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/MarketplaceWizard.java
@@ -277,7 +277,8 @@
 			final List<CatalogItem> noninstallableItems = new ArrayList<CatalogItem>();
 			for (Entry<CatalogItem, Operation> entry : itemToSelectedOperation) {
 				if (entry.getValue() != Operation.NONE) {
-					boolean unavailableInstall = Boolean.FALSE.equals(entry.getKey().getAvailable())
+					boolean unavailableInstall = (Boolean.FALSE.equals(entry.getKey().getAvailable()) || entry.getKey()
+							.getSiteUrl() == null)
 							&& (entry.getValue() == Operation.INSTALL || entry.getValue() == Operation.UPDATE);
 					if (unavailableInstall) {
 						getSelectionModel().select(entry.getKey(), Operation.NONE);
