Index: /bidspace/pom.xml
===================================================================
--- /bidspace/pom.xml	(revision 1)
+++ /bidspace/pom.xml	(revision 2)
@@ -42,5 +42,5 @@
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>immutablelist</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 
Index: /bidspace/src/main/java/geniusweb/bidspace/BidsWithUtility.java
===================================================================
--- /bidspace/src/main/java/geniusweb/bidspace/BidsWithUtility.java	(revision 2)
+++ /bidspace/src/main/java/geniusweb/bidspace/BidsWithUtility.java	(revision 2)
@@ -0,0 +1,60 @@
+package geniusweb.bidspace;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import geniusweb.issuevalue.Bid;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import tudelft.utilities.immutablelist.AbstractImmutableList;
+
+/**
+ * Object containing a subset of all bids, that have utility within given range.
+ */
+public class BidsWithUtility extends AbstractImmutableList<Bid> {
+
+	private final List<Bid> collectedbids;
+
+	/**
+	 * Create Bids with utility within given bounds.
+	 * 
+	 * @param space the {@link LinearAdditiveUtilitySpace} to search
+	 * @param min   the minimum required utility
+	 * @param max   the maximum required utility
+	 */
+	public BidsWithUtility(LinearAdditiveUtilitySpace space, BigDecimal min, BigDecimal max) {
+		this.collectedbids = new ArrayList<Bid>(getBids(space, min, max));
+	}
+
+	/**
+	 * Brute force hack for this time. Maybe we can construct this in a lazy way.
+	 * 
+	 * @param space
+	 * @param min
+	 * @param max
+	 * @return
+	 */
+	private List<Bid> getBids(LinearAdditiveUtilitySpace space, BigDecimal min, BigDecimal max) {
+		List<Bid> goodbids = new LinkedList<Bid>();
+		for (Bid bid : new AllBidsList(space.getDomain())) {
+			BigDecimal util = space.getUtility(bid);
+			if (util.compareTo(min) >= 0 && util.compareTo(max) <= 0) {
+				goodbids.add(bid);
+			}
+		}
+		return goodbids;
+	}
+
+	@Override
+	public Bid get(BigInteger index) {
+		return collectedbids.get(index.intValue());
+	}
+
+	@Override
+	public BigInteger size() {
+		return BigInteger.valueOf(collectedbids.size());
+	}
+
+}
Index: /bidspace/src/main/java/geniusweb/bidspace/PartialSpaceFromUtility.java
===================================================================
--- /bidspace/src/main/java/geniusweb/bidspace/PartialSpaceFromUtility.java	(revision 2)
+++ /bidspace/src/main/java/geniusweb/bidspace/PartialSpaceFromUtility.java	(revision 2)
@@ -0,0 +1,91 @@
+package geniusweb.bidspace;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import geniusweb.issuevalue.Bid;
+import geniusweb.profile.DefaultPartialOrdering;
+import geniusweb.profile.PartialOrdering;
+import geniusweb.profile.utilityspace.UtilitySpace;
+import tudelft.utilities.immutablelist.ListWithRemove;
+import tudelft.utilities.immutablelist.Tuple;
+import tudelft.utilities.immutablelist.Tuples;
+
+/**
+ * Simple demo converting a {@link UtilitySpace} into a {@link PartialOrdering}.
+ * Notice, a UtilitySpace IS a PartialOrdering, but a special one that is in
+ * fact a full ordering. This converter makes it a space that really has all
+ * info removed except for a few basic "isBetter" informations.
+ */
+public class PartialSpaceFromUtility extends DefaultPartialOrdering {
+	public PartialSpaceFromUtility(UtilitySpace space, int nRankings) {
+		super(space.getName() + "_" + nRankings, space.getDomain(), space.getReservationBid(),
+				pickBetter(space, nRankings));
+	}
+
+	/**
+	 * Pick subset of static isbetter rankings. Notice, ShuffledList currently can't
+	 * handle really large lists which also limits this. This has to be fixed.
+	 * 
+	 * @param space     the space to sample from
+	 * @param nRankings the number of rankings to be placed in the PartialOrdering.
+	 * @return a subset creating a partial profile of the geiven UtilitySpace
+	 */
+	private static Map<Bid, Set<Bid>> pickBetter(UtilitySpace space, int nRankings) {
+		Map<Bid, Set<Bid>> eqOrBetter = new HashMap<>();
+
+		AllBidsList allbids = new AllBidsList(space.getDomain());
+		ListWithRemove<Tuple<Bid, Bid>> available = new ListWithRemove<>(new Tuples<Bid, Bid>(allbids, allbids));
+		for (int n = 0; n < nRankings; n++) {
+			BigInteger sel = rnd(available.size());
+			Tuple<Bid, Bid> tuple = available.get(sel);
+			Bid bid1 = tuple.get1();
+			Bid bid2 = tuple.get2();
+			switch (space.getUtility(bid1).compareTo(space.getUtility(bid2))) {
+			case -1: // bid1 is worse
+				add(eqOrBetter, bid2, bid1);
+				break;
+			case 0:
+				add(eqOrBetter, bid2, bid1);
+				add(eqOrBetter, bid1, bid2);
+				break;
+			case 1:// bid1 is better
+				add(eqOrBetter, bid1, bid2);
+				break;
+			}
+			available = available.remove(sel);
+		}
+		return eqOrBetter;
+	}
+
+	/**
+	 * 
+	 * @param eqOrBetter map to be extended with (key=bid1, value=bid2)
+	 * @param bid1       the key to add a value to
+	 * @param bid2       the value to be added
+	 */
+	private static void add(Map<Bid, Set<Bid>> eqOrBetter, Bid bid1, Bid bid2) {
+		Set<Bid> set = eqOrBetter.get(bid1);
+		if (set == null) {
+			set = new HashSet<Bid>();
+		}
+		set.add(bid2);
+		eqOrBetter.put(bid1, set);
+	}
+
+	/**
+	 * Bit simplistic way to generate random in [0,n>. Simplistic because the mod()
+	 * operator that we use causes bias in the random numbers.
+	 * 
+	 * @param n the maximum value for the random number
+	 * @return random in [0,n>
+	 * 
+	 */
+	private static final BigInteger rnd(BigInteger n) {
+		return new BigInteger(n.bitLength(), new SecureRandom()).mod(n);
+	}
+}
Index: /bidspace/src/test/java/geniusweb/bidspace/BidsWithUtilityTest.java
===================================================================
--- /bidspace/src/test/java/geniusweb/bidspace/BidsWithUtilityTest.java	(revision 2)
+++ /bidspace/src/test/java/geniusweb/bidspace/BidsWithUtilityTest.java	(revision 2)
@@ -0,0 +1,100 @@
+package geniusweb.bidspace;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.issuevalue.Bid;
+import geniusweb.issuevalue.DiscreteValue;
+import geniusweb.issuevalue.DiscreteValueSet;
+import geniusweb.issuevalue.Domain;
+import geniusweb.issuevalue.NumberValue;
+import geniusweb.issuevalue.NumberValueSet;
+import geniusweb.issuevalue.ValueSet;
+import geniusweb.profile.Profile;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+
+public class BidsWithUtilityTest {
+	private static final DiscreteValue I1V2 = new DiscreteValue("i1v2");
+	private static final DiscreteValue I1V1 = new DiscreteValue("i1v1");
+	private static final NumberValue I2V1 = new NumberValue("2.00");
+	private static final NumberValue I2V2 = new NumberValue("2.45");
+	private static final NumberValue I2V3 = new NumberValue("2.90");
+	private static final String DOMAINNAME = "testdomain";
+	private static final String ISSUE1 = "issue1";
+	private static final String ISSUE2 = "issue2";
+	private static final Map<String, ValueSet> issues = new HashMap<>();
+
+	private static ValueSet values1;
+	private static ValueSet values2;
+	private static final BigDecimal TWO = new BigDecimal("2");
+	private static final BigDecimal THREE = new BigDecimal("3");
+	private final static BigDecimal ZERO_1 = new BigDecimal("0.1"), ZERO_2 = new BigDecimal("0.2"),
+			ZERO_3 = new BigDecimal("0.3");
+
+	private static Domain domain;
+	private final static ObjectMapper jackson = new ObjectMapper();
+
+	@Before
+	public void before() {
+		Collection<DiscreteValue> discretevalues1 = new LinkedList<>();
+		discretevalues1.add(I1V1);
+		discretevalues1.add(I1V2);
+		values1 = new DiscreteValueSet(discretevalues1);
+		issues.put(ISSUE1, values1);
+
+		values2 = new NumberValueSet(TWO, THREE, new BigDecimal("0.45"));
+		issues.put(ISSUE2, values2);
+
+		domain = new Domain(DOMAINNAME, issues);
+
+	}
+
+	@Test
+	public void smokeTest() {
+		LinearAdditiveUtilitySpace space = mock(LinearAdditiveUtilitySpace.class);
+		when(space.getDomain()).thenReturn(domain);
+		when(space.getUtility(any(Bid.class))).thenReturn(ZERO_2);
+		new BidsWithUtility(space, new BigDecimal("0.1"), new BigDecimal("0.3"));
+	}
+
+	@Test
+	public void testSelection() {
+		LinearAdditiveUtilitySpace space = mock(LinearAdditiveUtilitySpace.class);
+
+		when(space.getDomain()).thenReturn(domain);
+		when(space.getUtility(any(Bid.class))).thenReturn(ZERO_2);
+		BidsWithUtility selected = new BidsWithUtility(space, new BigDecimal("0.1"), new BigDecimal("0.3"));
+		assertEquals(new BigInteger("6"), selected.size());
+	}
+
+	@Test
+	public void testRealSpace() throws IOException {
+		String file1 = new String(Files.readAllBytes(Paths.get("src/test/resources/jobs/jobs1.json")));
+		LinearAdditiveUtilitySpace profile = (LinearAdditiveUtilitySpace) jackson.readValue(file1, Profile.class);
+		BidsWithUtility selected = new BidsWithUtility(profile, ZERO_1, ZERO_3);
+
+		assertEquals(new BigInteger("56"), selected.size());
+		for (Bid bid : selected) {
+			assertEquals(1, profile.getUtility(bid).compareTo(ZERO_1));
+			assertEquals(-1, profile.getUtility(bid).compareTo(ZERO_3));
+		}
+	}
+
+}
Index: /bidspace/src/test/java/geniusweb/bidspace/PartialSpaceFromUtilityTest.java
===================================================================
--- /bidspace/src/test/java/geniusweb/bidspace/PartialSpaceFromUtilityTest.java	(revision 2)
+++ /bidspace/src/test/java/geniusweb/bidspace/PartialSpaceFromUtilityTest.java	(revision 2)
@@ -0,0 +1,27 @@
+package geniusweb.bidspace;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import org.junit.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.profile.Profile;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+
+public class PartialSpaceFromUtilityTest {
+	private final static ObjectMapper jackson = new ObjectMapper();
+
+	@Test
+	public void createPartialSpaceJobs() throws IOException {
+		String file1 = new String(Files.readAllBytes(Paths.get("src/test/resources/jobs/jobs1.json")));
+		LinearAdditiveUtilitySpace profile = (LinearAdditiveUtilitySpace) jackson.readValue(file1, Profile.class);
+		PartialSpaceFromUtility partial = new PartialSpaceFromUtility(profile, 20);
+		System.out.println(jackson.writeValueAsString(partial));
+		assertEquals(20, partial.getBetter().size());
+	}
+}
Index: /exampleparties/boulware/pom.xml
===================================================================
--- /exampleparties/boulware/pom.xml	(revision 2)
+++ /exampleparties/boulware/pom.xml	(revision 2)
@@ -0,0 +1,193 @@
+<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>boulware</artifactId>
+	<version>1.0.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.exampleparties</groupId>
+			<artifactId>timedependentparty</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>logging</artifactId>
+			<version>1.0.0</version>
+		</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-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>geniusweb.exampleparties.boulware.Boulware</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.boulware.Boulware</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/boulware/src/main/java/geniusweb/exampleparties/boulware/Boulware.java
===================================================================
--- /exampleparties/boulware/src/main/java/geniusweb/exampleparties/boulware/Boulware.java	(revision 2)
+++ /exampleparties/boulware/src/main/java/geniusweb/exampleparties/boulware/Boulware.java	(revision 2)
@@ -0,0 +1,30 @@
+package geniusweb.exampleparties.boulware;
+
+import geniusweb.exampleparties.timedependentparty.TimeDependentParty;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * A simple party that places random bids and accepts when it receives an offer
+ * with sufficient utility.
+ */
+public class Boulware extends TimeDependentParty {
+
+	public Boulware() {
+		super();
+	}
+
+	public Boulware(Reporter reporter) {
+		super(reporter);
+	}
+
+	@Override
+	public String getDescription() {
+		return "Boulware: reluctant to concede";
+	}
+
+	@Override
+	public double getE() {
+		return 0.2;
+	}
+
+}
Index: /exampleparties/conceder/pom.xml
===================================================================
--- /exampleparties/conceder/pom.xml	(revision 2)
+++ /exampleparties/conceder/pom.xml	(revision 2)
@@ -0,0 +1,193 @@
+<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>conceder</artifactId>
+	<version>1.0.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.exampleparties</groupId>
+			<artifactId>timedependentparty</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>logging</artifactId>
+			<version>1.0.0</version>
+		</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-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>geniusweb.exampleparties.conceder.Conceder</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.conceder.Conceder</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/conceder/src/main/java/geniusweb/exampleparties/conceder/Conceder.java
===================================================================
--- /exampleparties/conceder/src/main/java/geniusweb/exampleparties/conceder/Conceder.java	(revision 2)
+++ /exampleparties/conceder/src/main/java/geniusweb/exampleparties/conceder/Conceder.java	(revision 2)
@@ -0,0 +1,30 @@
+package geniusweb.exampleparties.conceder;
+
+import geniusweb.exampleparties.timedependentparty.TimeDependentParty;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * A simple party that places random bids and accepts when it receives an offer
+ * with sufficient utility.
+ */
+public class Conceder extends TimeDependentParty {
+
+	public Conceder() {
+		super();
+	}
+
+	public Conceder(Reporter reporter) {
+		super(reporter);
+	}
+
+	@Override
+	public String getDescription() {
+		return "Conceder: going to the reservation value very quickly";
+	}
+
+	@Override
+	public double getE() {
+		return 2;
+	}
+
+}
Index: /exampleparties/hardliner/pom.xml
===================================================================
--- /exampleparties/hardliner/pom.xml	(revision 2)
+++ /exampleparties/hardliner/pom.xml	(revision 2)
@@ -0,0 +1,193 @@
+<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>hardliner</artifactId>
+	<version>1.0.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.exampleparties</groupId>
+			<artifactId>timedependentparty</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>logging</artifactId>
+			<version>1.0.0</version>
+		</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-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>geniusweb.exampleparties.hardliner.Hardliner</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.hardliner.Hardliner</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/hardliner/src/main/java/geniusweb/exampleparties/hardliner/Hardliner.java
===================================================================
--- /exampleparties/hardliner/src/main/java/geniusweb/exampleparties/hardliner/Hardliner.java	(revision 2)
+++ /exampleparties/hardliner/src/main/java/geniusweb/exampleparties/hardliner/Hardliner.java	(revision 2)
@@ -0,0 +1,30 @@
+package geniusweb.exampleparties.hardliner;
+
+import geniusweb.exampleparties.timedependentparty.TimeDependentParty;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * A simple party that places random bids and accepts when it receives an offer
+ * with sufficient utility.
+ */
+public class Hardliner extends TimeDependentParty {
+
+	public Hardliner() {
+		super();
+	}
+
+	public Hardliner(Reporter reporter) {
+		super(reporter);
+	}
+
+	@Override
+	public String getDescription() {
+		return "Hardliner: does not concede";
+	}
+
+	@Override
+	public double getE() {
+		return 0;
+	}
+
+}
Index: /exampleparties/linear/pom.xml
===================================================================
--- /exampleparties/linear/pom.xml	(revision 2)
+++ /exampleparties/linear/pom.xml	(revision 2)
@@ -0,0 +1,193 @@
+<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>linear</artifactId>
+	<version>1.0.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.exampleparties</groupId>
+			<artifactId>timedependentparty</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>tudelft.utilities</groupId>
+			<artifactId>logging</artifactId>
+			<version>1.0.0</version>
+		</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-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>geniusweb.exampleparties.linear.Linear</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.linear.Linear</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/linear/src/main/java/geniusweb/exampleparties/linear/Linear.java
===================================================================
--- /exampleparties/linear/src/main/java/geniusweb/exampleparties/linear/Linear.java	(revision 2)
+++ /exampleparties/linear/src/main/java/geniusweb/exampleparties/linear/Linear.java	(revision 2)
@@ -0,0 +1,30 @@
+package geniusweb.exampleparties.linear;
+
+import geniusweb.exampleparties.timedependentparty.TimeDependentParty;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * A simple party that places random bids and accepts when it receives an offer
+ * with sufficient utility.
+ */
+public class Linear extends TimeDependentParty {
+
+	public Linear() {
+		super();
+	}
+
+	public Linear(Reporter reporter) {
+		super(reporter);
+	}
+
+	@Override
+	public String getDescription() {
+		return "Linear: concedes linearly with time";
+	}
+
+	@Override
+	public double getE() {
+		return 1;
+	}
+
+}
Index: /exampleparties/pom.xml
===================================================================
--- /exampleparties/pom.xml	(revision 1)
+++ /exampleparties/pom.xml	(revision 2)
@@ -18,4 +18,9 @@
 		<module>randomparty</module>
 		<module>randompartypy</module>
