Index: exampleparties/boulware/pom.xml
===================================================================
--- exampleparties/boulware/pom.xml	(revision 8)
+++ exampleparties/boulware/pom.xml	(revision 9)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>boulware</artifactId>
-	<version>1.0.0</version>
+	<version>1.1.0</version>
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<basedir>.</basedir>
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
-		<jackson-2-version>2.9.6</jackson-2-version>
+		<jackson-2-version>2.9.10</jackson-2-version>
 	</properties>
 
@@ -33,5 +33,5 @@
 			<groupId>geniusweb.exampleparties</groupId>
 			<artifactId>timedependentparty</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
Index: exampleparties/conceder/pom.xml
===================================================================
--- exampleparties/conceder/pom.xml	(revision 8)
+++ exampleparties/conceder/pom.xml	(revision 9)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>conceder</artifactId>
-	<version>1.0.0</version>
+	<version>1.1.0</version>
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<basedir>.</basedir>
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
-		<jackson-2-version>2.9.6</jackson-2-version>
+		<jackson-2-version>2.9.10</jackson-2-version>
 	</properties>
 
@@ -33,5 +33,5 @@
 			<groupId>geniusweb.exampleparties</groupId>
 			<artifactId>timedependentparty</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
Index: exampleparties/hardliner/pom.xml
===================================================================
--- exampleparties/hardliner/pom.xml	(revision 8)
+++ exampleparties/hardliner/pom.xml	(revision 9)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>hardliner</artifactId>
-	<version>1.0.0</version>
+	<version>1.1.0</version>
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<basedir>.</basedir>
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
-		<jackson-2-version>2.9.6</jackson-2-version>
+		<jackson-2-version>2.9.10</jackson-2-version>
 	</properties>
 
@@ -33,5 +33,5 @@
 			<groupId>geniusweb.exampleparties</groupId>
 			<artifactId>timedependentparty</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
