Index: profileconnection/src/main/java/geniusweb/profileconnection/FileProfileConnector.java
===================================================================
--- profileconnection/src/main/java/geniusweb/profileconnection/FileProfileConnector.java	(revision 52)
+++ profileconnection/src/main/java/geniusweb/profileconnection/FileProfileConnector.java	(revision 1)
@@ -10,13 +10,12 @@
 
 import geniusweb.profile.Profile;
-import tudelft.utilities.listener.DefaultListenable;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
 
 /**
  * ProfileInterface based on a plain filesystem UTF8 file.
  */
-public class FileProfileConnector extends DefaultListenable<Profile>
-		implements ProfileInterface {
+public class FileProfileConnector implements ProfileInterface {
 	private final static ObjectMapper jackson = new ObjectMapper();
-	private final Profile profile;
+	private final LinearAdditiveUtilitySpace profile;
 
 	/**
@@ -29,15 +28,12 @@
 		String serialized = new String(Files.readAllBytes(path),
 				StandardCharsets.UTF_8);
-		profile = jackson.readValue(serialized, Profile.class);
+		profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized,
+				Profile.class);
 	}
 
 	@Override
-	public Profile getProfile() {
+	public LinearAdditiveUtilitySpace getProfile() {
 		return profile;
 	}
 
-	@Override
-	public void close() {
-	}
-
 }
Index: profileconnection/src/main/java/geniusweb/profileconnection/ProfileConnectionFactory.java
===================================================================
--- profileconnection/src/main/java/geniusweb/profileconnection/ProfileConnectionFactory.java	(revision 52)
+++ profileconnection/src/main/java/geniusweb/profileconnection/ProfileConnectionFactory.java	(revision 1)
@@ -17,10 +17,7 @@
 
 	/**
-	 * @param uri      the URI that can provide the {@link Profile}. Support
-	 *                 both the ws and the file scheme for the uri.
+	 * @uri the URI that can provide the {@link Profile}. Support both the ws
+	 *      and the file scheme for the uri.
 	 * @param reporter the {@link Reporter} to log issues to
-	 * @return a {@link ProfileInterface}
-	 * @throws IOException         if connection can't be made
-	 * @throws DeploymentException if endpoint can't be published
 	 */
 	public static ProfileInterface create(URI uri, Reporter reporter)
Index: profileconnection/src/main/java/geniusweb/profileconnection/ProfileInterface.java
===================================================================
--- profileconnection/src/main/java/geniusweb/profileconnection/ProfileInterface.java	(revision 52)
+++ profileconnection/src/main/java/geniusweb/profileconnection/ProfileInterface.java	(revision 1)
@@ -1,28 +1,17 @@
 package geniusweb.profileconnection;
 
-import java.io.IOException;
-
 import geniusweb.profile.Profile;
-import tudelft.utilities.listener.Listenable;
 
 /**
  * A container holding a modifyable profile. This interface allows testing.
  */
-public interface ProfileInterface extends Listenable<Profile> {
+public interface ProfileInterface {
 
 	/**
 	 * @return the latest version of the profile. May change at any time, after
 	 *         someone updates the version on the server. Call to this may block
-	 *         for limited time if the profile is not yet available.
-	 * @throws IOException if profile can not be fetched
+	 *         for limited time if the profile is not yet available. May return
+	 *         null if the profile is not available.
 	 */
-	public Profile getProfile() throws IOException;
-
-	/**
-	 * This must be called when the user is finished using the interface. The
-	 * interface can not be used after calling this. This function allows
-	 * implementors to release the streams and listeners. Not calling this after
-	 * use may cause resource leaks.
-	 */
-	public void close();
+	public Profile getProfile();
 }
Index: profileconnection/src/main/java/geniusweb/profileconnection/WebsocketProfileConnector.java
===================================================================
--- profileconnection/src/main/java/geniusweb/profileconnection/WebsocketProfileConnector.java	(revision 52)
+++ profileconnection/src/main/java/geniusweb/profileconnection/WebsocketProfileConnector.java	(revision 1)
@@ -7,8 +7,6 @@
 import javax.websocket.ClientEndpoint;
 import javax.websocket.DeploymentException;
-import javax.websocket.OnClose;
 import javax.websocket.OnError;
 import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
 import javax.websocket.Session;
 import javax.websocket.WebSocketContainer;
@@ -17,5 +15,4 @@
 
 import geniusweb.profile.Profile;
-import tudelft.utilities.listener.DefaultListenable;
 import tudelft.utilities.logging.Reporter;
 
@@ -24,14 +21,9 @@
  */
 @ClientEndpoint
-public class WebsocketProfileConnector extends DefaultListenable<Profile>
-		implements ProfileInterface {
+public class WebsocketProfileConnector implements ProfileInterface {
 	private final static ObjectMapper jackson = new ObjectMapper();
 	private static final int TIMEOUT_MS = 2000;
 	private final Reporter logger;
-	private final URI uri; // to log possible errors
 	private Profile profile = null;
-	private Session session;
-
-	private StringBuffer buffer = new StringBuffer();
 
 	/**
@@ -42,10 +34,6 @@
 	 *                    websockets. Typically ContainerProvider
 	 *                    .getWebSocketContainer()
-	 * @throws DeploymentException if the annotated endpoint instance is not
-	 *                             valid
-	 * @throws IOException         if there was a network or protocol problem
-	 *                             that prevented the client endpoint being
-	 *                             connected to its server.
-	 * 
+	 * @throws DeploymentException
+	 * @throws IOException
 	 */
 	public WebsocketProfileConnector(URI uri, Reporter reporter,
@@ -56,39 +44,17 @@
 					"uri, reporter and wsconnector must be not null");
 		}
-		this.uri = uri;
 		this.logger = reporter;
-		// see #1763 expected max size of profiles. #50 why we don't want that.
-		// wscontainer.setDefaultMaxTextMessageBufferSize(200000);
 		wscontainer.connectToServer(this, uri);
 	}
 
-	@OnOpen
 	public void onOpen(Session session) {
-		this.session = session;
 		logger.log(Level.FINE, "Connected: " + session.getBasicRemote());
 	}
 
-	@OnClose
-	public void onClose() {
-		if (session != null) {
-			logger.log(Level.FINE,
-					"Closed websocket: " + session.getBasicRemote());
-			this.session = null;
-			// remove listeners seems not needed
-		}
-	}
-
 	@OnMessage
-	public void processMessage(String message, boolean islast)
-			throws IOException {
-		buffer.append(message);
-		if (islast) {
-			String msg = buffer.toString();
-			buffer = new StringBuffer();
-			// this will be called every time the profile changes.
-			logger.log(Level.FINE, "Received profile: " + msg);
-			profile = jackson.readValue(msg, Profile.class);
-			notifyListeners(profile);
-		}
+	public void processMessage(String message) throws IOException {
+		// this will be called every time the profile changes.
+		logger.log(Level.FINE, "Received profile: " + message);
+		this.profile = jackson.readValue(message, Profile.class);
 	}
 
@@ -100,5 +66,5 @@
 
 	@Override
-	public Profile getProfile() throws IOException {
+	public Profile getProfile() {
 		int remaining_wait = TIMEOUT_MS;
 		try {
@@ -111,22 +77,6 @@
 					e);
 		}
-		if (profile == null) {
-			throw new IOException("Failed to fetch profile from " + uri);
-		}
 		return profile;
 	}
 
-	@Override
-	public void close() {
-		if (session != null) {
-			try {
-				session.close();
-			} catch (IOException e) {
-				logger.log(Level.WARNING,
-						"Falled to close websocket connection: "
-								+ session.getBasicRemote());
-			}
-		}
-	}
-
 }
Index: profileconnection/src/test/java/geniusweb/profileconnection/WebsocketProfileConnectorTest.java
===================================================================
--- profileconnection/src/test/java/geniusweb/profileconnection/WebsocketProfileConnectorTest.java	(revision 52)
+++ profileconnection/src/test/java/geniusweb/profileconnection/WebsocketProfileConnectorTest.java	(revision 1)
@@ -3,5 +3,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -21,4 +22,5 @@
 
 import geniusweb.profile.Profile;
+import geniusweb.profileconnection.WebsocketProfileConnector;
 import tudelft.utilities.logging.Reporter;
 
@@ -28,5 +30,5 @@
 	private final WebSocketContainer wscontainer = mock(
 			WebSocketContainer.class);
-	private final static String testfilepath = "src/test/resources/jobs1_20.json";
+	private final static String testfilepath = "src/test/resources/testprofile.json";
 
 	@Test(expected = IOException.class)
@@ -40,9 +42,10 @@
 
 	@Test
-	public void onOpenSmokeTest()
+	public void testOnOpen()
 			throws IOException, DeploymentException, URISyntaxException {
 		WebsocketProfileConnector connector = new WebsocketProfileConnector(
 				new URI("ws://someprofile"), reporter, wscontainer);
 		connector.onOpen(session);
+		assertNull(connector.getProfile());
 	}
 
@@ -53,10 +56,10 @@
 				new URI("ws://someprofile"), reporter, wscontainer);
 		connector.onOpen(session);
-		connector.processMessage(readTestProfile(), true);
+		connector.processMessage(readTestProfile());
 
 		Profile profile = connector.getProfile();
 		assertNotNull(profile);
-		assertEquals("jobs1_20", connector.getProfile().getName());
-		assertEquals("jobs", connector.getProfile().getDomain().getName());
+		assertEquals("testprofile", connector.getProfile().getName());
+		assertEquals("test", connector.getProfile().getDomain().getName());
 	}
 
@@ -78,5 +81,5 @@
 				try {
 					Thread.sleep(1500);
-					connector.processMessage(readTestProfile(), true);
+					connector.processMessage(readTestProfile());
 				} catch (InterruptedException | IOException e) {
 					e.printStackTrace();
@@ -86,9 +89,9 @@
 		Profile profile = connector.getProfile();
 		assertNotNull(profile);
-		assertEquals("jobs1_20", connector.getProfile().getName());
-		assertEquals("jobs", connector.getProfile().getDomain().getName());
+		assertEquals("testprofile", connector.getProfile().getName());
+		assertEquals("test", connector.getProfile().getDomain().getName());
 	}
 
-	@Test(expected = IOException.class)
+	@Test
 	public void testGetProfileTimeout()
 			throws DeploymentException, IOException, URISyntaxException {
@@ -107,5 +110,5 @@
 				try {
 					Thread.sleep(6000);
-					connector.processMessage(readTestProfile(), true);
+					connector.processMessage(readTestProfile());
 				} catch (InterruptedException | IOException e) {
 					e.printStackTrace();
@@ -113,5 +116,6 @@
 			}
 		}).start();