+		<module>timedependentparty</module>
+		<module>conceder</module>
+		<module>hardliner</module>
+		<module>boulware</module>
+		<module>linear</module>
 	</modules>
 </project>
Index: /exampleparties/randomparty/pom.xml
===================================================================
--- /exampleparties/randomparty/pom.xml	(revision 1)
+++ /exampleparties/randomparty/pom.xml	(revision 2)
@@ -54,5 +54,5 @@
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>immutablelist</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 
Index: /exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java
===================================================================
--- /exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java	(revision 1)
+++ /exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java	(revision 2)
@@ -23,4 +23,6 @@
 import geniusweb.party.inform.Settings;
 import geniusweb.party.inform.YourTurn;
+import geniusweb.profile.PartialOrdering;
+import geniusweb.profile.Profile;
 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
 import geniusweb.profileconnection.ProfileConnectionFactory;
@@ -55,6 +57,5 @@
 			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();
@@ -80,9 +81,7 @@
 	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;
 		}
@@ -100,6 +99,5 @@
 		} 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++) {
@@ -114,7 +112,14 @@
 
 	private boolean isGood(Bid bid) {
-		return bid != null
-				&& ((LinearAdditiveUtilitySpace) profileint.getProfile())
-						.getUtility(bid).doubleValue() > 0.6;
+		if (bid == null)
+			return false;
+		Profile profile = profileint.getProfile();
+		if (profile instanceof LinearAdditiveUtilitySpace) {
+			return ((LinearAdditiveUtilitySpace) profile).getUtility(bid).doubleValue() > 0.6;
+		}
+		if (profile instanceof PartialOrdering) {
+			return ((PartialOrdering) profile).isPreferredOrEqual(bid, profile.getReservationBid());
+		}
+		throw new IllegalArgumentException("Can not handle profile type " + profile.getClass());
 	}
 
Index: /exampleparties/randompartypy/pom.xml
===================================================================
--- /exampleparties/randompartypy/pom.xml	(revision 1)
+++ /exampleparties/randompartypy/pom.xml	(revision 2)
@@ -47,5 +47,5 @@
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>immutablelist</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 
Index: /exampleparties/randompartypy/src/main/resources/RandomParty.py
===================================================================
--- /exampleparties/randompartypy/src/main/resources/RandomParty.py	(revision 1)
+++ /exampleparties/randompartypy/src/main/resources/RandomParty.py	(revision 2)
@@ -23,4 +23,5 @@
 import geniusweb.party.DefaultParty as DefaultParty
 import geniusweb.profile.Profile as Profile
+import geniusweb.profile.PartialOrdering as PartialOrdering
 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace as LinearAdditiveUtilitySpace
 import geniusweb.references.ProfileRef as ProfileRef
@@ -29,4 +30,5 @@
 import geniusweb.profileconnection.ProfileInterface as ProfileInterface
 import geniusweb.progress.ProgressRounds as ProgressRounds
+
 
 import com.fasterxml.jackson.databind.ObjectMapper as ObjectMapper
@@ -92,3 +94,10 @@
 
 	def _isGood(self, bid):
-		return bid != None and self.profile.getProfile().getUtility(bid).doubleValue() > 0.6;
+		if bid == None:
+			return false
+		profile = self.profile.getProfile()
+		if isinstance(profile, LinearAdditiveUtilitySpace):
+			return profile.getUtility(bid).doubleValue() > 0.6;
+		if isinstance(profile, PartialOrdering):
+			return profile.isPreferredOrEqual(bid, profile.getReservationBid())
+		raise Exception("Can not handle this type of profile")
Index: /exampleparties/timedependentparty/pom.xml
===================================================================
--- /exampleparties/timedependentparty/pom.xml	(revision 2)
+++ /exampleparties/timedependentparty/pom.xml	(revision 2)
@@ -0,0 +1,236 @@
+<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>timedependentparty</artifactId>
+	<version>1.0.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.0.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>geniusweb</groupId>
+			<artifactId>bidspace</artifactId>
+			<version>1.0.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>
+		<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-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>
+
+
+
+		</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/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java
===================================================================
--- /exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java	(revision 2)
+++ /exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java	(revision 2)
@@ -0,0 +1,196 @@
+package geniusweb.exampleparties.timedependentparty;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Random;
+import java.util.logging.Level;
+
+import geniusweb.actions.Accept;
+import geniusweb.actions.Action;
+import geniusweb.actions.Offer;
+import geniusweb.actions.PartyId;
+import geniusweb.bidspace.AllBidsList;
+import geniusweb.bidspace.BidsWithUtility;
+import geniusweb.issuevalue.Bid;
+import geniusweb.party.Capabilities;
+import geniusweb.party.DefaultParty;
+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.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.profile.utilityspace.UtilitySpace;
+import geniusweb.profileconnection.ProfileConnectionFactory;
+import geniusweb.profileconnection.ProfileInterface;
+import geniusweb.progress.Progress;
+import geniusweb.progress.ProgressRounds;
+import geniusweb.references.ProtocolRef;
+import tudelft.utilities.logging.Reporter;
+
+/**
+ * General time dependent party. This is a simplistic implementation that does
+ * brute-force search through the bidspace and can handle bidspace sizes up to
+ * 2^31 (approx 1 billion bids). It may take excessive time and run out of time
+ * on bidspaces > 10000 bids. In special cases it may even run out of memory,
+ */
+public abstract class TimeDependentParty extends DefaultParty {
+
+	private ProfileInterface profileint;
+	private PartyId me;
+	private Progress progress;
+	private Double minUtil = null, maxUtil = null;
+	private Bid lastReceivedBid = null;
+	private double tolerance;
+
+	public TimeDependentParty() {
+		super();
+	}
+
+	public TimeDependentParty(Reporter reporter) {
+		super(reporter); // for debugging
+	}
+
+	@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 void notifyChange(Inform info) {
+		try {
+			if (info instanceof Settings) {
+				Settings settings = (Settings) info;
+				this.profileint = ProfileConnectionFactory
+						.create(settings.getProfile().getURI(), getReporter());
+				this.me = settings.getID();
+				this.progress = settings.getProgress();
+				computeMinMax();
+			} else if (info instanceof ActionDone) {
+				Action otheract = ((ActionDone) info).getAction();
+				if (otheract instanceof Offer) {
+					lastReceivedBid = ((Offer) otheract).getBid();
+				}
+			} else if (info instanceof YourTurn) {
+				myTurn();
+				if (progress instanceof ProgressRounds) {
+					progress = ((ProgressRounds) progress).advance();
+				}
+			} else if (info instanceof Finished) {
+				getReporter().log(Level.INFO, "Final ourcome:" + info);
+			}
+		} catch (Exception e) {
+			getReporter().log(Level.SEVERE, "Failed to handle info", e);
+		}
+	}
+
+	/**
+	 * @return the E value that controls the party's behaviour. Depending on the
+	 *         value of e, extreme sets show clearly different patterns of
+	 *         behaviour [1]:
+	 * 
+	 *         1. Boulware: For this strategy e < 1 and the initial offer is
+	 *         maintained till time is almost exhausted, when the agent concedes
+	 *         up to its reservation value.
+	 * 
+	 *         2. Conceder: For this strategy e > 1 and the agent goes to its
+	 *         reservation value very quickly.
+	 * 
+	 *         3. When e = 1, the price is increased linearly.
+	 * 
+	 *         4. When e = 0, the agent plays hardball.
+	 */
+	public abstract double getE();
+
+	/******************* private support funcs ************************/
+
+	private void myTurn() throws IOException {
+		Action myAction = null;
+		Bid bid = makeBid();
+		UtilitySpace utilspace = getUtilSpace();
+
+		if (lastReceivedBid != null && utilspace.getUtility(lastReceivedBid)
+				.compareTo(utilspace.getUtility(bid)) > 0) {
+			myAction = new Accept(me, lastReceivedBid);
+		} else {
+			myAction = new Offer(me, makeBid());
+		}
+		getConnection().send(myAction);
+
+	}
+
+	private UtilitySpace getUtilSpace() {
+		return (LinearAdditiveUtilitySpace) profileint.getProfile();
+	}
+
+	/**
+	 * Computes the fields minutil and maxUtil if not yet computed. minutil is
+	 * the minimum utility of any bid, but at least the utility of the
+	 * reservation bid. maxUtil is the maximum util of any bid.
+	 * <p>
+	 * TODO this is simplistic, very expensive method and may cause us to run
+	 * out of time on large domains.
+	 * <p>
+	 * Can be called only after profileint has been set.
+	 */
+	private void computeMinMax() {
+		if (this.maxUtil != null && this.minUtil != null)
+			return;
+		this.minUtil = 1d;
+		this.maxUtil = 0d;
+		UtilitySpace utilspace = getUtilSpace();
+		AllBidsList allbidslist = new AllBidsList(
+				profileint.getProfile().getDomain());
+		for (Bid bid : allbidslist) {
+			double util = utilspace.getUtility(bid).doubleValue();
+			if (util < minUtil)
+				minUtil = util;
+			if (util > maxUtil)
+				maxUtil = util;
+		}
+		double rv = utilspace.getUtility(utilspace.getReservationBid())
+				.doubleValue();
+		if (rv > minUtil)
+			minUtil = rv;
+		tolerance = 100 / allbidslist.size().longValue();
+		tolerance = Math.max(tolerance, 0.1);
+	}
+
+	private Bid makeBid() {
+		double time = progress.get(System.currentTimeMillis());
+		double utilityGoal = utilityGoal(time, getE());
+		BidsWithUtility options = new BidsWithUtility(
+				(LinearAdditiveUtilitySpace) profileint.getProfile(),
+				BigDecimal.valueOf(utilityGoal),
+				BigDecimal.valueOf(utilityGoal + tolerance));
+		// pick a random one.
+		return options.get(new Random().nextInt(options.size().intValue()));
+
+	}
+
+	/**
+	 * 
+	 * @param t the time in [0,1] where 0 means start of nego and 1 the end of
+	 *          nego (absolute time/round limit)
+	 * @param e the e value
+	 * @return the utility goal for this time and e value
+	 */
+	private double utilityGoal(double t, double e) {
+		double ft = 0;
+		if (e != 0)
+			ft = Math.pow(t, 1 / e);
+		// we subtract 0.000001 to correct possibly small round-up errors
+		return minUtil + (maxUtil - minUtil) * (1 - ft) - 0.000001;
+	}
+}
Index: /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java
===================================================================
--- /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java	(revision 2)
+++ /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java	(revision 2)
@@ -0,0 +1,253 @@
+package geniusweb.exampleparties.timedependentparty;
+
+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.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+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.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+
+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.Action;
+import geniusweb.actions.EndNegotiation;
+import geniusweb.actions.Offer;
+import geniusweb.actions.PartyId;
+import geniusweb.bidspace.AllBidsList;
+import geniusweb.connection.Connection;
+import geniusweb.issuevalue.Bid;
+import geniusweb.party.Capabilities;
+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.profile.Profile;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.progress.ProgressRounds;
+import geniusweb.references.ProfileRef;
+import geniusweb.references.ProtocolRef;
+import geniusweb.references.Reference;
+import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.logging.Reporter;
+
+public class TimeDependentPartyTest {
+
+	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 TimeDependentParty party;
+	private TestConnection connection = new TestConnection();
+	private ProtocolRef protocol = mock(ProtocolRef.class);
+	private ProgressRounds progress = mock(ProgressRounds.class);
+	private Settings settings;
+	private LinearAdditiveUtilitySpace profile;
+
+	@Before
+	public void before() throws JsonParseException, JsonMappingException,
+			IOException, URISyntaxException {
+		party = new TimeDependentParty() {
+
+			@Override
+			public String getDescription() {
+				return "test";
+			}
+
+			@Override
+			public double getE() {
+				return 2; // conceder-like
+			}
+		};
+		settings = new Settings(new PartyId("party1"),
+				new ProfileRef(new URI("file:" + PROFILE)), protocol, progress);
+
+		String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)),
+				StandardCharsets.UTF_8);
+		profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized,
+				Profile.class);
+
+	}
+
+	@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 testInformConnection() {
+		party.connect(connection);
+		// agent should not start acting just after an inform
+		assertEquals(0, connection.getActions().size());
+	}
+
+	@Test
+	public void testInformSettings() {
+		party.connect(connection);
+		connection.notifyChange(settings);
+		assertEquals(0, connection.getActions().size());
+	}
+
+	@Test
+	public void testInformAndConnection() {
+		party.connect(connection);
+		party.notifyChange(settings);
+		assertEquals(0, connection.getActions().size());
+	}
+
+	@Test
+	public void testOtherWalksAway() {
+		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());
+	}
+
+	@Test
+	public void testAgentHasFirstTurn() {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		party.notifyChange(new YourTurn());
+		assertEquals(1, connection.getActions().size());
+		assertTrue(connection.getActions().get(0) instanceof Offer);
+	}
+
+//	@Test
+//	public void testAgentAccepts() {
+//		party.connect(connection);
+//		party.notifyChange(settings);
+//
+//		Bid bid = findBestBid();
+//		party.notifyChange(new ActionDone(new Offer(otherparty, bid)));
+//		party.notifyChange(new YourTurn());
+//		assertEquals(1, connection.getActions().size());
+//		assertTrue(connection.getActions().get(0) instanceof Accept);
+//
+//	}
+
+	@Test
+	public void testAgentLogsFinal() {
+		// this log output is optional, this is to show how to check log
+		Reporter reporter = mock(Reporter.class);
+		party = new TimeDependentParty(reporter) {
+
+			@Override
+			public String getDescription() {
+				return "test";
+			}
+
+			@Override
+			public double getE() {
+				return 2; /// conceder like
+			}
+		};
+		party.connect(connection);
+		party.notifyChange(settings);
+		party.notifyChange(new Finished(null));
+
+		verify(reporter).log(eq(Level.INFO),
+				eq("Final ourcome:Finished[null]"));
+	}
+
+	@Test
+	public void testAgentsUpdatesProgress() {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		party.notifyChange(new YourTurn());
+		verify(progress).advance();
+	}
+
+	@Test
+	public void testGetCapabilities() {
+		assertTrue(party.getCapabilities().getProtocols().contains(SAOP));
+	}
+
+	private Bid findBestBid() {
+		BigDecimal bestvalue = BigDecimal.ZERO;
+		Bid best = null;
+		for (Bid bid : new AllBidsList(profile.getDomain())) {
+			BigDecimal util = profile.getUtility(bid);
+			if (util.compareTo(bestvalue) > 0) {
+				best = bid;
+				bestvalue = util;
+			}
+		}
+		return best;
+	}
+
+}
+
+/**
+ * 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.
+ *
+ */
+class TestConnection extends DefaultListenable<Inform>
+		implements Connection<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/timedependentparty/src/test/resources/testprofile.json
===================================================================
--- /exampleparties/timedependentparty/src/test/resources/testprofile.json	(revision 2)
+++ /exampleparties/timedependentparty/src/test/resources/testprofile.json	(revision 2)
@@ -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: /issuevalue/pom.xml
===================================================================
--- /issuevalue/pom.xml	(revision 1)
+++ /issuevalue/pom.xml	(revision 2)
@@ -92,5 +92,5 @@
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>immutablelist</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 
Index: /issuevalue/src/test/java/geniusweb/issuevalue/DomainTest.java
===================================================================
--- /issuevalue/src/test/java/geniusweb/issuevalue/DomainTest.java	(revision 1)
+++ /issuevalue/src/test/java/geniusweb/issuevalue/DomainTest.java	(revision 2)
@@ -21,11 +21,4 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import geniusweb.issuevalue.Bid;
-import geniusweb.issuevalue.DiscreteValue;
-import geniusweb.issuevalue.DiscreteValueSet;
-import geniusweb.issuevalue.Domain;
-import geniusweb.issuevalue.NumberValue;
-import geniusweb.issuevalue.NumberValueSet;
-import geniusweb.issuevalue.ValueSet;
 import tudelft.utilities.junit.GeneralTests;
 
