542437: Installed tab has duplicate Marketplace Client entry

Bug: 542437
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=542437
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceDiscoveryStrategy.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceDiscoveryStrategy.java
index 16b7e1d..17f0097 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceDiscoveryStrategy.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/catalog/MarketplaceDiscoveryStrategy.java
@@ -824,10 +824,15 @@
 			Set<INode> catalogNodes = marketplaceInfo.computeInstalledNodes(catalogDescriptor.getUrl(), installedIUs);
 			if (!catalogNodes.isEmpty()) {
 				List<INode> resolvedNodes = marketplaceService.getNodes(catalogNodes, progress.newChild(490));
+				Map<String, INode> uniqueNodes = new HashMap<>();
 				SubMonitor nodeProgress = SubMonitor.convert(progress.newChild(10), resolvedNodes.size());
 				for (INode node : resolvedNodes) {
+					boolean duplicate = node.getId() != null && uniqueNodes.put(node.getId(), node) != null;
+					//previous result on rhs to avoid shortcut behavior
+					duplicate = (node.getUrl() != null && uniqueNodes.put(node.getUrl(), node) != null) || duplicate;
+
 					//compute real installed state based on optional/required state
-					if (marketplaceInfo.computeInstalled(installedIUs.keySet(), node)) {
+					if (!duplicate && marketplaceInfo.computeInstalled(installedIUs.keySet(), node)) {
 						result.getNodes().add((Node) node);
 					}
 					nodeProgress.worked(1);