Index: src/main/java/geniusweb/profilesserver/websocket/GetProfileSocket.java
===================================================================
--- src/main/java/geniusweb/profilesserver/websocket/GetProfileSocket.java	(revision 44)
+++ src/main/java/geniusweb/profilesserver/websocket/GetProfileSocket.java	(revision 1)
@@ -2,14 +2,4 @@
 
 import java.io.IOException;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 import javax.websocket.OnClose;
@@ -20,16 +10,9 @@
 import javax.websocket.server.ServerEndpoint;
 
-import geniusweb.bidspace.AllBidsList;
-import geniusweb.bidspace.BidsWithUtility;
-import geniusweb.issuevalue.Bid;
-import geniusweb.profile.DefaultPartialOrdering;
-import geniusweb.profile.PartialOrdering;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import geniusweb.profile.Profile;
-import geniusweb.profile.utilityspace.LinearAdditive;
-import geniusweb.profilesserver.Constants;
-import geniusweb.profilesserver.ProfilesRepository;
+import geniusweb.profilesserver.ProfilesFactory;
 import geniusweb.profilesserver.events.ChangeEvent;
-import tudelft.utilities.immutablelist.FixedList;
-import tudelft.utilities.immutablelist.ImmutableList;
 import tudelft.utilities.listener.Listener;
 
@@ -38,27 +21,9 @@
  * and profiles. Every time something changes, a new list of domains and
  * profiles is sent. For each new websocket the server will create one of this