@@ -38,10 +31,8 @@
 	private static final String ISSUE3 = "issue3";
 	private static final ObjectMapper jackson = new ObjectMapper();
-	private static final String domainstring = "{\"name\":\"testdomain\",\"issuesValues\":{\"issue2\":{\"range\":[\"2\",\"3\",\"0.22\"]},\"issue1\":{\"values\":[\"i1v1\",\"i1v2\"]}}}";
+	private static final String domainstring = "{\"name\":\"testdomain\",\"issuesValues\":{\"issue2\":{\"range\":[2,3,0.22]},\"issue1\":{\"values\":[\"i1v1\",\"i1v2\"]}}}";
 
-	private static final String jobsstring = "{\"name\":\"jobs\","
-			+ "\"issuesValues\":{"
-			+ "\"lease car\":{\"values\":[\"yes\",\"no\"]},"
-			+ "\"permanent contract\":{\"values\":[\"yes\",\"no\"]},"
+	private static final String jobsstring = "{\"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\"]},"
@@ -73,6 +64,5 @@
 		Map<String, ValueSet> issues1 = new HashMap<>();
 		issues1.put(ISSUE1, values1);
-		issues1.put(ISSUE2, new NumberValueSet(BigDecimal.ONE, TWO,
-				new BigDecimal("0.22")));
+		issues1.put(ISSUE2, new NumberValueSet(BigDecimal.ONE, TWO, new BigDecimal("0.22")));
 		domain3 = new Domain(DOMAINNAME, issues1);
 
