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());
-			}
-		}
-	}
-
 }