-		connector.getProfile();
+		Profile profile = connector.getProfile();
+		assertNull(profile);
 	}
 
Index: profileconnection/src/test/resources/jobs1_20.json
===================================================================
--- profileconnection/src/test/resources/jobs1_20.json	(revision 52)
+++ 	(revision )
@@ -1,403 +1,0 @@
-{
-	"DefaultPartialOrdering": {
-		"name": "jobs1_20",
-		"domain": {
-			"name": "jobs",
-			"issuesValues": {
-				"lease car": {
-					"values": ["yes", "no"]
-				},
-				"permanent contract": {
-					"values": ["yes", "no"]
-				},
-				"career development opportunities": {
-					"values": ["low", "medium", "high"]
-				},
-				"fte": {
-					"values": ["0.6", "0.8", "1.0"]
-				},
-				"salary": {
-					"values": ["2000", "2500", "3000", "3500", "4000"]
-				},
-				"work from home": {
-					"values": ["0", "1", "2"]
-				}
-			}
-		},
-		"better": [
-			[0, 34],
-			[2, 9],
-			[3, 5],
-			[6, 23],
-			[12, 18],
-			[13, 27],
-			[14, 28],
-			[15, 37],
-			[17, 28],
-			[19, 1],
-			[20, 29],
-			[21, 24],
-			[22, 8],
-			[25, 10],
-			[26, 16],
-			[30, 24],
-			[31, 32],
-			[33, 7],
-			[35, 4],
-			[36, 11]
-		],
-		"bids": [{
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "0.8",
-				"salary": "4000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "high",
-				"fte": "0.6",
-				"salary": "2000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "low",
-				"fte": "0.8",
-				"salary": "2000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "high",
-				"fte": "0.8",
-				"salary": "2500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "0.6",
-				"salary": "2000",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "high",
-				"fte": "0.6",
-				"salary": "2500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "1.0",
-				"salary": "3500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "medium",
-				"fte": "1.0",
-				"salary": "3000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "high",
-				"fte": "0.6",
-				"salary": "3500",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "medium",
-				"fte": "0.6",
-				"salary": "2000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "high",
-				"fte": "0.6",
-				"salary": "2000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "medium",
-				"fte": "0.8",
-				"salary": "3500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "yes",
-				"career development opportunities": "high",
-				"fte": "0.6",
-				"salary": "2500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "0.8",
-				"salary": "3000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "yes",
-				"career development opportunities": "high",
-				"fte": "0.8",
-				"salary": "2000",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "high",
-				"fte": "1.0",
-				"salary": "3500",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "medium",
-				"fte": "0.8",
-				"salary": "4000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "medium",
-				"fte": "0.8",
-				"salary": "3000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "high",
-				"fte": "0.8",
-				"salary": "2000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "1.0",
-				"salary": "3000",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "medium",
-				"fte": "1.0",
-				"salary": "4000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "low",
-				"fte": "1.0",
-				"salary": "3500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "yes",
-				"career development opportunities": "medium",
-				"fte": "1.0",
-				"salary": "2500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "low",
-				"fte": "1.0",
-				"salary": "3000",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "medium",
-				"fte": "0.8",
-				"salary": "3000",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "medium",
-				"fte": "0.8",
-				"salary": "2000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "0.8",
-				"salary": "3500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "medium",
-				"fte": "0.6",
-				"salary": "4000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "low",
-				"fte": "0.6",
-				"salary": "2000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "low",
-				"fte": "0.6",
-				"salary": "3500",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "high",
-				"fte": "0.8",
-				"salary": "4000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "0.8",
-				"salary": "4000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "high",
-				"fte": "0.8",
-				"salary": "2500",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "yes",
-				"career development opportunities": "medium",
-				"fte": "1.0",
-				"salary": "4000",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "high",
-				"fte": "0.6",
-				"salary": "2500",
-				"work from home": "2"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "yes",
-				"career development opportunities": "low",
-				"fte": "0.8",
-				"salary": "3500",
-				"work from home": "0"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "high",
-				"fte": "1.0",
-				"salary": "4000",
-				"work from home": "1"
-			}
-		}, {
-			"issuevalues": {
-				"lease car": "yes",
-				"permanent contract": "no",
-				"career development opportunities": "medium",
-				"fte": "0.8",
-				"salary": "3500",
-				"work from home": "2"
-			}
-		}],
-		"reservationBid": {
-			"issuevalues": {
-				"lease car": "no",
-				"permanent contract": "no",
-				"career development opportunities": "low",
-				"fte": "0.6",
-				"salary": "3500",
-				"work from home": "1"
-			}
-		}
-	}
-}
Index: profileconnection/src/test/resources/testprofile.json
===================================================================
--- profileconnection/src/test/resources/testprofile.json	(revision 52)
+++ profileconnection/src/test/resources/testprofile.json	(revision 1)
@@ -3,5 +3,5 @@
 		"issueUtilities": {
 			"issue2": {
-				"NumberValueSetUtilities": {
+				"numberutils": {
 					"lowValue": 12,
 					"lowUtility": 0.3,
@@ -11,5 +11,5 @@
 			},
 			"issue1": {
-				"DiscreteValueSetUtilities": {
+				"discreteutils": {
 					"valueUtilities": {
 						"issue1value1": 0.2,
@@ -27,5 +27,5 @@
 			"issuesValues": {
 				"issue2": {
-					"range": {"low":12,"high":18,"step":1} 
+					"range": ["12", "18", "1"]
 				},
 				"issue1": {
@@ -37,6 +37,6 @@
 				"reservationBid": {
 			"issuevalues": {
-				"issue1": "issue1value1",
-				"issue2": 12
+				"issue1": "issuevalue1",
+				"issue2": "12"
 			}
 		}