@@ -81,12 +71,10 @@
 	@Override
 	public List<List<Domain>> getGeneralTestData() {
-		return Arrays.asList(Arrays.asList(domain, domain1),
-				Arrays.asList(domain2), Arrays.asList(domain3));
+		return Arrays.asList(Arrays.asList(domain, domain1), Arrays.asList(domain2), Arrays.asList(domain3));
 	}
 
 	@Override
 	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("Domain.*testdomain.*", "Domain.*testdomain1.*",
-				"Domain.*testdomain.*");
+		return Arrays.asList("Domain.*testdomain.*", "Domain.*testdomain1.*", "Domain.*testdomain.*");
 	}
 
@@ -109,7 +97,6 @@
 		System.out.println(jobsstring);
 		Domain jobsdomain = jackson.readValue(jobsstring, Domain.class);
-		assertEquals(new HashSet<>(Arrays.asList("lease car",
-				"permanent contract", "career development opportunities", "fte",
-				"salary", "work from home")), jobsdomain.getIssues());
+		assertEquals(new HashSet<>(Arrays.asList("lease car", "permanent contract", "career development opportunities",
+				"fte", "salary", "work from home")), jobsdomain.getIssues());
 
 	}
@@ -134,6 +121,5 @@
 	public void testIsCompleteNoIssuesDefined() {
 		Bid bid = mock(Bid.class);
-		assertThat(domain.isComplete(bid), new PatternMatch(
-				"Issues in bid .* do not match issues in domain .*"));
+		assertThat(domain.isComplete(bid), new PatternMatch("Issues in bid .* do not match issues in domain .*"));
 	}
 