Index: exampleparties/humangui/pom.xml
===================================================================
--- exampleparties/humangui/pom.xml	(revision 9)
+++ exampleparties/humangui/pom.xml	(revision 9)
@@ -0,0 +1,288 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>geniusweb.exampleparties</groupId>
+	<artifactId>humangui</artifactId>
+	<version>1.1.0</version>
+	<packaging>jar</packaging>
+
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<maven.compiler.target>1.8</maven.compiler.target>
+		<maven.compiler.source>1.8</maven.compiler.source>
+		<basedir>.</basedir>
+		<passwd>${env.ARTIFACTORY_PASS}</passwd>
+		<jackson-2-version>2.9.6</jackson-2-version>
+	</properties>
+
+	<distributionManagement>
+		<repository>
+			<id>artifactory.ewi.tudelft.nl</id>
+			<url>http://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+		</repository>
+	</distributionManagement>
+
+
+	<dependencies>
+
+
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>party</artifactId>
+			<version>1.1.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>bidspace</artifactId>
+			<version>1.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>logging</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>profileconnection</artifactId>
+			<version>1.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>immutablelist</artifactId>
+			<version>1.0.1</version>
+		</dependency>
+
+		<!-- the core, which includes Streaming API, shared low-level abstractions 
+			(but NOT data-binding) -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+			<version>${jackson-2-version}</version>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- Just the annotations; use this dependency if you want to attach annotations 
+			to classes without connecting them to the code. -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-annotations</artifactId>
+			<version>${jackson-2-version}</version>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- databinding; ObjectMapper, JsonNode and related classes are here -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+			<version>${jackson-2-version}</version>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- smile (binary JSON). Other artifacts in this group do other formats. -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.dataformat</groupId>
+			<artifactId>jackson-dataformat-smile</artifactId>
+			<version>${jackson-2-version}</version>
+			<scope>test</scope>
+		</dependency>
+		<!-- JAX-RS provider -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.jaxrs</groupId>
+			<artifactId>jackson-jaxrs-json-provider</artifactId>
+			<version>${jackson-2-version}</version>
+			<scope>test</scope>
+		</dependency>
+		<!-- Support for JAX-B annotations as additional configuration -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.module</groupId>
+			<artifactId>jackson-module-jaxb-annotations</artifactId>
+			<version>${jackson-2-version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-all</artifactId>
+			<version>1.9.5</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>junit</artifactId>
+			<version>1.0.1</version>
+			<scope>test</scope>
+		</dependency>
+
+	</dependencies>
+
+
+	<repositories>
+		<repository>
+			<id>artifactory.ewi.tudelft.nl</id>
+			<url>http://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</repository>
+
+	</repositories>
+
+	<pluginRepositories>
+		<pluginRepository>
+			<id>jcenter</id>
+			<url>http://jcenter.bintray.com</url>
+		</pluginRepository>
+	</pluginRepositories>
+
+
+	<build>
+
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.8.0</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<version>3.1.0</version>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>geniusweb.exampleparties.humangui.HumanGui</mainClass>
+						</manifest>
+					</archive>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.10.1</version>
+				<executions>
+					<execution>
+						<id>attach-javadocs</id>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+						<configuration>
+							<additionalparam>${javadoc.opts}</additionalparam>
+							<additionalparam>-Xdoclint:none</additionalparam>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.jfrog.buildinfo</groupId>
+				<artifactId>artifactory-maven-plugin</artifactId>
+				<version>2.6.1</version>
+				<executions>
+					<execution>
+						<id>build-info</id>
+						<goals>
+							<goal>publish</goal>
+						</goals>
+						<configuration>
+							<publisher>
+								<contextUrl>http://artifactory.ewi.tudelft.nl/artifactory</contextUrl>
+								<repoKey>libs-release</repoKey>
+								<username>wouter</username>
+								<password>${passwd}</password>
+							</publisher>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<version>2.4.1</version>
+				<configuration>
+					<!-- get all project dependencies -->
+					<descriptorRefs>
+						<descriptorRef>jar-with-dependencies</descriptorRef>
+					</descriptorRefs>
+					<archive>
+						<manifest>
+							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+							<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+							<mainClass>geniusweb.exampleparties.humangui.HumanGui</mainClass>
+						</manifest>
+					</archive>
+				</configuration>
+				<executions>
+					<execution>
+						<id>make-assembly</id>
+						<!-- bind to the packaging phase -->
+						<phase>package</phase>
+						<goals>
+							<goal>single</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+
+		</plugins>
+
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>org.jfrog.buildinfo</groupId>
+										<artifactId>artifactory-maven-plugin</artifactId>
+										<versionRange>[1.0.0,)</versionRange>
+										<goals>
+											<goal>publish</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+
+
+	</build>
+</project>
Index: exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingInfo.java
===================================================================
--- exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingInfo.java	(revision 9)
+++ exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingInfo.java	(revision 9)
@@ -0,0 +1,168 @@
+package geniusweb.exampleparties.humangui;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+
+import javax.websocket.DeploymentException;
+
+import geniusweb.actions.Action;
+import geniusweb.actions.Offer;
+import geniusweb.actions.PartyId;
+import geniusweb.connection.ConnectionEnd;
+import geniusweb.issuevalue.Bid;
+import geniusweb.party.inform.Inform;
+import geniusweb.party.inform.Settings;
+import geniusweb.profile.Profile;
+import geniusweb.profileconnection.ProfileInterface;
+import geniusweb.progress.Progress;
+import geniusweb.progress.ProgressRounds;
+import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * Contains the current state of the user's negotiation. mutable. Assumes SAOP
+ * protocol.
+ * <p>
+ * Listeners receive the following objects:
+ * <ul>
+ * <li>{@link Action} if user did an action (place offer, end nego, etc)
+ * <li>{@link Bid} if user changed his prepared bid (but did not yet offer it)
+ * <li>{@link Profile} if the profile was changed
+ * <li>{@Link Boolean} if the isMyTurn value changed.
+ * </ul>
+ */
+public class BiddingInfo extends DefaultListenable<Object> {
+	private final PartyId me;
+	private Offer lastReceivedOffer = null;
+	private Progress progress = null;
+	private Reporter reporter;
+
+	// profile is the latest one received.
+	private Profile profile = null;
+
+	// same as profile.getDomain but forces order on the issues
+	// unmodifyable (but we can replace the whole list)
+	private List<String> issues = Collections.emptyList();
+	private Bid currentBid = new Bid(Collections.emptyMap());
+	private boolean isMyTurn = false;
+	private ConnectionEnd<Inform, Action> connection;
+
+	/**
+	 * 
+	 * @param settings   the session {@link Settings}
+	 * @param connection the connection to the protocol.
+	 * @param reporter   the {@link Reporter} where we can log issues.
+	 * @param profileint the {@link ProfileInterface}
+	 * @throws Exception if we can not reach the protocol server
+	 */
+	public BiddingInfo(Settings settings,
+			ConnectionEnd<Inform, Action> connection, Reporter reporter,
+			ProfileInterface profileint)
+			throws IOException, DeploymentException {
+		this.connection = connection;
+		this.me = settings.getID();
+		this.progress = settings.getProgress();
+		this.reporter = reporter;
+
+		profileint.addListener(prof -> updateProfile(prof));
+		// this call blocks till we have the profile.
+		updateProfile(profileint.getProfile());
+	}
+
+	/**
+	 * 
+	 * @return the profile currently used.
+	 */
+	public Profile getProfile() {
+		return profile;
+	}
+
+	/**
+	 * Changes the model to use the given new profile.
+	 * 
+	 * @param newprof a new profile
+	 */
+	private void updateProfile(Profile newprof) {
+		this.profile = newprof;
+		this.issues = Collections.unmodifiableList(
+				new LinkedList<String>(newprof.getDomain().getIssues()));
+		notifyListeners(newprof);
+	}
+
+	/**
+	 * executes an action and sets isMyTurn to false.
+	 * 
+	 * @param action the action to execute.
+	 * @throws IOException           if action can not be sent.
+	 * @throws IllegalStateException if isMyTurn is false.
+	 */
+	public void doAction(Action action) {
+		if (!isMyTurn) {
+			reporter.log(Level.SEVERE, "User did action but it's not his turn");
+			return;
+		}
+		try {
+			connection.send(action);
+		} catch (IOException e) {
+			reporter.log(Level.SEVERE, "Can't send action", e);
+			return;
+		}
+		if (progress instanceof ProgressRounds) {
+			progress = ((ProgressRounds) progress).advance();
+		}
+		setMyTurn(false);
+		// notifyListeners(action);
+	}
+
+	/**
+	 * @param offer offer received from some other party
+	 */
+	public void receivedOffer(Offer offer) {
+		lastReceivedOffer = offer;
+		notifyListeners(offer);
+	}
+
+	/**
+	 * 
+	 * @return the last received offer, or null if no offer received yet.
+	 */
+	public Offer getReceivedOffer() {
+		return lastReceivedOffer;
+	}
+
+	public List<String> getIssues() {
+		return issues;
+	}
+
+	/**
+	 * 
+	 * @return current bid. Initially is an empty bid.
+	 */
+	public Bid getCurrentBid() {
+		return currentBid;
+	}
+
+	public void setCurrentBid(Bid bid) {
+		if (bid == null)
+			throw new IllegalArgumentException();
+		if (!bid.equals(currentBid)) {
+			currentBid = bid;
+			notifyListeners(bid);
+		}
+	}
+
+	public PartyId getMyId() {
+		return me;
+	}
+
+	public void setMyTurn(boolean b) {
+		if (isMyTurn != b) {
+			isMyTurn = b;
+			notifyListeners(b);
+		}
+	}
+
+}
Index: exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingTableModel.java
===================================================================
--- exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingTableModel.java	(revision 9)
+++ exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingTableModel.java	(revision 9)
@@ -0,0 +1,130 @@
+package geniusweb.exampleparties.humangui;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+
+import geniusweb.actions.Offer;
+import geniusweb.issuevalue.Bid;
+import geniusweb.issuevalue.Value;
+
+/**
+ * An adapter that moulds the BiddingInfo into a {@link TableModel}. Makes a
+ * 3-col table: left column the issues, middle col the last received offer, and
+ * right col the offer the user is preparing. The right column can be edited.
+ */
+public class BiddingTableModel implements TableModel {
+	private final static String[] cols = { "Issue", "Last received offer",
+			"Your next offer" };
+	private BiddingInfo info;
+	private final List<TableModelListener> listeners = new LinkedList<>();
+
+	public BiddingTableModel(BiddingInfo info) {
+		this.info = info;
+		info.addListener(data -> update(data));
+	}
+
+	@Override
+	public int getRowCount() {
+		return info.getIssues().size();
+	}
+
+	@Override
+	public int getColumnCount() {
+		return cols.length;
+	}
+
+	@Override
+	public String getColumnName(int columnIndex) {
+		return cols[columnIndex];
+	}
+
+	@Override
+	public Class<?> getColumnClass(int columnIndex) {
+		switch (columnIndex) {
+		case 0:
+			return String.class;
+		case 1:
+		case 2:
+			return Value.class;
+		}
+		return null;
+	}
+
+	@Override
+	public boolean isCellEditable(int rowIndex, int columnIndex) {
+		return columnIndex == 2;
+	}
+
+	@Override
+	public Object getValueAt(int rowIndex, int columnIndex) {
+		String issue = getIssue(rowIndex);
+		if (issue == null)
+			return "";
+		switch (columnIndex) {
+		case 0:
+			return issue;
+		case 1:
+			if (info.getReceivedOffer() == null)
+				return null;
+			return info.getReceivedOffer().getBid().getValue(issue);
+		case 2:
+			return info.getCurrentBid().getValue(issue);
+		}
+		return null;
+	}
+
+	@Override
+	public void setValueAt(Object val, int rowIndex, int columnIndex) {
+		if (!(val instanceof Value))
+			throw new IllegalArgumentException("New val must be a value");
+		String issue = getIssue(rowIndex);
+		if (issue == null)
+			return;
+
+		Map<String, Value> newvalues = new HashMap<>();
+		newvalues.putAll(info.getCurrentBid().getIssueValues());
+		newvalues.put(issue, (Value) val);
+		info.setCurrentBid(new Bid(newvalues));
+	}
+
+	@Override
+	public void addTableModelListener(TableModelListener l) {
+		listeners.add(l);
+	}
+
+	@Override
+	public void removeTableModelListener(TableModelListener l) {
+		listeners.remove(l);
+	}
+
+	/************************ PRIVATE ************************/
+	private void update(Object data) {
+		if (data instanceof Offer) {
+			notifyTableListeners();
+		}
+	}
+
+	/**
+	 * @param rowIndex
+	 * @return Get issue associated with given row, or null if no such row.
+	 */
+	private String getIssue(int rowIndex) {
+		if (rowIndex < 0 || rowIndex >= info.getIssues().size())
+			return null;
+		return info.getIssues().get(rowIndex);
+
+	}
+
+	private void notifyTableListeners() {
+		for (TableModelListener l : listeners) {
+			l.tableChanged(new TableModelEvent(this));
+		}
+	}
+
+}
Index: exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/HumanGui.java
===================================================================
--- exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/HumanGui.java	(revision 9)
+++ exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/HumanGui.java	(revision 9)
@@ -0,0 +1,102 @@
+package geniusweb.exampleparties.humangui;
+
+import java.awt.BorderLayout;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.logging.Level;
+
+import javax.swing.JFrame;
+import javax.swing.WindowConstants;
+
+import geniusweb.actions.Action;
+import geniusweb.actions.Offer;
+import geniusweb.party.Capabilities;
+import geniusweb.party.DefaultParty;
+import geniusweb.party.Party;
+import geniusweb.party.inform.ActionDone;
+import geniusweb.party.inform.Finished;
+import geniusweb.party.inform.Inform;
+import geniusweb.party.inform.Settings;
+import geniusweb.party.inform.YourTurn;
+import geniusweb.profileconnection.ProfileConnectionFactory;
+import geniusweb.profileconnection.ProfileInterface;
+import geniusweb.references.ProtocolRef;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * A {@link Party} that shows a GUI to the user showing the last received offer
+ * and allowing the user to enter his own bid, make an offer or accept the
+ * received offer. The GUI is shown on the window attached to the machine where
+ * the party runs, so this usually will be on the partyserver. Therefore the
+ * users usually will install a partyserver on their local machine to use this
+ * party.
+ */
+public class HumanGui extends DefaultParty {
+
+	private JFrame frame;
+	private BiddingInfo biddinginfo;
+
+	public HumanGui() {
+	}
+
+	public HumanGui(Reporter reporter) {
+		super(reporter); // for debugging
+	}
+
+	@Override
+	public void notifyChange(Inform info) {
+		try {
+			if (info instanceof Settings) {
+				Settings settings = (Settings) info;
+				ProfileInterface profileint = ProfileConnectionFactory
+						.create(settings.getProfile().getURI(), reporter);
+				biddinginfo = new BiddingInfo(settings, getConnection(),
+						getReporter(), profileint);
+				initGUI();
+			} else if (info instanceof ActionDone) {
+				Action otheract = ((ActionDone) info).getAction();
+				if (otheract instanceof Offer) {
+					biddinginfo.receivedOffer((Offer) otheract);
+				}
+			} else if (info instanceof YourTurn) {
+				biddinginfo.setMyTurn(true);
+			} else if (info instanceof Finished) {
+				getReporter().log(Level.INFO, "Final ourcome:" + info);
+				if (frame != null)
+					frame.setVisible(false);
+			}
+		} catch (Exception e) {
+			throw new RuntimeException("Failed to handle info", e);
+		}
+	}
+
+	private void initGUI() {
+		frame = new JFrame("Negotiation for " + biddinginfo.getMyId());
+		frame.getContentPane().setLayout(new BorderLayout());
+		frame.add(new MyGUI(biddinginfo), BorderLayout.CENTER);
+		frame.pack();
+		// we could do frame.addWindowListener but that's a lot of code..
+		frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	@Override
+	public Capabilities getCapabilities() {
+		try {
+			return new Capabilities(new HashSet<>(
+					Arrays.asList(new ProtocolRef(new URI("SAOP")))));
+		} catch (URISyntaxException e) {
+			getReporter().log(Level.SEVERE, "Failed to create capabilities URI",
+					e);
+			return null;
+		}
+	}
+
+	@Override
+	public String getDescription() {
+		return "Offers a GUI to the human owning the partiesserver to manually make offers";
+	}
+
+}
Index: exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/MyGUI.java
===================================================================
--- exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/MyGUI.java	(revision 9)
+++ exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/MyGUI.java	(revision 9)
@@ -0,0 +1,107 @@
+package geniusweb.exampleparties.humangui;
+
+import java.awt.BorderLayout;
+import java.util.LinkedList;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.TableCellEditor;
+
+import geniusweb.actions.Accept;
+import geniusweb.actions.EndNegotiation;
+import geniusweb.actions.Offer;
+import geniusweb.issuevalue.Value;
+import geniusweb.profile.Profile;
+
+/**
+ * the human GUI panel
+ *
+ */
+@SuppressWarnings("serial")
+public class MyGUI extends JPanel {
+
+	// not static because buttons are mutable (have listeners)
+	private final JButton acceptButton = new JButton("Accept");
+	private final JButton offerButton = new JButton("Place Offer");
+	private final JButton stopButton = new JButton("Stop Negotiation");
+	private final BiddingInfo info;
+
+	public MyGUI(BiddingInfo biddinginfo) {
+		if (biddinginfo == null)
+			throw new NullPointerException("biddinginfo=null");
+		this.info = biddinginfo;
+		setLayout(new BorderLayout());
+		JTable table = new JTable(new BiddingTableModel(info)) {
+			@Override
+			public TableCellEditor getCellEditor(int row, int col) {
+				if (row < 0 || row > info.getIssues().size())
+					return null;
+				String issue = info.getIssues().get(row);
+				LinkedList<Value> values = new LinkedList<Value>();
+				info.getProfile().getDomain().getValues(issue)
+						.forEach(v -> values.add(v));
+				return new DefaultCellEditor(new JComboBox<>(values.toArray()));
+			}
+		};
+		JScrollPane tablecontainer = new JScrollPane(table);
+		add(tablecontainer, BorderLayout.CENTER);
+
+		JPanel buttonPane = new JPanel();
+		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+		buttonPane.add(Box.createHorizontalGlue());
+		buttonPane.add(offerButton);
+		buttonPane.add(acceptButton);
+		buttonPane.add(stopButton);
+		add(buttonPane, BorderLayout.SOUTH);
+
+		biddinginfo.addListener(data -> updateGui(data));
+		acceptButton.addActionListener(e -> accept());
+		offerButton.addActionListener(e -> offer());
+		stopButton.addActionListener(e -> stop());
+		updateGui(false);
+	}
+
+	private void offer() {
+		info.doAction(new Offer(info.getMyId(), info.getCurrentBid()));
+	}
+
+	private void accept() {
+		info.doAction(
+				new Accept(info.getMyId(), info.getReceivedOffer().getBid()));
+	}
+
+	private void stop() {
+		info.doAction(new EndNegotiation(info.getMyId()));
+	}
+
+	/**
+	 * Update visibility of the buttons when changes occur in model
+	 */
+	private void updateGui(Object change) {
+		if (change instanceof Boolean) {
+			// boolean contains isMyTurn
+			Boolean isEnabled = (Boolean) change;
+			SwingUtilities.invokeLater(new Runnable() {
+				@Override
+				public void run() {
+					offerButton.setEnabled(isEnabled);
+					stopButton.setEnabled(isEnabled);
+					acceptButton.setEnabled(
+							isEnabled && info.getReceivedOffer() != null);
+				}
+			});
+		} else if (change instanceof Profile) {
+			JOptionPane.showMessageDialog(this,
+					"Notice, your preference profile has been changed!");
+		}
+	}
+
+}
Index: exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/BiddingInfoTest.java
===================================================================
--- exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/BiddingInfoTest.java	(revision 9)
+++ exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/BiddingInfoTest.java	(revision 9)
@@ -0,0 +1,176 @@
+package geniusweb.exampleparties.humangui;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.logging.Level;
+
+import javax.websocket.DeploymentException;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.actions.Accept;
+import geniusweb.actions.PartyId;
+import geniusweb.issuevalue.Bid;
+import geniusweb.party.inform.Settings;
+import geniusweb.profile.Profile;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.profileconnection.ProfileConnectionFactory;
+import geniusweb.profileconnection.ProfileInterface;
+import geniusweb.progress.ProgressRounds;
+import geniusweb.references.Parameters;
+import geniusweb.references.ProfileRef;
+import geniusweb.references.ProtocolRef;
+import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.listener.Listener;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * Should test the GUI stuff. At this moment it's just a simple quick test of
+ * the GUI without much testing
+ *
+ */
+public class BiddingInfoTest {
+
+	private static final PartyId PARTY_ID = new PartyId("party1");
+	private static final ProtocolRef SAOP = new ProtocolRef("SAOP");
+	private static final PartyId otherparty = new PartyId("other");
+	private static final String PROFILE = "src/test/resources/testprofile.json";
+	private static final String PROFILE2 = "src/test/resources/testprofile2.json";
+	private final static ObjectMapper jackson = new ObjectMapper();
+
+	private final TestConnection connection = new TestConnection();
+	private final ProtocolRef protocol = mock(ProtocolRef.class);
+	private final ProgressRounds progress = mock(ProgressRounds.class);
+	private Settings settings;
+	private LinearAdditiveUtilitySpace profile, profile2;
+	private final Parameters parameters = new Parameters();
+	private Reporter reporter = mock(Reporter.class);
+	private ProfileInterface profileint;
+	private BiddingInfo info;
+
+	@Before
+	public void before() throws JsonParseException, JsonMappingException,
+			IOException, URISyntaxException, DeploymentException {
+		settings = new Settings(PARTY_ID,
+				new ProfileRef(new URI("file:" + PROFILE)), protocol, progress,
+				parameters);
+
+		String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)),
+				StandardCharsets.UTF_8);
+		profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized,
+				Profile.class);
+		String serialized2 = new String(Files.readAllBytes(Paths.get(PROFILE2)),
+				StandardCharsets.UTF_8);
+		profile2 = (LinearAdditiveUtilitySpace) jackson.readValue(serialized2,
+				Profile.class);
+
+		profileint = ProfileConnectionFactory
+				.create(settings.getProfile().getURI(), reporter);
+
+		info = new BiddingInfo(settings, connection, reporter, profileint);
+	}
+
+	@Test
+	public void smokeTest() {
+		assertEquals(profile, info.getProfile());
+		assertEquals(Arrays.asList("issue2", "issue1"), info.getIssues());
+		verify(reporter, times(0)).log(any(), any());
+
+	}
+
+	@Test
+	public void testUpdateProfile() throws IOException, DeploymentException {
+		TestProfileInterface profileInterface = new TestProfileInterface(
+				profile);
+		info = new BiddingInfo(settings, connection, reporter,
+				profileInterface);
+		@SuppressWarnings("unchecked")
+		Listener<Object> testlistener = mock(Listener.class);
+		info.addListener(testlistener);
+		assertEquals(profile, info.getProfile());
+
+		// push new profile into the interface and check it's handled
+		profileInterface.updateProfile(profile2);
+		assertEquals(profile2, info.getProfile());
+		verify(testlistener, times(1)).notifyChange(profile2);
+		assertEquals(Arrays.asList("issue3", "issue2"), info.getIssues());
+		verify(reporter, times(0)).log(any(), any());
+
+	}
+
+	@Test
+	public void testActNotMyTurn() {
+		info.doAction(new Accept(PARTY_ID, new Bid(Collections.emptyMap())));
+		verify(reporter, times(1)).log(eq(Level.SEVERE), any());
+
+	}
+
+	@Test
+	public void testChangeTurn() {
+		Listener<Object> testlistener = mock(Listener.class);
+		info.addListener(testlistener);
+
+		info.setMyTurn(true);
+		verify(testlistener, times(1)).notifyChange(eq(true));
+	}
+
+	@Test
+	public void testActMyTurn() {
+		info.setMyTurn(true);
+		info.doAction(new Accept(PARTY_ID, new Bid(Collections.emptyMap())));
+		verify(reporter, times(0)).log(any(), any());
+
+	}
+
+	@Test
+	public void testSetCurrentBid() {
+		Listener<Object> testlistener = mock(Listener.class);
+		info.addListener(testlistener);
+
+		Bid bid = mock(Bid.class);
+		info.setCurrentBid(bid);
+		assertEquals(bid, info.getCurrentBid());
+		verify(testlistener, times(1)).notifyChange(bid);
+
+	}
+
+}
+
+class TestProfileInterface extends DefaultListenable<Profile>
+		implements ProfileInterface {
+
+	private Profile profile;
+
+	public TestProfileInterface(Profile profile) {
+		this.profile = profile;
+	}
+
+	public void updateProfile(Profile profile) {
+		this.profile = profile;
+		notifyListeners(profile);
+	}
+
+	@Override
+	public Profile getProfile() {
+		return profile;
+	}
+
+}
Index: exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/HumanGuiTest.java
===================================================================
--- exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/HumanGuiTest.java	(revision 9)
+++ exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/HumanGuiTest.java	(revision 9)
@@ -0,0 +1,169 @@
+package geniusweb.exampleparties.humangui;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Random;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.actions.EndNegotiation;
+import geniusweb.actions.Offer;
+import geniusweb.actions.PartyId;
+import geniusweb.bidspace.AllBidsList;
+import geniusweb.issuevalue.Bid;
+import geniusweb.party.Capabilities;
+import geniusweb.party.inform.ActionDone;
+import geniusweb.party.inform.Finished;
+import geniusweb.party.inform.Settings;
+import geniusweb.party.inform.YourTurn;
+import geniusweb.profile.Profile;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.progress.ProgressRounds;
+import geniusweb.references.Parameters;
+import geniusweb.references.ProfileRef;
+import geniusweb.references.ProtocolRef;
+
+/**
+ * Should test the GUI stuff. At this moment it's just a simple quick test of
+ * the GUI without much testing
+ *
+ */
+public class HumanGuiTest {
+
+	private static final ProtocolRef SAOP = new ProtocolRef("SAOP");
+	private static final PartyId otherparty = new PartyId("other");
+	private static final String PROFILE = "src/test/resources/testprofile.json";
+	private final static ObjectMapper jackson = new ObjectMapper();
+
+	private HumanGui party;
+	private final TestConnection connection = new TestConnection();
+	private final ProtocolRef protocol = mock(ProtocolRef.class);
+	private final ProgressRounds progress = mock(ProgressRounds.class);
+	private Settings settings;
+	private LinearAdditiveUtilitySpace profile;
+	private final Parameters parameters = new Parameters();
+
+	@Before
+	public void before() throws JsonParseException, JsonMappingException,
+			IOException, URISyntaxException {
+		party = new HumanGui();
+		settings = new Settings(new PartyId("party1"),
+				new ProfileRef(new URI("file:" + PROFILE)), protocol, progress,
+				parameters);
+
+		String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)),
+				StandardCharsets.UTF_8);
+		profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized,
+				Profile.class);
+
+	}
+
+	@After
+	public void after() {
+		party.notifyChange(new Finished(null));
+	}
+
+	@Test
+	public void smokeTest() {
+	}
+
+	@Test
+	public void getDescriptionTest() {
+		assertNotNull(party.getDescription());
+	}
+
+	@Test
+	public void getCapabilitiesTest() {
+		Capabilities capabilities = party.getCapabilities();
+		assertFalse("party does not define protocols",
+				capabilities.getProtocols().isEmpty());
+	}
+
+	@Test
+	public void testGetCapabilities() {
+		assertTrue(party.getCapabilities().getProtocols().contains(SAOP));
+	}
+
+	@Test
+	public void testInformConnection() {
+		party.connect(connection);
+		// agent should not start acting just after an inform
+		assertEquals(0, connection.getActions().size());
+	}
+
+	@Test
+	public void testInformSettings() throws InterruptedException {
+		party.connect(connection);
+		connection.notifyListeners(settings);
+		assertEquals(0, connection.getActions().size());
+		Thread.sleep(1000);
+	}
+
+	@Test
+	public void testOtherWalksAway() throws InterruptedException {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		party.notifyChange(new ActionDone(new EndNegotiation(otherparty)));
+
+		// party should not act at this point
+		assertEquals(0, connection.getActions().size());
+
+		Thread.sleep(1000);
+
+	}
+
+	@Test
+	public void testReceiveOtherBid() throws InterruptedException {
+		party.connect(connection);
+		party.notifyChange(settings);
+		Thread.sleep(1000);
+
+		AllBidsList allbids = new AllBidsList(profile.getDomain());
+		Random r = new Random();
+		party.notifyChange(new ActionDone(new Offer(otherparty,
+				allbids.get(r.nextInt(allbids.size().intValue())))));
+
+		// party should not act at this point
+		assertEquals(0, connection.getActions().size());
+
+		Thread.sleep(1000);
+
+	}
+
+	@Test
+	public void testRecvAndYourTurn() throws InterruptedException {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		party.notifyChange(new ActionDone(new Offer(otherparty, randomBid())));
+		party.notifyChange(new YourTurn());
+
+		Thread.sleep(1000);
+
+	}
+
+	private Bid randomBid() {
+		AllBidsList allbids = new AllBidsList(profile.getDomain());
+		Random r = new Random();
+		return allbids.get(r.nextInt(allbids.size().intValue()));
+
+	}
+
+}
Index: exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/MyGUITest.java
===================================================================
--- exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/MyGUITest.java	(revision 9)
+++ exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/MyGUITest.java	(revision 9)
@@ -0,0 +1,75 @@
+package geniusweb.exampleparties.humangui;
+
+import static org.mockito.Mockito.mock;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.swing.JFrame;
+import javax.websocket.DeploymentException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import geniusweb.actions.Action;
+import geniusweb.actions.PartyId;
+import geniusweb.connection.ConnectionEnd;
+import geniusweb.party.inform.Inform;
+import geniusweb.party.inform.Settings;
+import geniusweb.profileconnection.ProfileConnectionFactory;
+import geniusweb.profileconnection.ProfileInterface;
+import geniusweb.progress.ProgressRounds;
+import geniusweb.references.Parameters;
+import geniusweb.references.ProfileRef;
+import geniusweb.references.ProtocolRef;
+import tudelft.utilities.logging.Reporter;
+
+public class MyGUITest {
+	private final ProtocolRef protocol = mock(ProtocolRef.class);
+	private final ProgressRounds progress = mock(ProgressRounds.class);
+	private static final String PROFILE = "src/test/resources/testprofile.json";
+	private final Parameters parameters = new Parameters();
+	private Reporter reporter = mock(Reporter.class);
+	private MyGUI gui;
+	private JFrame frame;
+	private BiddingInfo info;
+
+	@Before
+	public void before()
+			throws IOException, DeploymentException, URISyntaxException {
+		Settings settings = new Settings(new PartyId("party1"),
+				new ProfileRef(new URI("file:" + PROFILE)), protocol, progress,
+				parameters);
+
+		ProfileInterface profileint = ProfileConnectionFactory
+				.create(settings.getProfile().getURI(), reporter);
+		ConnectionEnd<Inform, Action> conn = mock(ConnectionEnd.class);
+		info = new BiddingInfo(settings, conn, reporter, profileint);
+		gui = new MyGUI(info);
+
+		// not strictly necesary but useful to visually check the process
+		frame = new JFrame();
+		Container content = frame.getContentPane();
+		content.setLayout(new BorderLayout());
+		content.add(gui, BorderLayout.CENTER);
+		frame.pack();
+		frame.setVisible(true);
+
+	}
+
+	@After
+	public void after() {
+		frame.setVisible(false);
+	}
+
+	@Test
+	public void smokeTest() throws IOException, DeploymentException,
+			URISyntaxException, InterruptedException {
+		Thread.sleep(2000);
+	}
+
+}
Index: exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/TestConnection.java
===================================================================
--- exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/TestConnection.java	(revision 9)
+++ exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/TestConnection.java	(revision 9)
@@ -0,0 +1,53 @@
+package geniusweb.exampleparties.humangui;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.LinkedList;
+import java.util.List;
+
+import geniusweb.actions.Action;
+import geniusweb.connection.ConnectionEnd;
+import geniusweb.party.inform.Inform;
+import geniusweb.references.Reference;
+import tudelft.utilities.listener.DefaultListenable;
+
+/**
+ * A "real" connection object, because the party is going to subscribe etc, and
+ * without a real connection we would have to do a lot of mocks that would make
+ * the test very hard to read.
+ *
+ */
+public class TestConnection extends DefaultListenable<Inform>
+		implements ConnectionEnd<Inform, Action> {
+	private List<Action> actions = new LinkedList<>();
+
+	@Override
+	public void send(Action action) throws IOException {
+		actions.add(action);
+	}
+
+	@Override
+	public Reference getReference() {
+		return null;
+	}
+
+	@Override
+	public URI getRemoteURI() {
+		return null;
+	}
+
+	@Override
+	public void close() {
+
+	}
+
+	@Override
+	public Error getError() {
+		return null;
+	}
+
+	public List<Action> getActions() {
+		return actions;
+	}
+
+}
Index: exampleparties/humangui/src/test/resources/testprofile.json
===================================================================
--- exampleparties/humangui/src/test/resources/testprofile.json	(revision 9)
+++ exampleparties/humangui/src/test/resources/testprofile.json	(revision 9)
@@ -0,0 +1,45 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"issueUtilities": {
+			"issue2": {
+				"numberutils": {
+					"lowValue": 12,
+					"lowUtility": 0.3,
+					"highValue": 18,
+					"highUtility": 0.9
+				}
+			},
+			"issue1": {
+				"discreteutils": {
+					"valueUtilities": {
+						"issue1value1": 0.2,
+						"issue1value2": 0.8
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"issue2": 0.4,
+			"issue1": 0.6
+		},
+		"domain": {
+			"name": "test",
+			"issuesValues": {
+				"issue2": {
+					"range": ["12", "18", "1"]
+				},
+				"issue1": {
+					"values": ["issue1value1", "issue1value2"]
+				}
+			}
+		},
+		"name": "testprofile",
+				"reservationBid": {
+			"issuevalues": {
+				"issue1": "issuevalue1",
+				"issue2": "12"
+			}
+		}
+		
+	}
+}
Index: exampleparties/humangui/src/test/resources/testprofile2.json
===================================================================
--- exampleparties/humangui/src/test/resources/testprofile2.json	(revision 9)
+++ exampleparties/humangui/src/test/resources/testprofile2.json	(revision 9)
@@ -0,0 +1,45 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"issueUtilities": {
+			"issue2": {
+				"numberutils": {
+					"lowValue": 12,
+					"lowUtility": 0.3,
+					"highValue": 18,
+					"highUtility": 0.9
+				}
+			},
+			"issue3": {
+				"discreteutils": {
+					"valueUtilities": {
+						"issue3value1": 0.2,
+						"issue3value2": 0.8
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"issue2": 0.4,
+			"issue3": 0.6
+		},
+		"domain": {
+			"name": "test",
+			"issuesValues": {
+				"issue2": {
+					"range": ["12", "18", "1"]
+				},
+				"issue3": {
+					"values": ["issue3value1", "issue3value2"]
+				}
+			}
+		},
+		"name": "testprofile",
+				"reservationBid": {
+			"issuevalues": {
+				"issue2": "12",
+				"issue3": "issuevalue1"
+			}
+		}
+		
+	}
+}
Index: exampleparties/linear/pom.xml
===================================================================
--- exampleparties/linear/pom.xml	(revision 8)
+++ exampleparties/linear/pom.xml	(revision 9)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>linear</artifactId>
-	<version>1.0.0</version>
+	<version>1.1.0</version>
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<basedir>.</basedir>
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
-		<jackson-2-version>2.9.6</jackson-2-version>
+		<jackson-2-version>2.9.10</jackson-2-version>
 	</properties>
 
@@ -33,5 +33,5 @@
 			<groupId>geniusweb.exampleparties</groupId>
 			<artifactId>timedependentparty</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
Index: exampleparties/randomparty/pom.xml
===================================================================
--- exampleparties/randomparty/pom.xml	(revision 8)
+++ exampleparties/randomparty/pom.xml	(revision 9)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>randomparty</artifactId>
-	<version>1.0.0</version>
+	<version>1.1.0</version>
 	<packaging>jar</packaging>
 
@@ -33,5 +33,5 @@
 			<groupId>geniusweb</groupId>
 			<artifactId>party</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 
@@ -39,14 +39,14 @@
 			<groupId>geniusweb</groupId>
 			<artifactId>bidspace</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>profileconnection</artifactId>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>logging</artifactId>
-			<version>1.0.0</version>
-		</dependency>
-		<dependency>
-			<groupId>geniusweb</groupId>
-			<artifactId>profileconnection</artifactId>
 			<version>1.0.0</version>
 		</dependency>
Index: exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java
===================================================================
--- exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java	(revision 8)
+++ exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java	(revision 9)
@@ -25,5 +25,5 @@
 import geniusweb.profile.PartialOrdering;
 import geniusweb.profile.Profile;
-import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.profile.utilityspace.UtilitySpace;
 import geniusweb.profileconnection.ProfileConnectionFactory;
 import geniusweb.profileconnection.ProfileInterface;
@@ -57,5 +57,6 @@
 			if (info instanceof Settings) {
 				Settings settings = (Settings) info;
-				this.profileint = ProfileConnectionFactory.create(settings.getProfile().getURI(), getReporter());
+				this.profileint = ProfileConnectionFactory
+						.create(settings.getProfile().getURI(), getReporter());
 				this.me = settings.getID();
 				this.progress = settings.getProgress();
@@ -74,5 +75,5 @@
 			}
 		} catch (Exception e) {
-			getReporter().log(Level.SEVERE, "Failed to handle info", e);
+			throw new RuntimeException("Failed to handle info", e);
 		}
 	}