- * but they all share one {@link ProfilesRepository}.
- * 
- * <p>
- * Query strings: the websocket allows query strings. Allowed:
- * <table>
- * <caption>Query strings for GetprofileSocket</caption>
- * <tr>
- * <th>query name</th>
- * <th>description</th>
- * </tr>
- * <tr>
- * <td>partial=N</td>
- * <td>a query key that is assigned a natural number N (0 or larger). If set,
- * the profile is converted into a Partial Profile with the given number of
- * points. If N&gt;0, the maximum utility bid is included .If N&gt;1, the
- * minimum utility bid is included. The other bids are picked at random. This
- * filtering mechanism only works if the profile is {@link LinearAdditive}
- * space. The reservation bid is passed through unmodified.</td>
- * </tr>
- * </table>
+ * but they all share one {@link ProfilesFactory}.
  */
 @ServerEndpoint("/websocket/get/{domain}/{profile}")
 public class GetProfileSocket {
+	private final static ObjectMapper jackson = new ObjectMapper();
 	private Profile prof = null; // the latest that we sent to client.
 
@@ -68,5 +33,4 @@
 	private Listener<ChangeEvent> changeListener;
 	private Session session;
-	private Map<String, String> params = Collections.emptyMap();
 
 	@OnOpen
@@ -76,10 +40,4 @@
 		this.profilename = domain + "/" + profile;
 
-		if (session.getQueryString() != null) {
-			List<String> paramstrings = Arrays
-					.asList(session.getQueryString().split("&"));
-			params = paramstrings.stream().map(str -> str.split("=")).collect(
-					Collectors.toMap(vals -> vals[0], vals -> vals[1]));
-		}
 		changeListener = new Listener<ChangeEvent>() {
 			@Override
@@ -89,15 +47,15 @@
 		};
 		sendupdatedProfile();
-		Profiles.repository.addListener(changeListener);
+		Profiles.factory.addListener(changeListener);
 	}
 
 	private void sendupdatedProfile() {
-		Profile newprof = Profiles.repository.getProfile(profilename);
+		Profile newprof = Profiles.factory.getProfile(profilename);
 		// notice, may be null if profile does not exist/was removed.
 		if (newprof == null ? prof != null : !newprof.equals(prof)) {
 			prof = newprof;
 			try {
-				session.getBasicRemote().sendText(Constants.getJackson()
-						.writeValueAsString(filter(prof)));
+				session.getBasicRemote()
+						.sendText(jackson.writeValueAsString(prof));
 			} catch (Exception e) {
 				e.printStackTrace();
@@ -106,72 +64,7 @@
 	}
 
-	/**
-	 * 
-	 * @param prof1
-	 * @return a filtered profile. If "partial" is not set, this returns the
-	 *         given profile unmodified. If partial is set, a
-	 *         DefaultPartialOrdering with the requested number of bids are
-	 *         selected
-	 */
-	private Profile filter(Profile prof1) {
-		String partial = params.get("partial");
-		if (partial == null) {
-			return prof1;
-		}
-		if (!(prof1 instanceof PartialOrdering))
-			throw new IllegalArgumentException(
-					"profile must be partialordering but got " + prof);
-		PartialOrdering profile = (PartialOrdering) prof1;
-		final int numbids = Integer.parseInt(partial);
-		if (numbids < 0)
-			throw new IllegalArgumentException("parameter partial must be >=0");
-
-		ImmutableList<Bid> allbids;
-		if (profile instanceof DefaultPartialOrdering)
-			allbids = new FixedList<Bid>(
-					((DefaultPartialOrdering) profile).getBids());
-		else
-			allbids = new AllBidsList(prof.getDomain());
-
-		if (BigInteger.valueOf(numbids).compareTo(allbids.size()) > 0)
-			throw new IllegalArgumentException("Request for " + numbids
-					+ " exceeds number of bids in the space " + allbids.size());
-
-		BidsWithUtility info = new BidsWithUtility((LinearAdditive) prof);
-		Set<Bid> selected = new HashSet<>();
-		if (numbids > 0) {
-			selected.add(info.getExtremeBid(true));
-		}
-		if (numbids > 1) {
-			selected.add(info.getExtremeBid(false));
-		}
-		Random random = new Random();
-		for (int nr = 2; nr < numbids; nr++) {
-			int attempt = 0;
-			Bid bid;
-			do {
-				long i = random.nextInt(allbids.size().intValue());
-				bid = allbids.get(BigInteger.valueOf(i));
-			} while (attempt++ < 10 && selected.contains(bid));
-			selected.add(bid);
-		}
-
-		// put comparison info for these bids in the map
-		Map<Bid, Set<Bid>> isBetterMap = new HashMap<>();
-		for (Bid bid : selected) {
-			Set<Bid> worse = selected.stream().filter(
-					otherbid -> profile.isPreferredOrEqual(bid, otherbid)
-							&& !profile.isPreferredOrEqual(otherbid, bid))
-					.collect(Collectors.toSet());
-			isBetterMap.put(bid, worse);
-		}
-		return new DefaultPartialOrdering(
-				prof.getName() + "-partial-" + numbids, prof.getDomain(),
-				prof.getReservationBid(), isBetterMap);
-	}
-
 	@OnClose
 	public void end() throws IOException {
-		Profiles.repository.removeListener(changeListener);
+		Profiles.factory.removeListener(changeListener);
 	}
 
Index: src/main/java/geniusweb/profilesserver/websocket/Profiles.java
===================================================================
--- src/main/java/geniusweb/profilesserver/websocket/Profiles.java	(revision 44)
+++ src/main/java/geniusweb/profilesserver/websocket/Profiles.java	(revision 1)
@@ -1,14 +1,13 @@
 package geniusweb.profilesserver.websocket;
 
-import geniusweb.profilesserver.AutoUpdatingProfilesRepository;
-import geniusweb.profilesserver.ProfilesRepository;
+import geniusweb.profilesserver.AutoUpdatingProfilesFactory;
+import geniusweb.profilesserver.ProfilesFactory;
 import tudelft.utilities.logging.ReportToLogger;
 
 /**
- * Just a shared copy of the profiles repository, for use with all websockets.
+ * Just a shared copy of the profiles factory, for use with all websockets.
  * 
  */
 class Profiles {
-	public static final ProfilesRepository repository = new AutoUpdatingProfilesRepository(
-			new ReportToLogger("profilesserver"));
+	public static final ProfilesFactory factory = new AutoUpdatingProfilesFactory(new ReportToLogger("profilesserver"));
 }
Index: src/main/java/geniusweb/profilesserver/websocket/ProfilesListSocket.java
===================================================================
--- src/main/java/geniusweb/profilesserver/websocket/ProfilesListSocket.java	(revision 44)
+++ src/main/java/geniusweb/profilesserver/websocket/ProfilesListSocket.java	(revision 1)
@@ -24,6 +24,7 @@
 import javax.websocket.server.ServerEndpoint;
 
-import geniusweb.profilesserver.Constants;
-import geniusweb.profilesserver.ProfilesRepository;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.profilesserver.ProfilesFactory;
 import geniusweb.profilesserver.events.ChangeEvent;
 import tudelft.utilities.listener.Listener;
@@ -35,5 +36,5 @@
  * and profiles. Every time something changes, a new list of domains and
  * profiles is sent. For each new websocket the server will create one of this
- * but they all share one {@link ProfilesRepository}.
+ * but they all share one {@link ProfilesFactory}.
  */
 @ServerEndpoint("/websocket/liststream")
@@ -44,5 +45,4 @@
 	private Session session;
 	private Listener<ChangeEvent> changeListener;
-	private static transient String hostport = ""; // cache
 
 	public ProfilesListSocket() {
@@ -71,5 +71,5 @@
 			}
 		};
-		Profiles.repository.addListener(changeListener);
+		Profiles.factory.addListener(changeListener);
 	}
 