@@ -154,6 +140,5 @@
 		// THREE is NOT a possible value in the NumberValueSet.
 		when(bid.getValue(ISSUE2)).thenReturn(new NumberValue(THREE));
-		assertThat(domain.isComplete(bid),
-				new PatternMatch("bid issue issue2 has illegal value 3"));
+		assertThat(domain.isComplete(bid), new PatternMatch("bid issue issue2 has illegal value 3"));
 	}
 
@@ -167,6 +152,5 @@
 		// THREE is NOT a possible value in the NumberValueSet.
 		when(bid.getValue(ISSUE2)).thenReturn(new NumberValue(THREE));
-		assertThat(domain.isComplete(bid), new PatternMatch(
-				"Issues in bid .* do not match issues in domain .*"));
+		assertThat(domain.isComplete(bid), new PatternMatch("Issues in bid .* do not match issues in domain .*"));
 	}
 
Index: /issuevalue/src/test/java/geniusweb/issuevalue/NumberValueSetTest.java
===================================================================
--- /issuevalue/src/test/java/geniusweb/issuevalue/NumberValueSetTest.java	(revision 1)
+++ /issuevalue/src/test/java/geniusweb/issuevalue/NumberValueSetTest.java	(revision 2)
@@ -16,7 +16,4 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import geniusweb.issuevalue.NumberValue;
-import geniusweb.issuevalue.NumberValueSet;
-import geniusweb.issuevalue.ValueSet;
 import tudelft.utilities.immutablelist.Range;
 