@@ -81,7 +82,9 @@
 	public Capabilities getCapabilities() {
 		try {
-			return new Capabilities(new HashSet<>(Arrays.asList(new ProtocolRef(new URI("SAOP")))));
+			return new Capabilities(new HashSet<>(
+					Arrays.asList(new ProtocolRef(new URI("SAOP")))));
 		} catch (URISyntaxException e) {
-			getReporter().log(Level.SEVERE, "Failed to create capabilities URI", e);
+			getReporter().log(Level.SEVERE, "Failed to create capabilities URI",
+					e);
 			return null;
 		}
@@ -99,5 +102,6 @@
 		} else {
 			// for demo. Obviously full bids have higher util in general
-			AllPartialBidsList bidspace = new AllPartialBidsList(profileint.getProfile().getDomain());
+			AllPartialBidsList bidspace = new AllPartialBidsList(
+					profileint.getProfile().getDomain());
 			Bid bid = null;
 			for (int attempt = 0; attempt < 20 && !isGood(bid); attempt++) {
@@ -115,11 +119,13 @@
 			return false;
 		Profile profile = profileint.getProfile();
-		if (profile instanceof LinearAdditiveUtilitySpace) {
-			return ((LinearAdditiveUtilitySpace) profile).getUtility(bid).doubleValue() > 0.6;
+		if (profile instanceof UtilitySpace) {
+			return ((UtilitySpace) profile).getUtility(bid).doubleValue() > 0.6;
 		}
 		if (profile instanceof PartialOrdering) {
-			return ((PartialOrdering) profile).isPreferredOrEqual(bid, profile.getReservationBid());
+			return ((PartialOrdering) profile).isPreferredOrEqual(bid,
+					profile.getReservationBid());
 		}
-		throw new IllegalArgumentException("Can not handle profile type " + profile.getClass());
+		throw new IllegalArgumentException(
+				"Can not handle profile type " + profile.getClass());
 	}
 
Index: exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java
===================================================================
--- exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java	(revision 8)
+++ exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java	(revision 9)
@@ -33,5 +33,5 @@
 import geniusweb.actions.PartyId;
 import geniusweb.bidspace.AllBidsList;
-import geniusweb.connection.Connection;
+import geniusweb.connection.ConnectionEnd;
 import geniusweb.issuevalue.Bid;
 import geniusweb.party.Capabilities;
@@ -107,5 +107,5 @@
 	public void testInformSettings() {
 		party.connect(connection);
-		connection.notifyChange(settings);
+		connection.notifyListeners(settings);
 		assertEquals(0, connection.getActions().size());
 	}
@@ -199,5 +199,5 @@
  */
 class TestConnection extends DefaultListenable<Inform>
-		implements Connection<Inform, Action> {
+		implements ConnectionEnd<Inform, Action> {
 	private List<Action> actions = new LinkedList<>();
 
Index: exampleparties/randompartypy/pom.xml
===================================================================
--- exampleparties/randompartypy/pom.xml	(revision 8)
+++ exampleparties/randompartypy/pom.xml	(revision 9)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>randompyparty</artifactId>
-	<version>1.0.0</version>
+	<version>1.1.0</version>
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<basedir>.</basedir>
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
-		<jackson-2-version>2.9.6</jackson-2-version>
+		<jackson-2-version>2.9.10</jackson-2-version>
 	</properties>
 
@@ -31,5 +31,5 @@
 			<groupId>geniusweb</groupId>
 			<artifactId>pythonadapter</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 
@@ -37,10 +37,10 @@
 			<groupId>geniusweb</groupId>
 			<artifactId>bidspace</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
 			<groupId>geniusweb</groupId>
 			<artifactId>profileconnection</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
Index: exampleparties/randompartypy/src/main/resources/RandomParty.py
===================================================================
--- exampleparties/randompartypy/src/main/resources/RandomParty.py	(revision 8)
+++ exampleparties/randompartypy/src/main/resources/RandomParty.py	(revision 9)
@@ -24,5 +24,5 @@
 import geniusweb.profile.Profile as Profile
 import geniusweb.profile.PartialOrdering as PartialOrdering
-import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace as LinearAdditiveUtilitySpace
+import geniusweb.profile.utilityspace.UtilitySpace as UtilitySpace
 import geniusweb.references.ProfileRef as ProfileRef
 import geniusweb.references.ProtocolRef as ProtocolRef
@@ -97,5 +97,5 @@
 			return false
 		profile = self.profile.getProfile()
-		if isinstance(profile, LinearAdditiveUtilitySpace):
+		if isinstance(profile, UtilitySpace):
 			return profile.getUtility(bid).doubleValue() > 0.6;
 		if isinstance(profile, PartialOrdering):
Index: exampleparties/randompartypy/src/test/java/geniusweb/exampleparties/randompartypy/RandomPartyTest.java
===================================================================
--- exampleparties/randompartypy/src/test/java/geniusweb/exampleparties/randompartypy/RandomPartyTest.java	(revision 8)
+++ exampleparties/randompartypy/src/test/java/geniusweb/exampleparties/randompartypy/RandomPartyTest.java	(revision 9)
@@ -31,5 +31,5 @@
 import geniusweb.actions.PartyId;
 import geniusweb.bidspace.AllBidsList;
-import geniusweb.connection.Connection;
+import geniusweb.connection.ConnectionEnd;
 import geniusweb.issuevalue.Bid;
 import geniusweb.party.Capabilities;
@@ -111,5 +111,5 @@
 	public void testInformSettings() {
 		party.connect(connection);
-		connection.notifyChange(settings);
+		connection.notifyListeners(settings);
 		assertEquals(0, connection.getActions().size());
 	}
@@ -190,5 +190,5 @@
  */
 class TestConnection extends DefaultListenable<Inform>
-		implements Connection<Inform, Action> {
+		implements ConnectionEnd<Inform, Action> {
 	private List<Action> actions = new LinkedList<>();
 
Index: exampleparties/timedependentparty/pom.xml
===================================================================
--- exampleparties/timedependentparty/pom.xml	(revision 8)
+++ exampleparties/timedependentparty/pom.xml	(revision 9)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>timedependentparty</artifactId>
-	<version>1.0.0</version>
+	<version>1.1.0</version>
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<basedir>.</basedir>
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
-		<jackson-2-version>2.9.6</jackson-2-version>
+		<jackson-2-version>2.9.10</jackson-2-version>
 	</properties>
 
@@ -33,5 +33,5 @@
 			<groupId>geniusweb</groupId>
 			<artifactId>party</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
 		</dependency>
 
@@ -39,14 +39,14 @@
 			<groupId>geniusweb</groupId>
 			<artifactId>bidspace</artifactId>
-			<version>1.0.0</version>
+			<version>1.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>profileconnection</artifactId>
+			<version>1.1.0</version>
 		</dependency>
 		<dependency>
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>logging</artifactId>
-			<version>1.0.0</version>
-		</dependency>
-		<dependency>
-			<groupId>geniusweb</groupId>
-			<artifactId>profileconnection</artifactId>
 			<version>1.0.0</version>
 		</dependency>
Index: exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java
===================================================================
--- exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java	(revision 8)
+++ exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java	(revision 9)
@@ -33,5 +33,5 @@
 import geniusweb.actions.PartyId;
 import geniusweb.bidspace.AllBidsList;
-import geniusweb.connection.Connection;
+import geniusweb.connection.ConnectionEnd;
 import geniusweb.issuevalue.Bid;
 import geniusweb.party.Capabilities;
@@ -118,5 +118,5 @@
 	public void testInformSettings() {
 		party.connect(connection);
-		connection.notifyChange(settings);
+		connection.notifyListeners(settings);
 		assertEquals(0, connection.getActions().size());
 	}
@@ -223,5 +223,5 @@
  */
 class TestConnection extends DefaultListenable<Inform>
-		implements Connection<Inform, Action> {
+		implements ConnectionEnd<Inform, Action> {
 	private List<Action> actions = new LinkedList<>();
 