@@ -82,5 +82,5 @@
 		log.log(Level.FINER, "sending updated profiles");
 		session.getBasicRemote().sendText(
-				Constants.getJackson().writeValueAsString(getDomainsProfiles()));
+				new ObjectMapper().writeValueAsString(getDomainsProfiles()));
 	}
 
@@ -90,6 +90,6 @@
 	private Map<URI, List<URI>> getDomainsProfiles() {
 		Map<URI, List<URI>> allprofiles = new HashMap<>();
-		for (String domain : Profiles.repository.getDomains()) {
-			List<URI> profiles = Profiles.repository.getProfiles(domain).stream()
+		for (String domain : Profiles.factory.getDomains()) {
+			List<URI> profiles = Profiles.factory.getProfiles(domain).stream()
 					.map(profile -> makeURI(domain, profile.getName()))
 					.collect(Collectors.toList());
@@ -130,22 +130,15 @@
 	private String getIpAddressAndPort()
 			throws UnknownHostException, MalformedObjectNameException {
-		synchronized (hostport) {
-			if (hostport.isEmpty()) {
-				MBeanServer beanServer = ManagementFactory
-						.getPlatformMBeanServer();
 
-				Set<ObjectName> objectNames = beanServer.queryNames(
-						new ObjectName("*:type=Connector,*"),
-						Query.match(Query.attr("protocol"),
-								Query.value("HTTP/1.1")));
+		MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
 
-				String host = InetAddress.getLocalHost().getHostAddress();
-				String port = objectNames.iterator().next()
-						.getKeyProperty("port");
+		Set<ObjectName> objectNames = beanServer.queryNames(
+				new ObjectName("*:type=Connector,*"),
+				Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
 
-				hostport = host + ":" + port;
-			}
-			return hostport;
-		}
+		String host = InetAddress.getLocalHost().getHostAddress();
+		String port = objectNames.iterator().next().getKeyProperty("port");
+
+		return host + ":" + port;
 
 	}
@@ -153,5 +146,5 @@
 	@OnClose
 	public void end() throws IOException {
-		Profiles.repository.removeListener(changeListener);
+		Profiles.factory.removeListener(changeListener);
 	}
 