@@ -33,5 +30,5 @@
 			new BigDecimal("0.1"));
 
-	private final String asString = "{\"range\":[\"12.2\",\"12.6\",\"0.3\"]}";
+	private final String asString = "{\"range\":[12.2,12.6,0.3]}";
 	private final static NumberValueSet bigset = new NumberValueSet(BigDecimal.ZERO, BigDecimal.TEN,
 			new BigDecimal("0.00003"));
Index: /profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java
===================================================================
--- /profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java	(revision 2)
+++ /profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java	(revision 2)
@@ -0,0 +1,156 @@
+package geniusweb.profile;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import geniusweb.issuevalue.Bid;
+import geniusweb.issuevalue.Domain;
+
+/**
+ * Default implementation of partial ordering that stores all is-better
+ * relations explicitly in a map.
+ * 
+ * NOTICE this can handle profiles of max size Integer. This is because various
+ * functions used here rely on basic java functions that can handle only int.
+ * Besides, the size of partial maps grows very rapidly so this approach is
+ * limited anyway.
+ */
+public class DefaultPartialOrdering extends DefaultProfile implements PartialOrdering {
+
+	/**
+	 * Set is sparsely filled. If a Bid is not a key, it is not better than any
+	 * other bid.
+	 */
+	private final Map<Bid, Set<Bid>> isBetter;
+
+	/**
+	 * 
+	 * @param name
+	 * @param domain
+	 * @param reservationbid
+	 * @param bids
+	 * @param isbetterList   a list of tuples [bid1index, bid2index]. It indicates
+	 *                       that bids[bid1index] isbetterthan bids[bid2index].
+	 */
+	@JsonCreator
+	public DefaultPartialOrdering(@JsonProperty("name") String name, @JsonProperty("domain") Domain domain,
+			@JsonProperty("reservationBid") Bid reservationbid, @JsonProperty("bids") List<Bid> bids,
+			@JsonProperty("better") List<List<Integer>> isbetterList) {
+		this(name, domain, reservationbid, makeBidMap(bids, isbetterList));
+	}
+
+	/**
+	 * @param name           the name for the profile
+	 * @param domain         the {@link Domain} description
+	 * @param reservationbid the reservation {@link Bid}
+	 * @param isBetterMap    a map with keys = a better bid and value=a less good
+	 *                       bid.
+	 */
+	public DefaultPartialOrdering(String name, Domain domain, Bid reservationbid, Map<Bid, Set<Bid>> isBetterMap) {
+		super(name, domain, reservationbid);
+		this.isBetter = isBetterMap;
+	}
+
+	@Override
+	public boolean isPreferredOrEqual(Bid bid1, Bid bid2) {
+		if (!isBetter.containsKey(bid1))
+			return false;
+		return isBetter.get(bid1).contains(bid2);
+	}
+
+	/**
+	 * 
+	 * @return a list with all the bids
+	 */
+	@JsonGetter
+	public List<Bid> getBids() {
+		// FIXME the iteration order may not be guaranteed!
+		Set<Bid> bids = new HashSet<>();
+		for (Bid bid : isBetter.keySet()) {
+			bids.add(bid);
+			bids.addAll(isBetter.get(bid));
+		}
+		return new ArrayList<Bid>(bids);
+	}
+
+	@JsonGetter
+	/**
+	 * 
+	 * @return a list of tuples [bid1index, bid2index]. It indicates that
+	 *         bids[bid1index] isbetterthan bids[bid2index].
+	 */
+	public List<List<Integer>> getBetter() {
+		List<List<Integer>> betterlist = new LinkedList<>();
+		List<Bid> bidslist = getBids();
+
+		for (Bid bid : bidslist) {
+			if (isBetter.containsKey(bid)) {
+				for (Bid worsebid : isBetter.get(bid)) {
+					betterlist.add(Arrays.asList(bidslist.indexOf(bid), bidslist.indexOf(worsebid)));
+				}
+			}
+		}
+
+		return betterlist;
+	}
+
+	@Override
+	public String toString() {
+		return "DefaultPartialOrdering[" + getValuesString() + "," + isBetter + "]";
+	}
+
+	private static Map<Bid, Set<Bid>> makeBidMap(List<Bid> bids, List<List<Integer>> isBetterList) {
+		Map<Bid, Set<Bid>> betterMap = new HashMap<>();
+
+		for (List<Integer> tuple : isBetterList) {
+			if (tuple.size() != 2) {
+				throw new IllegalArgumentException("Expected tuple but found " + tuple + "in " + isBetterList);
+			}
+			Bid betterbid = bids.get(tuple.get(0));
+			Set<Bid> map = betterMap.get(betterbid);
+			if (map == null) {
+				map = new HashSet<>();
+				betterMap.put(betterbid, map);
+			}
+			map.add(bids.get(tuple.get(1)));
+		}
+
+		return betterMap;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result + ((isBetter == null) ? 0 : isBetter.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		DefaultPartialOrdering other = (DefaultPartialOrdering) obj;
+		if (isBetter == null) {
+			if (other.isBetter != null)
+				return false;
+		} else if (!isBetter.equals(other.isBetter))
+			return false;
+		return true;
+	}
+
+}
Index: /profile/src/main/java/geniusweb/profile/DefaultProfile.java
===================================================================
--- /profile/src/main/java/geniusweb/profile/DefaultProfile.java	(revision 2)
+++ /profile/src/main/java/geniusweb/profile/DefaultProfile.java	(revision 2)
@@ -0,0 +1,93 @@
+package geniusweb.profile;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import geniusweb.issuevalue.Bid;
+import geniusweb.issuevalue.Domain;
+
+/**
+ * Set up such that jackson can look at the getters.
+ *
+ */
+public abstract class DefaultProfile implements Profile {
+	private final String name;
+	private final Domain domain;
+	private final Bid reservationbid;
+
+	/**
+	 * 
+	 * @param name           the name for the profile
+	 * @param domain         the {@link Domain} description
+	 * @param reservationbid the reservation {@link Bid}
+	 */
+	@JsonCreator
+	public DefaultProfile(String name, Domain domain, Bid reservationbid) {
+		this.name = name;
+		this.domain = domain;
+		this.reservationbid = reservationbid;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public Domain getDomain() {
+		return domain;
+	}
+
+	@Override
+	public Bid getReservationBid() {
+		return reservationbid;
+	}
+
+	/**
+	 * 
+	 * @return string of values contained in here. Useful to make derived toString
+	 *         functions
+	 */
+	@JsonIgnore
+	public String getValuesString() {
+		return name + "," + domain + "," + reservationbid;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((domain == null) ? 0 : domain.hashCode());
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		result = prime * result + ((reservationbid == null) ? 0 : reservationbid.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		DefaultProfile other = (DefaultProfile) obj;
+		if (domain == null) {
+			if (other.domain != null)
+				return false;
+		} else if (!domain.equals(other.domain))
+			return false;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		if (reservationbid == null) {
+			if (other.reservationbid != null)
+				return false;
+		} else if (!reservationbid.equals(other.reservationbid))
+			return false;
+		return true;
+	}
+
+}
Index: /profile/src/main/java/geniusweb/profile/Profile.java
===================================================================
--- /profile/src/main/java/geniusweb/profile/Profile.java	(revision 1)
+++ /profile/src/main/java/geniusweb/profile/Profile.java	(revision 2)
@@ -16,5 +16,6 @@
  */
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
-@JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class) })
+@JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class),
+		@JsonSubTypes.Type(value = DefaultPartialOrdering.class) })
 public interface Profile {
 
@@ -32,9 +33,8 @@
 	/**
 	 * 
-	 * @return a (hypothetical) bid that is the best alternative to a
-	 *         non-agreement. Only bids that are
-	 *         {@link #isPreferredOrEqual(Bid, Bid)} should be accepted. If a
-	 *         negotiation does not reach an agreement, the party can get this
-	 *         offer somewhere else. This replaces the older notion of a
+	 * @return a (hypothetical) bid that is the best alternative to a non-agreement.
+	 *         Only bids that are {@link #isPreferredOrEqual(Bid, Bid)} should be
+	 *         accepted. If a negotiation does not reach an agreement, the party can
+	 *         get this offer somewhere else. This replaces the older notion of a
 	 *         "reservation value" and is more general. If null, there is no
 	 *         reservation bid and any agreement is better than no agreement.
Index: /profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java
===================================================================
--- /profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java	(revision 2)
+++ /profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java	(revision 2)
@@ -0,0 +1,105 @@
+package geniusweb.profile;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+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.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.issuevalue.Bid;
+import geniusweb.issuevalue.DiscreteValue;
+import geniusweb.issuevalue.DiscreteValueSet;
+import geniusweb.issuevalue.Domain;
+import geniusweb.issuevalue.ValueSet;
+import tudelft.utilities.junit.GeneralTests;
+
+public class DefaultPartialOrderingTest extends GeneralTests<DefaultPartialOrdering> {
+
+	private final String serialized = "{\"DefaultPartialOrdering\":{" + "\"name\":\"ordering1\","
+			+ "\"domain\":{\"name\":\"dom1\",\"issuesValues\":{\"iss1\":{\"values\":[\"1\",\"2\",\"3\"]}}},"
+			+ "\"reservationBid\":{\"issuevalues\":{\"iss1\":\"1\"}},"
+			+ "\"bids\":[{\"issuevalues\":{\"iss1\":\"1\"}},{\"issuevalues\":{\"iss1\":\"3\"}},{\"issuevalues\":{\"iss1\":\"2\"}}],"
+			+ "\"better\":[[0,2],[1,2]]}}";
+
+	// we need real (not mock) values otherwise serializer crashes..
+	private String issue1 = "iss1";
+	private DefaultPartialOrdering ordering1, ordering1b, ordering2, ordering3, ordering4, ordering5;
+
+	private Bid bid1, bid2, bid3;
+
+	@Before
+	public void before() {
+		Map<String, ValueSet> issues = new HashMap<>();
+		DiscreteValue val1 = new DiscreteValue("1");
+		DiscreteValue val2 = new DiscreteValue("2");
+		DiscreteValue val3 = new DiscreteValue("3");
+		issues.put(issue1, new DiscreteValueSet(new HashSet<>(Arrays.asList(val1, val2, val3))));
+		Domain domain1 = new Domain("dom1", issues);
+		Domain domain2 = new Domain("dom2", issues);
+		bid1 = new Bid(Collections.singletonMap(issue1, val1));
+		bid2 = new Bid(Collections.singletonMap(issue1, val2));
+		bid3 = new Bid(Collections.singletonMap(issue1, val3));
+
+		Map<Bid, Set<Bid>> map1 = new HashMap<>();
+		map1.put(bid1, new HashSet<Bid>(Arrays.asList(bid2)));
+		map1.put(bid3, new HashSet<Bid>(Arrays.asList(bid2)));
+
+		Map<Bid, Set<Bid>> map2 = new HashMap<>();
+		map2.put(bid1, new HashSet<Bid>(Arrays.asList(bid2)));
+		map2.put(bid3, new HashSet<Bid>(Arrays.asList(bid1)));
+
+		ordering1 = new DefaultPartialOrdering("ordering1", domain1, bid1, map1);
+		ordering1b = new DefaultPartialOrdering("ordering1", domain1, bid1, map1);
+		ordering2 = new DefaultPartialOrdering("ordering2", domain1, bid1, map1);
+		ordering3 = new DefaultPartialOrdering("ordering1", domain2, bid1, map1);
+		ordering4 = new DefaultPartialOrdering("ordering1", domain1, bid2, map1);
+		ordering5 = new DefaultPartialOrdering("ordering1", domain1, bid1, map2);
+
+	}
+
+	@Override
+	public List<List<DefaultPartialOrdering>> getGeneralTestData() {
+		return Arrays.asList(Arrays.asList(ordering1, ordering1b), Arrays.asList(ordering2), Arrays.asList(ordering3),
+				Arrays.asList(ordering4), Arrays.asList(ordering5));
+	}
+
+	@Override
+	public List<String> getGeneralTestStrings() {
+		return Arrays.asList("DefaultPartialOrdering.*", "DefaultPartialOrdering.*", "DefaultPartialOrdering.*",
+				"DefaultPartialOrdering.*", "DefaultPartialOrdering.*");
+	}
+
+	@Test
+	public void testSerialize() throws JsonProcessingException {
+		ObjectMapper jackson = new ObjectMapper();
+		assertEquals(serialized, jackson.writeValueAsString(ordering1));
+		System.out.println(serialized);
+	}
+
+	@Test
+	public void testDeserialize() throws IOException {
+		ObjectMapper jackson = new ObjectMapper();
+		assertEquals(ordering1, jackson.readValue(serialized, Profile.class));
+	}
+
+	@Test
+	public void testIsBetter() {
+		assertTrue(ordering1.isPreferredOrEqual(bid1, bid2));
+		assertFalse(ordering1.isPreferredOrEqual(bid1, bid3));
+		assertFalse(ordering1.isPreferredOrEqual(bid2, bid3));
+	}
+
+}
Index: /profileconnection/src/main/java/geniusweb/profileconnection/FileProfileConnector.java
===================================================================
--- /profileconnection/src/main/java/geniusweb/profileconnection/FileProfileConnector.java	(revision 1)
+++ /profileconnection/src/main/java/geniusweb/profileconnection/FileProfileConnector.java	(revision 2)
@@ -10,5 +10,4 @@
 
 import geniusweb.profile.Profile;
-import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
 
 /**
@@ -17,5 +16,5 @@
 public class FileProfileConnector implements ProfileInterface {
 	private final static ObjectMapper jackson = new ObjectMapper();
-	private final LinearAdditiveUtilitySpace profile;
+	private final Profile profile;
 
 	/**
@@ -26,12 +25,10 @@
 	public FileProfileConnector(String filename) throws IOException {
 		Path path = new File(filename).toPath();
-		String serialized = new String(Files.readAllBytes(path),
-				StandardCharsets.UTF_8);
-		profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized,
-				Profile.class);
+		String serialized = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
+		profile = jackson.readValue(serialized, Profile.class);
 	}
 
 	@Override
-	public LinearAdditiveUtilitySpace getProfile() {
+	public Profile getProfile() {
 		return profile;
 	}
Index: /protocol/pom.xml
===================================================================
--- /protocol/pom.xml	(revision 1)
+++ /protocol/pom.xml	(revision 2)
@@ -56,5 +56,5 @@
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>immutablelist</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 		<dependency>
Index: /simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerE2ETest.java
===================================================================
--- /simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerE2ETest.java	(revision 1)
+++ /simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerE2ETest.java	(revision 2)
@@ -5,13 +5,16 @@
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collection;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import geniusweb.protocol.session.SessionSettings;
-import geniusweb.simplerunner.ClassPathConnectionFactory;
-import geniusweb.simplerunner.NegoRunner;
 import tudelft.utilities.logging.ReportToLogger;
 import tudelft.utilities.logging.Reporter;
@@ -22,20 +25,27 @@
  * this module.
  */
+@RunWith(Parameterized.class)
 public class SessionRunnerE2ETest {
-	private static final String SESSION_SETTINGS = "src/test/resources/settings.json";
 	private final ObjectMapper jackson = new ObjectMapper();
 	private NegoRunner runner;
 	private Reporter logger = new ReportToLogger("test");
+	private String filename;
+
+	@Parameters
+	public static Collection<Object[]> data() {
+		return Arrays.asList(
+				new Object[][] { { "src/test/resources/settings.json" }, { "src/test/resources/settings2.json" } });
+	}
+
+	public SessionRunnerE2ETest(String file) {
+		this.filename = file;
+	}
 
 	@Before
 	public void before() throws IOException {
-		String serialized = new String(
-				Files.readAllBytes(Paths.get(SESSION_SETTINGS)),
-				StandardCharsets.UTF_8);
-		SessionSettings settings = jackson.readValue(serialized,
-				SessionSettings.class);
+		String serialized = new String(Files.readAllBytes(Paths.get(filename)), StandardCharsets.UTF_8);
+		SessionSettings settings = jackson.readValue(serialized, SessionSettings.class);
 
-		runner = new NegoRunner(settings, new ClassPathConnectionFactory(),
-				logger);
+		runner = new NegoRunner(settings, new ClassPathConnectionFactory(), logger);
 
 	}
@@ -52,5 +62,5 @@
 	@Test
 	public void runTestMainFunction() throws IOException {
-		NegoRunner.main(new String[] { SESSION_SETTINGS });
+		NegoRunner.main(new String[] { filename });
 	}
 }
Index: /simplerunner/src/test/resources/jobs/jobs1partial.json
===================================================================
--- /simplerunner/src/test/resources/jobs/jobs1partial.json	(revision 2)
+++ /simplerunner/src/test/resources/jobs/jobs1partial.json	(revision 2)
@@ -0,0 +1,403 @@
+{
+	"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: /simplerunner/src/test/resources/settings2.json
===================================================================
--- /simplerunner/src/test/resources/settings2.json	(revision 2)
+++ /simplerunner/src/test/resources/settings2.json	(revision 2)
@@ -0,0 +1,16 @@
+{
+	"SAOPSettings": {
+		"participants": [{
+			"party": "classpath:geniusweb.exampleparties.randomparty.RandomParty",
+			"profile": "file:src/test/resources/jobs/jobs1partial.json"
+		}, {
+			"party": "classpath:geniusweb.exampleparties.randomparty.RandomParty",
+			"profile": "file:src/test/resources/jobs/jobs2.json"
+		}],
+		"deadline": {
+			"deadlinetime": {
+				"durationms": 100
+			}
+		}
+	}
+}
