Index: profile/.classpath
===================================================================
--- profile/.classpath	(revision 1)
+++ profile/.classpath	(revision 1)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
Index: profile/.project
===================================================================
--- profile/.project	(revision 1)
+++ profile/.project	(revision 1)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>profile</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
Index: profile/.settings/org.eclipse.core.resources.prefs
===================================================================
--- profile/.settings/org.eclipse.core.resources.prefs	(revision 1)
+++ profile/.settings/org.eclipse.core.resources.prefs	(revision 1)
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
Index: profile/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- profile/.settings/org.eclipse.jdt.core.prefs	(revision 1)
+++ profile/.settings/org.eclipse.jdt.core.prefs	(revision 1)
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
Index: profile/.settings/org.eclipse.m2e.core.prefs
===================================================================
--- profile/.settings/org.eclipse.m2e.core.prefs	(revision 1)
+++ profile/.settings/org.eclipse.m2e.core.prefs	(revision 1)
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
Index: profile/pom.xml
===================================================================
--- profile/pom.xml	(revision 52)
+++ profile/pom.xml	(revision 1)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>profile</artifactId>
-	<version>2.1.6</version>
+	<version>1.0.0</version>
 	<packaging>jar</packaging>
 
@@ -16,6 +16,5 @@
 		<basedir>.</basedir>
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
-		<jackson-2-version>2.12.3</jackson-2-version>
-		<geniusweb.version>${project.version}</geniusweb.version>
+		<jackson-2-version>2.9.6</jackson-2-version>
 	</properties>
 
@@ -23,5 +22,5 @@
 		<repository>
 			<id>artifactory.ewi.tudelft.nl</id>
-			<url>https://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+			<url>http://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
 		</repository>
 	</distributionManagement>
@@ -32,15 +31,10 @@
 			<groupId>geniusweb</groupId>
 			<artifactId>issuevalue</artifactId>
-			<version>${geniusweb.version}</version>
+			<version>1.0.0</version>
 		</dependency>
 		<dependency>
 			<groupId>geniusweb</groupId>
 			<artifactId>references</artifactId>
-			<version>${geniusweb.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>tudelft.utilities</groupId>
-			<artifactId>utilities</artifactId>
-			<version>1.2.1</version>
+			<version>1.0.0</version>
 		</dependency>
 
@@ -90,5 +84,5 @@
 			<groupId>tudelft.utilities</groupId>
 			<artifactId>junit</artifactId>
-			<version>1.0.5</version>
+			<version>1.0.2</version>
 			<scope>test</scope>
 		</dependency>
@@ -101,6 +95,6 @@
 		<dependency>
 			<groupId>org.mockito</groupId>
-			<artifactId>mockito-core</artifactId>
-			<version>3.11.2</version>
+			<artifactId>mockito-all</artifactId>
+			<version>1.9.5</version>
 			<scope>test</scope>
 		</dependency>
@@ -113,19 +107,16 @@
 		<repository>
 			<id>artifactory.ewi.tudelft.nl</id>
-			<url>https://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+			<url>http://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
 			<snapshots>
 				<enabled>false</enabled>
 			</snapshots>
 		</repository>
+
 	</repositories>
 
 	<pluginRepositories>
 		<pluginRepository>
-			<id>central</id>
-			<url>https://repo1.maven.org/maven2</url>
-		</pluginRepository>
-		<pluginRepository>
-			<id>artifactory.ewi.tudelft.nl</id>
-			<url>https://artifactory.ewi.tudelft.nl/artifactory/libs-release</url>
+			<id>jcenter</id>
+			<url>http://jcenter.bintray.com</url>
 		</pluginRepository>
 	</pluginRepositories>
@@ -144,22 +135,9 @@
 				</configuration>
 			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-source-plugin</artifactId>
-				<version>3.1.0</version>
-				<executions>
-					<execution>
-						<id>attach-sources</id>
-						<goals>
-							<goal>jar</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
 
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-javadoc-plugin</artifactId>
-				<version>3.2.0</version>
+				<version>2.10.1</version>
 				<executions>
 					<execution>
@@ -168,4 +146,8 @@
 							<goal>jar</goal>
 						</goals>
+						<configuration>
+							<additionalparam>${javadoc.opts}</additionalparam>
+							<additionalparam>-Xdoclint:none</additionalparam>
+						</configuration>
 					</execution>
 				</executions>
@@ -175,5 +157,5 @@
 				<groupId>org.jfrog.buildinfo</groupId>
 				<artifactId>artifactory-maven-plugin</artifactId>
-				<version>3.2.3</version>
+				<version>2.6.1</version>
 				<executions>
 					<execution>
Index: profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java
===================================================================
--- profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java	(revision 52)
+++ 	(revision )
@@ -1,169 +1,0 @@
-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           name of the profile
-	 * @param domain         the {@link Domain}
-	 * @param reservationbid the reservation bid, this is the minimum acceptable
-	 *                       bid
-	 * @param bids           a list of bids that this ordering contains
-	 *                       comparisons for
-	 * @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 that are referred to, either as better
-	 *         or as worse than another bid
-	 */
-	@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 52)
+++ 	(revision )
@@ -1,101 +1,0 @@
-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;
-		if (reservationbid != null) {
-			String message = domain.isFitting(reservationbid);
-			if (message != null)
-				throw new IllegalArgumentException(
-						"reservationbid is not fitting domain: " + message);
-		}
-
-	}
-
-	@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/FullOrdering.java
===================================================================
--- profile/src/main/java/geniusweb/profile/FullOrdering.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/FullOrdering.java	(revision 1)
@@ -11,17 +11,13 @@
 	 * @param bid1 the first item's utility/preference
 	 * @param bid2 the second item's utility/preference
-	 * @return true iff bid1 is considered better or equal (&ge;) than bid 2. In
-	 *         all other cases false is returned.
+	 * @return true iff bid1 is considered better or equal (&ge;) than bid 2. In all
+	 *         other cases false is returned.
 	 * 
 	 *         This predicate should be implemented such that
-	 *         <ul>
 	 *         <li>For all b1 and b2, either b1 &ge; b2 or b2 &ge; b1.
 	 *         <li>b &ge; b (every bid is better or equal to itself)
-	 *         <li>If b1&ge;b2 and b2&ge;b1 then the two bids are considered
-	 *         equally good. Note that this differes from a partial order in
-	 *         mathematics.
-	 *         <li>it behaves transitive: if b1&ge;b2 and b2&ge;b3 then
-	 *         b1&ge;b3.
-	 *         </ul>
+	 *         <li>If b1&ge;b2 and b2&ge;b1 then the two bids are considered equally
+	 *         good. Note that this differes from a partial order in mathematics.
+	 *         <li>it behaves transitive: if b1&ge;b2 and b2&ge;b3 then b1&ge;b3.
 	 */
 	@Override
Index: profile/src/main/java/geniusweb/profile/PartialOrdering.java
===================================================================
--- profile/src/main/java/geniusweb/profile/PartialOrdering.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/PartialOrdering.java	(revision 1)
@@ -13,17 +13,13 @@
 	 * @param bid1 the first item's utility/preference
 	 * @param bid2 the second item's utility/preference
-	 * @return true iff bid1 is considered better or equal (&ge;) than bid 2. In
-	 *         all other cases false is returned. A bid may not have a &ge;
-	 *         relation at all.
+	 * @return true iff bid1 is considered better or equal (&ge;) than bid 2. In all
+	 *         other cases false is returned. A bid may not have a &ge; relation at
+	 *         all.
 	 * 
 	 *         This predicate should be implemented such that
-	 *         <ul>
 	 *         <li>b &ge; b (every bid is better or equal to itself)
-	 *         <li>If b1&ge;b2 and b2&ge;b1 then the two bids are considered
-	 *         equally good. Note that this differes from a partial order in
-	 *         mathematics.
-	 *         <li>it behaves transitive: if b1&ge;b2 and b2&ge;b3 then
-	 *         b1&ge;b3.
-	 *         </ul>
+	 *         <li>If b1&ge;b2 and b2&ge;b1 then the two bids are considered equally
+	 *         good. Note that this differes from a partial order in mathematics.
+	 *         <li>it behaves transitive: if b1&ge;b2 and b2&ge;b3 then b1&ge;b3.
 	 */
 	boolean isPreferredOrEqual(Bid bid1, Bid bid2);
Index: profile/src/main/java/geniusweb/profile/Profile.java
===================================================================
--- profile/src/main/java/geniusweb/profile/Profile.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/Profile.java	(revision 1)
@@ -7,5 +7,4 @@
 import geniusweb.issuevalue.Domain;
 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
-import geniusweb.profile.utilityspace.SumOfGroupsUtilitySpace;
 
 /**
@@ -17,7 +16,5 @@
  */
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
-@JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class),
-		@JsonSubTypes.Type(value = DefaultPartialOrdering.class),
-		@JsonSubTypes.Type(value = SumOfGroupsUtilitySpace.class) })
+@JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class) })
 public interface Profile {
 
@@ -36,10 +33,10 @@
 	 * 
 	 * @return a (hypothetical) bid that is the best alternative to a
-	 *         non-agreement. Only bids that are equal or better 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.
-	 *         This bid can be partial.
+	 *         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/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java	(revision 1)
@@ -2,5 +2,4 @@
 
 import java.math.BigDecimal;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -15,13 +14,14 @@
 import geniusweb.issuevalue.ValueSet;
 
+import com.fasterxml.jackson.annotation.JsonTypeName;
+
 /**
  * Links a set of values to utilities for that value. Does not link to some
  * issue so may need further checking when used for an actual issue. Constructor
  * guarantees that
- * <ul>
  * <li>All values in the provided map (the utilities) are in [0,1]
  * <li>All keys are proper {@link DiscreteValue}s
- * </ul>
  */
+@JsonTypeName("discreteutils")
 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
 public class DiscreteValueSetUtilities implements ValueSetUtilities {
@@ -37,23 +37,19 @@
 	 * create new object based on the given mapping from values to utilities.
 	 * 
-	 * @param valueUtils map with key {@link DiscreteValue}s and value a Double
-	 *                   in the range [0,1].
+	 * @param valueUtils map with key {@link DiscreteValue}s and value a Double in
+	 *                   the range [0,1].
 	 * @throws NullPointerException     if one of the args is null
 	 * @throws IllegalArgumentException if values are not in range [0,1].
 	 */
-	public DiscreteValueSetUtilities(
-			Map<DiscreteValue, BigDecimal> valueUtils) {
+	public DiscreteValueSetUtilities(Map<DiscreteValue, BigDecimal> valueUtils) {
 		if (valueUtils == null) {
 			throw new NullPointerException("valueUtils==null");
 		}
 		if (valueUtils.keySet().contains(null)) {
-			throw new NullPointerException(
-					"one of the keys in valueUtils is null");
+			throw new NullPointerException("one of the keys in valueUtils is null");
 		}
 		if (valueUtils.values().stream()
-				.anyMatch(v -> v == null || v.compareTo(BigDecimal.ZERO) < 0
-						|| v.compareTo(BigDecimal.ONE) > 0)) {
-			throw new IllegalArgumentException(
-					"Weights in valueUtils must all be in [0,1]");
+				.anyMatch(v -> v == null || v.compareTo(BigDecimal.ZERO) < 0 || v.compareTo(BigDecimal.ONE) > 0)) {
+			throw new IllegalArgumentException("Weights in valueUtils must all be in [0,1]");
 		}
 		this.valueUtilities.putAll(valueUtils);
@@ -69,22 +65,12 @@
 	}
 
-	/**
-	 * @return copy of the value-utility pair map.
-	 */
-	public Map<DiscreteValue, BigDecimal> getUtilities() {
-		return Collections.unmodifiableMap(valueUtilities);
-	}
-
 	@Override
 	public String isFitting(ValueSet valueset) {
 		if (!(valueset instanceof DiscreteValueSet)) {
-			return "The utilities are for a discrete valueset but the given values are "
-					+ valueset;
+			return "The utilities are for a discrete valueset but the given values are " + valueset;
 		}
 		DiscreteValueSet discvalueset = (DiscreteValueSet) valueset;
-		if (!valueUtilities.keySet()
-				.equals(new HashSet<>(discvalueset.getValues())))
-			return "The values in the set " + valueset
-					+ " do not match the values mapped to utilities "
+		if (!valueUtilities.keySet().equals(new HashSet<>(discvalueset.getValues())))
+			return "The values in the set " + valueset + " do not match the values mapped to utilities "
 					+ valueUtilities.keySet();
 		return null;
@@ -93,5 +79,5 @@
 	@Override
 	public String toString() {
-		return "DiscreteValueSetUtilities" + valueUtilities;
+		return "ValueSetUtilities" + valueUtilities;
 	}
 
@@ -100,6 +86,5 @@
 		final int prime = 31;
 		int result = 1;
-		result = prime * result
-				+ ((valueUtilities == null) ? 0 : valueUtilities.hashCode());
+		result = prime * result + ((valueUtilities == null) ? 0 : valueUtilities.hashCode());
 		return result;
 	}
Index: profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditive.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditive.java	(revision 52)
+++ 	(revision )
@@ -1,30 +1,0 @@
-
-package geniusweb.profile.utilityspace;
-
-import java.math.BigDecimal;
-import java.util.Map;
-
-/**
- * interface to a Utilityspace that is linear-additive.
- *
- */
-public interface LinearAdditive extends UtilitySpace {
-	/**
-	 * @return the map from issue names to valuesetutilities (un-weighted)
-	 */
-	Map<String, ValueSetUtilities> getUtilities();
-
-	/**
-	 * 
-	 * @return the map from issue names to weights. weights sum to 1.
-	 */
-	Map<String, BigDecimal> getWeights();
-
-	/**
-	 * 
-	 * @param issue the issue name
-	 * @return the weight of the given issue
-	 */
-	BigDecimal getWeight(String issue);
-
-}
Index: profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditiveUtilitySpace.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditiveUtilitySpace.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditiveUtilitySpace.java	(revision 1)
@@ -8,10 +8,11 @@
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
 import geniusweb.issuevalue.Bid;
 import geniusweb.issuevalue.Domain;
 import geniusweb.issuevalue.Value;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 /**
@@ -20,12 +21,10 @@
  * 
  * Constructor guarantees that
- * <ul>
  * <li>weights are normalized to 1
  * <li>the issues in the utility map and weights map match those in the domain
  * <li>The utilities for each issue are proper {@link ValueSetUtilities} objects
- * </ul>
  */
 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
-public class LinearAdditiveUtilitySpace implements LinearAdditive {
+public class LinearAdditiveUtilitySpace implements UtilitySpace {
 
 	private final String name;
@@ -69,10 +68,4 @@
 			@JsonProperty("issueWeights") Map<String, BigDecimal> weights,
 			@JsonProperty("reservationBid") Bid resBid) {
-		this.domain = domain;
-		this.name = name;
-		this.reservationBid = resBid;
-		this.issueUtilities.putAll(utils);
-		this.issueWeights.putAll(weights);
-
 		if (domain == null) {
 			throw new NullPointerException("domain=null");
@@ -86,6 +79,5 @@
 		if (utils.values().contains(null)) {
 			throw new NullPointerException(
-					"One of the ValueSetUtilities in issueUtilitiesis null:"
-							+ utils);
+					"One of the ValueSetUtilities is null");
 		}
 		if (weights.values().contains(null)) {
@@ -125,10 +117,9 @@
 					+ weights.values() + ") must be 1");
 		}
-		if (resBid != null) {
-			String message = domain.isFitting(resBid);
-			if (message != null)
-				throw new IllegalArgumentException(
-						"reservationbid is not fitting domain: " + message);
-		}
+		this.domain = domain;
+		this.name = name;
+		this.reservationBid = resBid;
+		issueUtilities.putAll(utils);
+		issueWeights.putAll(weights);
 	}
 
@@ -140,5 +131,16 @@
 	}
 
-	@Override
+	/**
+	 * 
+	 * @param issue the issue to get weighted util for
+	 * @param value the issue value to use (typically coming from a bid)
+	 * @return weighted util of just the issue value:
+	 *         issueUtilities[issue].utility(value) * issueWeights[issue)
+	 */
+	private BigDecimal util(String issue, Value value) {
+		return issueWeights.get(issue)
+				.multiply(issueUtilities.get(issue).getUtility(value));
+	}
+
 	public BigDecimal getWeight(String issue) {
 		return issueWeights.get(issue);
@@ -218,25 +220,18 @@
 	}
 
-	@Override
+	/**
+	 * @return the map from issue names to valuesetutilities
+	 */
 	public Map<String, ValueSetUtilities> getUtilities() {
 		return Collections.unmodifiableMap(issueUtilities);
 	}
 
-	@Override
+	/**
+	 * 
+	 * @return the map from issue names to weights. weights sum to 1.
+	 */
 	public Map<String, BigDecimal> getWeights() {
 		return Collections.unmodifiableMap(issueWeights);
 	}
 
-	/**
-	 * 
-	 * @param issue the issue to get weighted util for
-	 * @param value the issue value to use (typically coming from a bid)
-	 * @return weighted util of just the issue value:
-	 *         issueUtilities[issue].utility(value) * issueWeights[issue)
-	 */
-	private BigDecimal util(String issue, Value value) {
-		return issueWeights.get(issue)
-				.multiply(issueUtilities.get(issue).getUtility(value));
-	}
-
 }
Index: profile/src/main/java/geniusweb/profile/utilityspace/NumberValueSetUtilities.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/NumberValueSetUtilities.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/utilityspace/NumberValueSetUtilities.java	(revision 1)
@@ -6,6 +6,4 @@
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
 import geniusweb.issuevalue.NumberValue;
@@ -13,4 +11,9 @@
 import geniusweb.issuevalue.Value;
 import geniusweb.issuevalue.ValueSet;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+
 import tudelft.utilities.immutablelist.Range;
 
@@ -20,4 +23,5 @@
  *
  */
+@JsonTypeName("numberutils")
 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
 public class NumberValueSetUtilities implements ValueSetUtilities {
@@ -38,5 +42,5 @@
 	 * @param lowUtility  the utility of the {@link #lowValue}
 	 * @param highValue   the high value of the {@link Range}. Must be
-	 *                    &gt;lowValue.
+	 *                    >lowValue.
 	 * @param highUtility the utility of the {@link #highValue}
 	 */
@@ -49,6 +53,5 @@
 		if (lowValue == null || highValue == null || lowUtility == null
 				|| highUtility == null) {
-			throw new NullPointerException(
-					"arguments lowValue, lowUtility, highValue and highUtility must be non-null");
+			throw new NullPointerException("arguments must be non-null");
 		}
 		if (!isInZeroOne(lowUtility)) {
@@ -97,6 +100,6 @@
 		}
 		if (numvalset.getRange().getHigh().compareTo(highValue) != 0) {
-			return "the utilities are specified up to " + highValue
-					+ " but the valueset ends at "
+			return "the utilities are specified down to " + highValue
+					+ " but the valueset starts at "
 					+ numvalset.getRange().getHigh();
 		}
@@ -105,38 +108,7 @@
 	}
 
-	/**
-	 * @return the lowest value
-	 */
-	public BigDecimal getLowValue() {
-		return lowValue;
-	}
-
-	/**
-	 * 
-	 * @return the highest value
-	 */
-	public BigDecimal getHighValue() {
-		return highValue;
-	}
-
-	/**
-	 * 
-	 * @return the utility of the lowest value
-	 */
-	public BigDecimal getLowUtility() {
-		return lowUtility;
-	}
-
-	/**
-	 * 
-	 * @return the utility of the highest value
-	 */
-	public BigDecimal getHighUtility() {
-		return highUtility;
-	}
-
 	@Override
 	public String toString() {
-		return "NumberValueSetUtilities(" + lowValue + "->" + lowUtility + ","
+		return "NumberValUtility(" + lowValue + "->" + lowUtility + ","
 				+ highValue + "->" + highUtility + ")";
 	}
Index: profile/src/main/java/geniusweb/profile/utilityspace/PartsUtilities.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/PartsUtilities.java	(revision 52)
+++ 	(revision )
@@ -1,241 +1,0 @@
-package geniusweb.profile.utilityspace;
-
-import java.math.BigDecimal;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import geniusweb.issuevalue.Value;
-import geniusweb.issuevalue.ValueSet;
-
-/**
- * Contains utilities of a ProductOfValue of a {@link SumOfGroupsUtilitySpace}.
- * So this is similar to a {@link DiscreteValueSetUtilities} but instead of
- * issues this contains an (ordered) list of issues. This object serializes to
- * something like <code> 
- * {"partsutils":
- * {"issues":["issue1","issue2"],
- * "utilslist":[{"values":["low","low"],"util":0.3},{"values":["high","high"],"util":0.9}]}}
- </code> The issues field contains a list of N issues in the domain, The
- * utilslist contains a list of dictionaries, with "values" containing a list of
- * N issue values, in the same order as the issues list and with "util"
- * containng the utility value of that set of values.
- */
-@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
-public class PartsUtilities implements ValueSetUtilities {
-	private final List<String> issues;
-	// the real but not-serializable values (because Map can only have String
-	// keys in jackson)
-	private transient final Map<ProductOfValue, BigDecimal> utilities = new HashMap<>();
-	// copy only for serializing
-	private final List<PartUtil> utilslist = new LinkedList<>();
-
-	/**
-	 * 
-	 * @param issues list of issues
-	 * @param utils  with keys: list of values and value: utility value for that
-	 *               list of values. All list-of-values missing from the map are
-	 *               assumed to have utility 0. This includes partial bids where
-	 *               list-of-values contain null objects.
-	 */
-	public PartsUtilities(List<String> issues,
-			Map<ProductOfValue, BigDecimal> utils) {
-		if (issues == null || utils == null) {
-			throw new IllegalArgumentException(
-					"issues and utils must be not null");
-		}
-
-		this.issues = issues;
-		this.utilities.putAll(utils);
-
-		checkUtilities();
-		for (ProductOfValue pval : utils.keySet()) {
-			utilslist.add(new PartUtil(pval.getValues(), utils.get(pval)));
-		}
-	}
-
-	@JsonCreator
-	public PartsUtilities(@JsonProperty("issues") List<String> issues,
-			@JsonProperty("utilslist") List<PartUtil> utilslist) {
-		this(issues, list2map(utilslist));
-	}
-
-	/**
-	 * 
-	 * @param pval the {@link ProductOfValue} value
-	 * @return the utility of the value, in the same order as
-	 *         {@link #getIssues()}. Returns 0 if there is no utility set for
-	 *         the given combination of values. Notice, partial bids will
-	 *         usually have utility 0.
-	 * 
-	 */
-	@Override
-	public BigDecimal getUtility(Value pval) {
-		BigDecimal val = utilities.get(pval);
-		if (val == null)
-			return BigDecimal.ZERO;
-		return val;
-	}
-
-	@Override
-	public String isFitting(ValueSet valueset) {
-		return null; // what can we tests here?
-	}
-
-	/**
-	 * @return the issues that are contained here.
-	 */
-	public List<String> getIssues() {
-		return issues;
-	}
-
-	/**
-	 * 
-	 * @return map with all available values and their utilities. The map and
-	 *         its contents should all be immutable.
-	 */
-	public Map<ProductOfValue, BigDecimal> getUtilities() {
-		return Collections.unmodifiableMap(utilities);
-	}
-
-	/**
-	 * 
-	 * @param other another {@link PartsUtilities} map. The issues in the other
-	 *              map must be different from {@link #issues}.
-	 * @return new PartsUtils, with the powermap of all combinations of one
-	 *         element from this and one from the other map, and with the
-	 *         utilities computed as the sum of thisvalue + othervalue.
-	 */
-	public PartsUtilities add(PartsUtilities other) {
-		for (String issue : issues) {
-			if (other.issues.contains(issue)) {
-				throw new IllegalArgumentException(
-						"Issue " + issue + " exists already");
-			}
-		}
-
-		List<String> combinedissues = new LinkedList<String>(issues);
-		combinedissues.addAll(other.issues);
-
-		Map<ProductOfValue, BigDecimal> combinedvalues = new HashMap<>();
-		for (ProductOfValue productOfValue : this.utilities.keySet()) {
-			for (ProductOfValue otherProductOfValue : other.utilities
-					.keySet()) {
-				BigDecimal combinedutil = getUtility(productOfValue)
-						.add(other.getUtility(otherProductOfValue));
-				combinedvalues.put(productOfValue.merge(otherProductOfValue),
-						combinedutil);
-			}
-		}
-		return new PartsUtilities(combinedissues, combinedvalues);
-
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((issues == null) ? 0 : issues.hashCode());
-		result = prime * result
-				+ ((utilities == null) ? 0 : utilities.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;
-		PartsUtilities other = (PartsUtilities) obj;
-		if (issues == null) {
-			if (other.issues != null)
-				return false;
-		} else if (!issues.equals(other.issues))
-			return false;
-		if (utilities == null) {
-			if (other.utilities != null)
-				return false;
-		} else if (!utilities.equals(other.utilities))
-			return false;
-		return true;
-	}
-
-	@Override
-	public String toString() {
-		return "PartsUtilities[" + issues + "," + utilities + "]";
-	}
-
-	private void checkUtilities() {
-		if (utilities.values().stream()
-				.anyMatch(v -> v == null || v.compareTo(BigDecimal.ZERO) < 0
-						|| v.compareTo(BigDecimal.ONE) > 0)) {
-			throw new IllegalArgumentException(
-					"part weights must all be in [0,1]");
-		}
-	}
-
-	private static Map<ProductOfValue, BigDecimal> list2map(
-			List<PartUtil> list) {
-		Map<ProductOfValue, BigDecimal> map = new HashMap<>();
-		for (PartUtil partutil : list) {
-			map.put(new ProductOfValue(partutil.getValues()),
-					partutil.getUtil());
-		}
-		return map;
-	}
-
-	/**
-	 * 
-	 * @return the max utility of all values contained here.
-	 */
-	public BigDecimal getMaxUtility() {
-		BigDecimal maxutil = BigDecimal.ZERO;
-		for (ProductOfValue vakye : utilities.keySet()) {
-			if (utilities.get(vakye).compareTo(maxutil) > 0) {
-				maxutil = utilities.get(vakye);
-			}
-
-		}
-		return maxutil;
-	}
-
-}
-
-/**
- * contains list of values, and the utility for this combi of values. The values
- * make only sense with a corresponding list of issues, but that is managed in
- * (see {@link PartsUtilities}.
- * <p>
- * immutable.
- */
-@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
-class PartUtil {
-	private final List<Value> values;
-
-	private final BigDecimal util;
-
-	@JsonCreator
-	public PartUtil(@JsonProperty("values") List<Value> values,
-			@JsonProperty("util") BigDecimal util) {
-		this.values = values;
-		this.util = util;
-	}
-
-	public List<Value> getValues() {
-		return values;
-	}
-
-	public BigDecimal getUtil() {
-		return util;
-	}
-}
Index: profile/src/main/java/geniusweb/profile/utilityspace/ProductOfValue.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/ProductOfValue.java	(revision 52)
+++ 	(revision )
@@ -1,80 +1,0 @@
-package geniusweb.profile.utilityspace;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonValue;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-
-import geniusweb.issuevalue.Value;
-
-/**
- * A {@link Value} that is the product of some existing values
- */
-@JsonDeserialize(using = JsonDeserializer.None.class)
-public class ProductOfValue implements Value {
-	private final List<Value> values = new ArrayList<Value>();
-
-	/**
-	 * @param newvals the values to make a product of
-	 */
-	@JsonCreator
-	public ProductOfValue(List<Value> newvals) {
-		values.addAll(newvals);
-	}
-
-	@JsonValue
-	public List<Value> getValues() {
-		return values;
-	}
-
-	@Override
-	public String toString() {
-		return values.toString();
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((values == null) ? 0 : values.hashCode());
-		return result;
-	}
-
-	/**
-	 * 
-	 * @param other a {@link ProductOfValue} with more issues to be merged into
-	 *              this.
-	 * @return new ProductOfValue that contains this and other values.
-	 */
-	public ProductOfValue merge(ProductOfValue other) {
-		List<Value> newvalues = new ArrayList<Value>(values);
-		newvalues.addAll(other.getValues());
-		return new ProductOfValue(newvalues);
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		ProductOfValue other = (ProductOfValue) obj;
-		if (values == null) {
-			if (other.values != null)
-				return false;
-		} else if (!values.equals(other.values))
-			return false;
-		return true;
-	}
-
-	@Override
-	public Object getValue() {
-		return getValues();
-	}
-
-}
Index: profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java	(revision 52)
+++ 	(revision )
@@ -1,275 +1,0 @@
-package geniusweb.profile.utilityspace;
-
-import java.math.BigDecimal;
-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.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import geniusweb.issuevalue.Bid;
-import geniusweb.issuevalue.Domain;
-import geniusweb.issuevalue.NumberValueSet;
-import geniusweb.issuevalue.Value;
-import geniusweb.profile.DefaultProfile;
-
-/**
- * This is a utility space that defines the utility of bids as a sum of the
- * utilities of a number of subsets, or groups, of the issue values.
- * <p>
- * A group defines the utility of a non-empty subset of the issues in the
- * domain. The parts are non-overlapping. Missing issue values have utility 0.
- * <p>
- * This space enables handling {@link UtilitySpace}s that are not simply linear
- * additive, but with interacting issue values. For example, if you would like
- * to have a car with good speakers but only if there is also a good hifi set,
- * you can make a part that has {@link PartsUtilities} like
- * <code> { { speakers:yes, hifi:yes }:1, {speakers, no: hifh:yes}:0.2, ...} </code>
- * <p>
- * NOTICE this space is completely discrete. There is no equivalent of the
- * {@link NumberValueSet} here.
- */
-@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
-public class SumOfGroupsUtilitySpace extends DefaultProfile
-		implements UtilitySpace {
-	/**
-	 * the key is the part name, the value is the valuesetutilities for this
-	 * issue. Should be immutable so do not return direct access to this field.
-	 */
-	private final HashMap<String, PartsUtilities> partUtilities = new HashMap<>();
-
-	/**
-	 * @param domain    the {@link Domain} in which this profile is defined.
-	 * @param name      the name of this profile. Must be simple name (a-Z, 0-9)
-	 * @param partutils a map with key: part names (String) and value: the
-	 *                  {@link PartsUtilities} for that part. There MUST NOT be
-	 *                  a null part name. All values MUST NOT be null. The
-	 *                  PartsUtilities must match the
-	 * @param resBid    the reservation bid. Only bids that are
-	 *                  {@link #isPreferredOrEqual(Bid, Bid)} should be
-	 *                  accepted. Can be null, meaning that there is no
-	 *                  reservation bid and any agreement is better than no
-	 *                  agreement.
-	 * @throws NullPointerException     if values are incorrectly null.
-	 * @throws IllegalArgumentException if preconditions not met.
-	 */
-	@JsonCreator
-	public SumOfGroupsUtilitySpace(@JsonProperty("domain") Domain domain,
-			@JsonProperty("name") String name,
-			@JsonProperty("partUtilities") HashMap<String, PartsUtilities> partutils,
-			@JsonProperty("reservationBid") Bid resBid) {
-		super(name, domain, resBid);
-		this.partUtilities.putAll(partutils);
-
-		String err = checkParts();
-		if (err != null) {
-			throw new IllegalArgumentException(err);
-		}
-	}
-
-	/**
-	 * Copy settings in las. This will have the exact same utilities as the las
-	 * but this then gives you the power to change it into a non-linear space by
-	 * grouping.
-	 * 
-	 * @param las the {@link LinearAdditive} to be converted/copied.
-	 * 
-	 */
-	public SumOfGroupsUtilitySpace(LinearAdditive las) {
-		this(las.getDomain(), las.getName(), las2parts(las),
-				las.getReservationBid());
-	}
-
-	@Override
-	public BigDecimal getUtility(Bid bid) {
-		return partUtilities.keySet().stream()
-				.map(partname -> util(partname, bid))
-				.reduce(BigDecimal.ZERO, BigDecimal::add);
-	}
-
-	@Override
-	public String toString() {
-		return "PartialAdditive[" + partUtilities + "," + getReservationBid()
-				+ "]";
-	}
-
-	/**
-	 * 
-	 * @param partnames   the partnames to remove from this. There must be at
-	 *                    least 2 parts
-	 * @param newpartname the name of the new part that contains all partnames,
-	 *                    grouped into 1 "issue". This name must not be an issue
-	 *                    in this.
-	 * @return new {@link SumOfGroupsUtilitySpace} that takes all partnames out
-	 *         of this, and makes a newaprtname that contains these.
-	 */
-	public SumOfGroupsUtilitySpace group(List<String> partnames,
-			String newpartname) {
-		final Set<String> allpartnames = partUtilities.keySet();
-
-		if (partnames.size() < 2) {
-			throw new IllegalArgumentException(
-					"Group must contain at least 2 parts");
-		}
-		if (allpartnames.contains(newpartname)) {
-			throw new IllegalArgumentException(
-					"newpartname " + newpartname + " is already in use");
-		}
-		for (String name : partnames) {
-			if (!allpartnames.contains(name)) {
-				throw new IllegalArgumentException("Unknown part name " + name);
-			}
-		}
-
-		HashMap<String, PartsUtilities> newutils = new HashMap<String, PartsUtilities>();
-
-		PartsUtilities newpartutils = null;
-
-		for (String name : partUtilities.keySet()) {
-			if (partnames.contains(name)) {
-				if (newpartutils == null) {
-					newpartutils = partUtilities.get(name);
-				} else {
-					newpartutils = newpartutils.add(partUtilities.get(name));
-				}
-			} else {
-				newutils.put(name, partUtilities.get(name));
-			}
-		}
-		newutils.put(newpartname, newpartutils);
-
-		return new SumOfGroupsUtilitySpace(getDomain(), getName(), newutils,
-				getReservationBid());
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = super.hashCode();
-		result = prime * result
-				+ ((partUtilities == null) ? 0 : partUtilities.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;
-		SumOfGroupsUtilitySpace other = (SumOfGroupsUtilitySpace) obj;
-		if (partUtilities == null) {
-			if (other.partUtilities != null)
-				return false;
-		} else if (!partUtilities.equals(other.partUtilities))
-			return false;
-		return true;
-	}
-
-	/***************************** private funcs ***************************/
-	/**
-	 * 
-	 * @param partname the name of the part to get the utility of
-	 * @param bid      the bid
-	 * @return weighted util of just the part: utilities[part].getUtility(part
-	 *         of bid)
-	 */
-	private BigDecimal util(String partname, Bid bid) {
-		PartsUtilities partutils = partUtilities.get(partname);
-		ProductOfValue value = collectValues(bid, partutils);
-		return partutils.getUtility(value);
-	}
-
-	/**
-	 * 
-	 * @param bid       a full bid
-	 * @param partutils the part utils for which a list of values from the bid
-	 *                  is needed
-	 * @return a list of values from the given bid, ordered as indicated in
-	 *         partutils
-	 */
-	private ProductOfValue collectValues(Bid bid, PartsUtilities partutils) {
-		List<Value> values = new LinkedList<>();
-		for (String issue : partutils.getIssues()) {
-			values.add(bid.getValue(issue));
-		}
-		return new ProductOfValue(values);
-	}
-
-	/**
-	 * 
-	 * @param las a {@link LinearAdditive}
-	 * @return a Map with partname-PartsUtilities. The partnames are identical
-	 *         to the issues in the given las.
-	 */
-	private static HashMap<String, PartsUtilities> las2parts(
-			LinearAdditive las) {
-
-		HashMap<String, PartsUtilities> map = new HashMap<>();
-		for (String issue : las.getUtilities().keySet()) {
-			ValueSetUtilities valset = las.getUtilities().get(issue);
-			Map<ProductOfValue, BigDecimal> utilslist = new HashMap<>();
-			BigDecimal weight = las.getWeight(issue);
-			for (Value val : las.getDomain().getValues(issue)) {
-				BigDecimal util = valset.getUtility(val).multiply(weight);
-				if (BigDecimal.ZERO.compareTo(util) != 0) {
-					utilslist.put(new ProductOfValue(Arrays.asList(val)), util);
-				}
-			}
-			map.put(issue, new PartsUtilities(Arrays.asList(issue), utilslist));
-		}
-		return map;
-	}
-
-	/**
-	 * 
-	 * @return error string, or null if no error (all parts seem fine)
-	 */
-	private String checkParts() {
-
-		Set<String> collectedIssues = new HashSet<>();
-		for (String partname : partUtilities.keySet()) {
-			PartsUtilities part = partUtilities.get(partname);
-			if (part == null) {
-				return "partUtilities " + partname + " contains null value";
-			}
-			List<String> issues = part.getIssues();
-			HashSet<String> intersection = new HashSet<String>(collectedIssues);
-			intersection.retainAll(issues);
-			if (!intersection.isEmpty()) {
-				return "issues " + intersection + " occur multiple times";
-			}
-			collectedIssues.addAll(issues);
-		}
-
-		if (!collectedIssues.equals(getDomain().getIssues())) {
-			return "parts must cover the domain issues "
-					+ getDomain().getIssues() + " but cover " + collectedIssues;
-		}
-		if (getMaxUtility().compareTo(BigDecimal.ONE) > 0) {
-			return "Max utility of the space exceedds 1";
-		}
-		return null;
-
-	}
-
-	/**
-	 * 
-	 * @return the max possible utility in this utility space.
-	 */
-	private BigDecimal getMaxUtility() {
-		return partUtilities.values().stream()
-				.map(partutils -> partutils.getMaxUtility())
-				.reduce(BigDecimal.ZERO, BigDecimal::add);
-	}
-
-}
Index: profile/src/main/java/geniusweb/profile/utilityspace/ValueSetUtilities.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/ValueSetUtilities.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/utilityspace/ValueSetUtilities.java	(revision 1)
@@ -5,8 +5,9 @@
 import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
 
 import geniusweb.issuevalue.Value;
 import geniusweb.issuevalue.ValueSet;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
 
 /**
@@ -15,12 +16,11 @@
  */
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
-@JsonSubTypes({ @Type(value = DiscreteValueSetUtilities.class),
-		@Type(value = NumberValueSetUtilities.class) })
+@JsonSubTypes({ @Type(value = DiscreteValueSetUtilities.class), @Type(value = NumberValueSetUtilities.class) })
 public interface ValueSetUtilities {
 	/**
 	 * 
-	 * @param value the {@link Value} to get the utility for
-	 * @return the utility of the given value. MUST be in [0,1]. Should return 0
-	 *         if the value is unknown.
+	 * @param value
+	 * @return the utility of the given value. MUST be in [0,1]. Should return 0 if
+	 *         the value is unknown.
 	 */
 	BigDecimal getUtility(Value value);
@@ -28,8 +28,8 @@
 	/**
 	 * 
-	 * @param valueset the valueset that is supposed match with this
+	 * @param values the valueset that
 	 * @return null if the ValueSetUtilities fits the given set of values , that
-	 *         means it can give utilities for all possible values in valueset.
-	 *         Or a string containing an explanation why not.
+	 *         means it can give utilities for all possible values in valueset. Or a
+	 *         string containing an explanation why not.
 	 */
 	String isFitting(ValueSet valueset);
Index: profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java	(revision 52)
+++ 	(revision )
@@ -1,105 +1,0 @@
-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: profile/src/test/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilitiesTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilitiesTest.java	(revision 52)
+++ profile/src/test/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilitiesTest.java	(revision 1)
@@ -1,9 +1,4 @@
 package geniusweb.profile.utilityspace;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.Arrays;
@@ -14,22 +9,13 @@
 import org.junit.Test;
 
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import geniusweb.issuevalue.DiscreteValue;
-import geniusweb.issuevalue.DiscreteValueSet;
-import geniusweb.issuevalue.NumberValue;
-import geniusweb.issuevalue.NumberValueSet;
-import geniusweb.issuevalue.ValueSet;
+import geniusweb.profile.utilityspace.DiscreteValueSetUtilities;
 import tudelft.utilities.junit.GeneralTests;
 
-public class DiscreteValueSetUtilitiesTest
-		extends GeneralTests<DiscreteValueSetUtilities> {
+public class DiscreteValueSetUtilitiesTest extends GeneralTests<DiscreteValueSetUtilities> {
 
 	private final static DiscreteValue vala = new DiscreteValue("a");
 	private final static DiscreteValue vala1 = new DiscreteValue("a");
 	private final static DiscreteValue valb = new DiscreteValue("b");
-	private final static NumberValue valn = new NumberValue("99");
 
 	private final static BigDecimal util = new BigDecimal("0.14");
@@ -37,10 +23,5 @@
 	private final static BigDecimal utilb = new BigDecimal("0.37");
 
-	private final static BigDecimal badutil = new BigDecimal("1.37");
-	private final static BigDecimal badutil2 = new BigDecimal("-0.37");
-
-	private final static DiscreteValueSetUtilities utils, utils1, utilsb,
-			utils1b, utilsc1, utilsc2;
-	private static final ObjectMapper jackson = new ObjectMapper();
+	private final static DiscreteValueSetUtilities utils, utils1, utilsb, utils1b, utilsc1, utilsc2;
 
 	static {
@@ -75,6 +56,5 @@
 	@Override
 	public List<List<DiscreteValueSetUtilities>> getGeneralTestData() {
-		return Arrays.asList(Arrays.asList(utils, utils1),
-				Arrays.asList(utilsb), Arrays.asList(utils1b),
+		return Arrays.asList(Arrays.asList(utils, utils1), Arrays.asList(utilsb), Arrays.asList(utils1b),
 				Arrays.asList(utilsc1, utilsc2));
 	}
@@ -82,11 +62,8 @@
 	@Override
 	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("DiscreteValueSetUtilities\\{\"a\"=0.14\\}",
-				"DiscreteValueSetUtilities\\{\"b\"=0.37\\}",
-				"DiscreteValueSetUtilities\\{\"a\"=0.37\\}",
-				"DiscreteValueSetUtilities\\{\"a\"=0.14, \"b\"=0.37\\}");
+		return Arrays.asList("ValueSetUtilities\\{\"a\"=0.14\\}", "ValueSetUtilities\\{\"b\"=0.37\\}",
+				"ValueSetUtilities\\{\"a\"=0.37\\}", "ValueSetUtilities\\{\"a\"=0.14, \"b\"=0.37\\}");
 	}
 
-	@SuppressWarnings("unused")
 	@Test
 	public void smokeTest() {
@@ -95,129 +72,3 @@
 	}
 
-	@SuppressWarnings("unused")
-	@Test(expected = IllegalArgumentException.class)
-	public void testTooLargeUtility() {
-		Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
-		valueUtils.put(vala, util);
-		valueUtils.put(valb, badutil);
-		new DiscreteValueSetUtilities(valueUtils);
-	}
-
-	@SuppressWarnings("unused")
-	@Test(expected = IllegalArgumentException.class)
-	public void testNegativeUtility() {
-		Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
-		valueUtils.put(vala, util);
-		valueUtils.put(valb, badutil2);
-		new DiscreteValueSetUtilities(valueUtils);
-	}
-
-	@SuppressWarnings("unused")
-	@Test(expected = IllegalArgumentException.class)
-	public void testNullUtility() {
-		Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
-		valueUtils.put(vala, null);
-		valueUtils.put(valb, util);
-		new DiscreteValueSetUtilities(valueUtils);
-	}
-
-	@SuppressWarnings("unused")
-	@Test(expected = NullPointerException.class)
-	public void testNullValueUtils() {
-		new DiscreteValueSetUtilities(null);
-
-	}
-
-	@SuppressWarnings("unused")
-	@Test(expected = NullPointerException.class)
-	public void testNullIssue() {
-		Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
-		valueUtils.put(vala, util);
-		valueUtils.put(null, utilb);
-		new DiscreteValueSetUtilities(valueUtils);
-	}
-
-	@Test
-	public void testGetUtility() {
-		Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
-		valueUtils.put(vala, util);
-		valueUtils.put(valb, utilb);
-		DiscreteValueSetUtilities utilset = new DiscreteValueSetUtilities(
-				valueUtils);
-		assertEquals(util, utilset.getUtility(vala));
-		assertEquals(utilb, utilset.getUtility(valb));
-		assertEquals(BigDecimal.ZERO,
-				utilset.getUtility(new DiscreteValue("unknownIssue")));
-
-	}
-
-	@Test
-	public void testIsFitting() {
-		ValueSet valueset = new DiscreteValueSet(Arrays.asList(vala, valb));
-
-		Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
-		valueUtils.put(vala, util);
-		DiscreteValueSetUtilities utilset = new DiscreteValueSetUtilities(
-				valueUtils);
-
-		assertEquals(
-				"The values in the set DiscreteValueSet[\"a\", \"b\"] do not match the values mapped to utilities [\"a\"]",
-				utilset.isFitting(valueset));
-
-		valueUtils.put(valb, utilb);
-		utilset = new DiscreteValueSetUtilities(valueUtils);
-		assertEquals(null, utilset.isFitting(valueset));
-
-		valueUtils.put(new DiscreteValue("unknownIssue"), util1);
-		utilset = new DiscreteValueSetUtilities(valueUtils);
-		assertEquals(
-				"The values in the set DiscreteValueSet[\"a\", \"b\"] do not match the values mapped to utilities [\"a\", \"b\", \"unknownIssue\"]",
-				utilset.isFitting(valueset));
-
-	}
-
-	@Test
-	public void testIsFittingWrongType() {
-		ValueSet valueset = new NumberValueSet(BigDecimal.ZERO, BigDecimal.ONE,
-				new BigDecimal("0.3"));
-
-		Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
-		valueUtils.put(vala, util);
-		valueUtils.put(valb, utilb);
-		DiscreteValueSetUtilities utilset = new DiscreteValueSetUtilities(
-				valueUtils);
-
-		assertEquals(
-				"The utilities are for a discrete valueset but the given values are numberValueSet[0,1,0.3]",
-				utilset.isFitting(valueset));
-
-	}
-
-	@Test
-	public void testIsFittingWrongIssues()
-			throws JsonParseException, JsonMappingException, IOException {
-		// Notice, party tent has extra single quote in the valuesstr.
-		String valuesstr = "{\"values\": [\"Party Tent'\",\"Your Dorm\", \"Party Room\", \"Ballroom\" ]}";
-		String utilstring = "{\"DiscreteValueSetUtilities\": {\"valueUtilities\": {\"Party Tent\": 0.52,\"Your Dorm\": 0.23,\"Party Room\": 0.99,\"Ballroom\": 0.77}}}";
-		ValueSetUtilities valueutils = jackson.readValue(utilstring,
-				ValueSetUtilities.class);
-		ValueSet values = jackson.readValue(valuesstr, ValueSet.class);
-		System.out.println(valueutils.isFitting(values));
-		assertFalse(valueutils.isFitting(values).isEmpty());
-
-	}
-
-	@Test
-	public void testDeserializeAsDiscrete()
-			throws JsonParseException, JsonMappingException, IOException {
-		// Check that DiscreteValueSetUtilities properly deserializes
-		// discreteutils.
-		String utilstring = "{\"DiscreteValueSetUtilities\": {\"valueUtilities\": {\"Party Tent\": 0.52,\"Your Dorm\": 0.23,\"Party Room\": 0.99,\"Ballroom\": 0.77}}}";
-		DiscreteValueSetUtilities valueutils = jackson.readValue(utilstring,
-				DiscreteValueSetUtilities.class);
-		assertTrue(new BigDecimal("0.23").compareTo(
-				valueutils.getUtility(new DiscreteValue("Your Dorm"))) == 0);
-
-	}
-
 }
Index: profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveSerializationTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveSerializationTest.java	(revision 52)
+++ profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveSerializationTest.java	(revision 1)
@@ -14,5 +14,5 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.exc.ValueInstantiationException;
+import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
 
 import geniusweb.issuevalue.Bid;
@@ -20,12 +20,13 @@
 import geniusweb.issuevalue.DiscreteValueSet;
 import geniusweb.issuevalue.Domain;
-import geniusweb.issuevalue.NumberValue;
-import geniusweb.issuevalue.NumberValueSet;
 import geniusweb.issuevalue.Value;
 import geniusweb.issuevalue.ValueSet;
 import geniusweb.profile.Profile;
+import geniusweb.profile.utilityspace.DiscreteValueSetUtilities;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.profile.utilityspace.NumberValueSetUtilities;
+import geniusweb.profile.utilityspace.ValueSetUtilities;
 
 public class LinearAdditiveSerializationTest {
-
 	private static final BigDecimal VAL2 = new BigDecimal("0.2");
 	private static final BigDecimal VAL3 = new BigDecimal("0.3");
@@ -38,6 +39,6 @@
 	private DiscreteValue i1v1 = new DiscreteValue("issue1value1");
 	private DiscreteValue i1v2 = new DiscreteValue("issue1value2");
-	private NumberValue i2v1 = new NumberValue("15");
-	private NumberValue i2v2 = new NumberValue("16");
+	private DiscreteValue i2v1 = new DiscreteValue("issue2value1");
+	private DiscreteValue i2v2 = new DiscreteValue("issue2value2");
 	private Domain domain;
 
@@ -46,17 +47,24 @@
 	private BigDecimal TWELVE = new BigDecimal("12");
 	private BigDecimal EIGHTEEN = new BigDecimal("18");
-	private static final ObjectMapper jackson = new ObjectMapper();
 
 	private LinearAdditiveUtilitySpace space;
-
-	private String serialized = "{\"LinearAdditiveUtilitySpace\":{\"domain\":{\"name\":\"test\",\"issuesValues\":{\"issue2\":{\"range\":{\"low\":12,\"high\":18,\"step\":1}},\"issue1\":{\"values\":[\"issue1value1\",\"issue1value2\"]}}},\"name\":\"testprofile\",\"issueUtilities\":{\"issue2\":{\"NumberValueSetUtilities\":{\"lowValue\":12,\"lowUtility\":0.3,\"highValue\":18,\"highUtility\":0.6}},\"issue1\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"issue1value1\":0.2,\"issue1value2\":0.3}}}},\"issueWeights\":{\"issue2\":0.4,\"issue1\":0.6},\"reservationBid\":{\"issuevalues\":{\"issue2\":15,\"issue1\":\"issue1value2\"}}}}";
+	private String serialized = "{\"LinearAdditiveUtilitySpace\":{"
+			+ "\"domain\":{\"name\":\"test\","
+			+ "\"issuesValues\":{\"issue2\":{\"values\":[\"issue2value1\",\"issue2value2\"]},"
+			+ "\"issue1\":{\"values\":[\"issue1value1\",\"issue1value2\"]}}},"
+			+ "\"name\":\"testprofile\"," + "\"issueUtilities\":"
+			+ "{\"issue2\":{\"numberutils\":{\"lowValue\":12,\"lowUtility\":0.3,\"highValue\":18,\"highUtility\":0.6}},"
+			+ "\"issue1\":{\"discreteutils\":{\"valueUtilities\":{\"issue1value1\":0.2,\"issue1value2\":0.3}}}},"
+			+ "\"issueWeights\":{\"issue2\":0.4,\"issue1\":0.6},"
+			+ "\"reservationBid\":{\"issuevalues\":{\"issue2\":\"issue2value1\",\"issue1\":\"issue1value2\"}}"
+			+ "}" + "}";
 
 	private String jobsjson = "{\"LinearAdditiveUtilitySpace\":{\"issueUtilities\":{"
-			+ "\"lease car\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"no\":0,\"yes\":1}}},"
-			+ "\"permanent contract\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"no\":0,\"yes\":1}}},"
-			+ "\"career development opportunities\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"high\":1,\"low\":0,\"medium\":0.5}}},"
-			+ "\"fte\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"1.0\":0.75,\"0.6\":0.25,\"0.8\":0.5}}},"
-			+ "\"salary\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"4000\":1.0,\"2500\":0.25,\"3500\":0.75,\"2000\":0,\"3000\":0.3}}},"
-			+ "\"work from home\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"1\":0.5,\"2\":0.666666666666,\"0\":0.333333333}}}},"
+			+ "\"lease car\":{\"discreteutils\":{\"valueUtilities\":{\"no\":0,\"yes\":1}}},"
+			+ "\"permanent contract\":{\"discreteutils\":{\"valueUtilities\":{\"no\":0,\"yes\":1}}},"
+			+ "\"career development opportunities\":{\"discreteutils\":{\"valueUtilities\":{\"high\":1,\"low\":0,\"medium\":0.5}}},"
+			+ "\"fte\":{\"discreteutils\":{\"valueUtilities\":{\"1.0\":0.75,\"0.6\":0.25,\"0.8\":0.5}}},"
+			+ "\"salary\":{\"discreteutils\":{\"valueUtilities\":{\"4000\":1.0,\"2500\":0.25,\"3500\":0.75,\"2000\":0,\"3000\":0.3}}},"
+			+ "\"work from home\":{\"discreteutils\":{\"valueUtilities\":{\"1\":0.5,\"2\":0.666666666666,\"0\":0.333333333}}}},"
 			+ "\"issueWeights\":{\"lease car\":0.06,\"permanent contract\":0.16,"
 			+ "\"career development opportunities\":0.04,\"fte\":0.32,\"salary\":0.24,\"work from home\":0.18},"
@@ -71,6 +79,6 @@
 			+ "\"issue3\":{\"values\":[\"issue1value1\",\"issue1value2\"]}}},"
 			+ "\"name\":\"testprofile\"," + "\"issueUtilities\":"
-			+ "{\"issue2\":{\"NumberValueSetUtilities\":{\"lowValue\":12,\"lowUtility\":0.3,\"highValue\":18,\"highUtility\":0.6}},"
-			+ "\"issue1\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"issue1value1\":0.2,\"issue1value2\":0.3}}}},"
+			+ "{\"issue2\":{\"numberutils\":{\"lowValue\":12,\"lowUtility\":0.3,\"highValue\":18,\"highUtility\":0.6}},"
+			+ "\"issue1\":{\"discreteutils\":{\"valueUtilities\":{\"issue1value1\":0.2,\"issue1value2\":0.3}}}},"
 			+ "\"issueWeights\":{\"issue2\":0.4,\"issue1\":0.6},"
 			+ "\"reservationBid\":{\"issuevalues\":{\"issue2\":\"issue2value1\",\"issue1\":\"issue1value2\"}}"
@@ -88,5 +96,5 @@
 		Map<String, ValueSet> values = new HashMap<>();
 		values.put(ISS1, new DiscreteValueSet(Arrays.asList(i1v1, i1v2)));
-		values.put(ISS2, new NumberValueSet(TWELVE, EIGHTEEN, BigDecimal.ONE));
+		values.put(ISS2, new DiscreteValueSet(Arrays.asList(i2v1, i2v2)));
 		domain = new Domain("test", values);
 
@@ -107,4 +115,5 @@
 	@Test
 	public void testSerialize() throws JsonProcessingException {
+		ObjectMapper jackson = new ObjectMapper();
 		String string = jackson.writeValueAsString(space);
 		System.out.println(string);
@@ -114,9 +123,11 @@
 	@Test
 	public void testDeserialize() throws IOException {
+		ObjectMapper jackson = new ObjectMapper();
 		assertEquals(space, jackson.readValue(serialized, Profile.class));
 	}
 
-	@Test(expected = ValueInstantiationException.class)
+	@Test(expected = InvalidDefinitionException.class)
 	public void testDeserializeWrongIssues() throws IOException {
+		ObjectMapper jackson = new ObjectMapper();
 		jackson.readValue(serializedWrongIssues, Profile.class);
 	}
@@ -124,4 +135,5 @@
 	@Test
 	public void testDeserializeFromValue() throws IOException {
+		ObjectMapper jackson = new ObjectMapper();
 		assertEquals(space, jackson.readValue(serialized, Profile.class));
 	}
@@ -129,4 +141,5 @@
 	@Test
 	public void testDeserializeJobs() throws IOException {
+		ObjectMapper jackson = new ObjectMapper();
 		Profile jobs = jackson.readValue(jobsjson, Profile.class);
 	}
Index: profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveTest.java	(revision 52)
+++ profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveTest.java	(revision 1)
@@ -2,16 +2,10 @@
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.io.IOException;
 import java.math.BigDecimal;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -21,13 +15,13 @@
 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.Value;
 import geniusweb.issuevalue.ValueSet;
+import geniusweb.profile.utilityspace.DiscreteValueSetUtilities;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.profile.utilityspace.ValueSetUtilities;
 import tudelft.utilities.junit.GeneralTests;
 
@@ -60,5 +54,4 @@
 
 	private static final ValueSetUtilities value1Utils;
-	private static final ObjectMapper jackson = new ObjectMapper();
 
 	static {
@@ -147,8 +140,8 @@
 	public List<String> getGeneralTestStrings() {
 		return Arrays.asList(
-				"LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",
-				"LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.7, issue1=0.3\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",
-				"LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",
-				"LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value1\"\\}\\]");
+				"LinearAdditive\\[\\{issue2=ValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",
+				"LinearAdditive\\[\\{issue2=ValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.7, issue1=0.3\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",
+				"LinearAdditive\\[\\{issue2=ValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",
+				"LinearAdditive\\[\\{issue2=ValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value1\"\\}\\]");
 	}
 
@@ -174,4 +167,7 @@
 	}
 
+	/**
+	 * Empty profile is not allowed since the weights then don't sum up to 1
+	 */
 	@Test
 	public void constructorOneIssueTest() {
@@ -181,5 +177,5 @@
 		weightset.put(ISS1, BigDecimal.ONE);
 		new LinearAdditiveUtilitySpace(smalldomain, NAME, utilset, weightset,
-				null);
+				reservationBid);
 	}
 
@@ -208,5 +204,5 @@
 		weightset.put(ISS1, BigDecimal.ONE);
 		LinearAdditiveUtilitySpace space = new LinearAdditiveUtilitySpace(
-				smalldomain, NAME, utilset, weightset, null);
+				smalldomain, NAME, utilset, weightset, reservationBid);
 	}
 
@@ -250,13 +246,11 @@
 		Bid bid1 = new Bid(issuevalues);
 		Map<String, Value> issuevalues1 = new HashMap<>();
-		issuevalues1.put(ISS1, i1v2);
-		issuevalues1.put(ISS2, i2v1);
+		issuevalues.put(ISS1, i1v2);
+		issuevalues.put(ISS2, i1v1);
 		Bid bid2 = new Bid(issuevalues1);
 		assertTrue(utilspace1.isPreferredOrEqual(bid1, bid2));
 		assertTrue(utilspace1.isPreferredOrEqual(bid1, bid1));
 		assertTrue(utilspace1.isPreferredOrEqual(bid2, bid2));
-		assertFalse(utilspace1.isPreferredOrEqual(bid2, bid1));
-		assertFalse(utilspace1
-				.isPreferredOrEqual(new Bid(Collections.emptyMap()), bid1));
+		assertTrue(!utilspace1.isPreferredOrEqual(bid2, bid1));
 	}
 
@@ -271,41 +265,3 @@
 				WEIGHT1.multiply(I1V1UTIL).compareTo(space.getUtility(bid)));
 	}
-
-	@Test
-	public void loadFullWithJson() throws IOException {
-		String profile = new String(
-				Files.readAllBytes(Paths.get("src/test/resources/party1.json")),
-				StandardCharsets.UTF_8);
-		UtilitySpace space = jackson.readValue(profile, UtilitySpace.class);
-
-	}
-
-	@Test
-	public void loadFullWithJsonNumber() throws IOException {
-		String profile = new String(
-				Files.readAllBytes(
-						Paths.get("src/test/resources/japantrip1.json")),
-				StandardCharsets.UTF_8);
-		UtilitySpace space = jackson.readValue(profile, UtilitySpace.class);
-
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testResBidWithNonsenseIssue() {
-		Bid resBid = new Bid("nonsense", i1v1);
-		new LinearAdditiveUtilitySpace(domain, NAME, utils, weights, resBid);
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testResBidWithWrongValueType() {
-		Bid resBid = new Bid(ISS1, new NumberValue(BigDecimal.ZERO));
-		new LinearAdditiveUtilitySpace(domain, NAME, utils, weights, resBid);
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testResBidWithNonsenseValue() {
-		Bid resBid = new Bid(ISS1, new DiscreteValue("nonsense"));
-		new LinearAdditiveUtilitySpace(domain, NAME, utils, weights, resBid);
-	}
-
 }
Index: profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java	(revision 52)
+++ profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java	(revision 1)
@@ -3,5 +3,4 @@
 import static org.junit.Assert.assertEquals;
 
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.Arrays;
@@ -10,19 +9,9 @@
 import org.junit.Test;
 
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import geniusweb.issuevalue.DiscreteValue;
-import geniusweb.issuevalue.DiscreteValueSet;
 import geniusweb.issuevalue.NumberValue;
-import geniusweb.issuevalue.NumberValueSet;
-import geniusweb.issuevalue.ValueSet;
-import tudelft.utilities.immutablelist.Range;
+import geniusweb.profile.utilityspace.NumberValueSetUtilities;
 import tudelft.utilities.junit.GeneralTests;
 
-public class NumberValueSetUtilTest
-		extends GeneralTests<NumberValueSetUtilities> {
+public class NumberValueSetUtilTest extends GeneralTests<NumberValueSetUtilities> {
 
 	private static final BigDecimal lowval1 = new BigDecimal("12.5");
@@ -32,28 +21,22 @@
 	private static final BigDecimal highvalb = new BigDecimal("18.4");
 	private static final BigDecimal highutil = new BigDecimal("0.9");
-	private static final NumberValueSetUtilities valueset1 = new NumberValueSetUtilities(
-			lowval1, low1util, highval, highutil);
-	private static final NumberValueSetUtilities valueset1b = new NumberValueSetUtilities(
-			lowval1, low1util, highval, highutil);
-	private static final NumberValueSetUtilities valueset2 = new NumberValueSetUtilities(
-			lowval1, low1utilb, highval, highutil);
-	private static final NumberValueSetUtilities valueset3 = new NumberValueSetUtilities(
-			lowval1, low1util, highvalb, highutil);
-	private static final BigDecimal ZERO_1 = new BigDecimal("0.1");
-	private final String utilstring = "{\"NumberValueSetUtilities\":{\"lowValue\":12.5,\"lowUtility\":0.5,\"highValue\":18.5,\"highUtility\":0.9}}";
-
-	private static final ObjectMapper jackson = new ObjectMapper();
+	private static final NumberValueSetUtilities valueset1 = new NumberValueSetUtilities(lowval1, low1util, highval,
+			highutil);
+	private static final NumberValueSetUtilities valueset1b = new NumberValueSetUtilities(lowval1, low1util, highval,
+			highutil);
+	private static final NumberValueSetUtilities valueset2 = new NumberValueSetUtilities(lowval1, low1utilb, highval,
+			highutil);
+	private static final NumberValueSetUtilities valueset3 = new NumberValueSetUtilities(lowval1, low1util, highvalb,
+			highutil);
 
 	@Override
 	public List<List<NumberValueSetUtilities>> getGeneralTestData() {
-		return Arrays.asList(Arrays.asList(valueset1, valueset1b),
-				Arrays.asList(valueset2), Arrays.asList(valueset3));
+		return Arrays.asList(Arrays.asList(valueset1, valueset1b), Arrays.asList(valueset2), Arrays.asList(valueset3));
 	}
 
 	@Override
 	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("NumberValueSetUtilities\\(12.5->0.5,18.5->0.9\\)",
-				"NumberValueSetUtilities\\(12.5->0.6,18.5->0.9\\)",
-				"NumberValueSetUtilities\\(12.5->0.5,18.4->0.9\\)");
+		return Arrays.asList("NumberValUtility\\(12.5->0.5,18.5->0.9\\)", "NumberValUtility\\(12.5->0.6,18.5->0.9\\)",
+				"NumberValUtility\\(12.5->0.5,18.4->0.9\\)");
 	}
 
@@ -66,135 +49,16 @@
 	public void utilAscentingTest() {
 		NumberValueSetUtilities utils = valueset1;
-		assertEquals(0,
-				low1util.compareTo(utils.getUtility(new NumberValue(lowval1))));
+		assertEquals(0, low1util.compareTo(utils.getUtility(new NumberValue(lowval1))));
 	}
 
 	@Test
 	public void utilDescendingTest() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
-				highutil, highval, low1util);
-		assertEquals(0,
-				highutil.compareTo(utils.getUtility(new NumberValue(lowval1))));
+		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1, highutil, highval, low1util);
+		assertEquals(0, highutil.compareTo(utils.getUtility(new NumberValue(lowval1))));
 	}
 
 	@Test(expected = IllegalArgumentException.class)
 	public void reverserangetest() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(highval,
-				low1util, highval, highutil);
-	}
-
-	@Test(expected = NullPointerException.class)
-	public void testNullHigh() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
-				low1util, null, highutil);
-	}
-
-	@Test(expected = NullPointerException.class)
-	public void testNullHighUtil() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
-				low1util, highval, null);
-	}
-
-	@Test(expected = NullPointerException.class)
-	public void testNullLow() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(null,
-				low1util, highval, highutil);
-	}
-
-	@Test(expected = NullPointerException.class)
-	public void testNullLowUtil() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
-				null, highval, highutil);
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testLowUtilNegative() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
-				new BigDecimal("-0.2"), highval, highutil);
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testHighUtilNegative() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
-				low1util, highval, new BigDecimal("-0.000003"));
-	}
-
-	@Test
-	public void getUtilTest() {
-		NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
-				low1util, highval, highutil);
-		assertEquals(0,
-				highutil.compareTo(utils.getUtility(new NumberValue(highval))));
-		assertEquals(0,
-				low1util.compareTo(utils.getUtility(new NumberValue(lowval1))));
-		// linear interpolated , check center
-		BigDecimal middleutil = low1util.add(highutil)
-				.divide(new BigDecimal("2"));
-		NumberValue middleval = new NumberValue(
-				lowval1.add(highval).divide(new BigDecimal("2")));
-		assertEquals(0, middleutil.compareTo(utils.getUtility(middleval)));
-
-	}
-
-	@Test
-	public void testIsNotFittingRange() {
-		ValueSet valueset = new NumberValueSet(
-				new Range(low1util, highutil, new BigDecimal("0.02")));
-		ValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
-				low1util, highval, highutil);
-		assertEquals(
-				"the utilities are specified down to 12.5 but the valueset starts at 0.5",
-				utilset.isFitting(valueset));
-	}
-
-	@Test
-	public void testTopOfRangeTooLarge() {
-		ValueSet valueset = new NumberValueSet(
-				new Range(lowval1, highval.subtract(ZERO_1), ZERO_1));
-		ValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
-				low1util, highval, highutil);
-		assertEquals(
-				"the utilities are specified up to 18.5 but the valueset ends at 18.4",
-				utilset.isFitting(valueset));
-	}
-
-	@Test
-	public void testIsFitting() {
-		ValueSet valueset = new NumberValueSet(
-				new Range(lowval1, highval, BigDecimal.ONE));
-		ValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
-				low1util, highval, highutil);
-		assertEquals(null, utilset.isFitting(valueset));
-	}
-
-	@Test
-	public void testIsFittingWrongType() {
-		DiscreteValue vala = new DiscreteValue("a");
-		DiscreteValue valb = new DiscreteValue("b");
-		ValueSet valueset = new DiscreteValueSet(Arrays.asList(vala, valb));
-
-		NumberValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
-				low1util, highval, highutil);
-		assertEquals(
-				"The utilities are for a number valueset but the given values are DiscreteValueSet[\"a\", \"b\"]",
-				utilset.isFitting(valueset));
-
-	}
-
-	@Test
-	public void testSerialize() throws JsonProcessingException {
-
-		String json = jackson.writeValueAsString(valueset1);
-		System.out.println(json);
-		assertEquals(utilstring, json);
-	}
-
-	@Test
-	public void testDeserialize()
-			throws JsonParseException, JsonMappingException, IOException {
-		ValueSetUtilities valueutils = jackson.readValue(utilstring,
-				ValueSetUtilities.class);
-		assertEquals(valueset1, valueutils);
-
+		NumberValueSetUtilities utils = new NumberValueSetUtilities(highval, highutil, lowval1, low1util);
 	}
 
Index: profile/src/test/java/geniusweb/profile/utilityspace/PartsUtilitiesTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/PartsUtilitiesTest.java	(revision 52)
+++ 	(revision )
@@ -1,144 +1,0 @@
-package geniusweb.profile.utilityspace;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-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.issuevalue.DiscreteValue;
-import geniusweb.issuevalue.Value;
-import tudelft.utilities.junit.GeneralTests;
-
-public class PartsUtilitiesTest extends GeneralTests<PartsUtilities> {
-	private static final String iss2 = "issue2";
-
-	private static final String iss1 = "issue1";
-
-	private final ObjectMapper jackson = new ObjectMapper();
-
-	private static BigDecimal N01 = new BigDecimal("0.1"),
-			N02 = new BigDecimal("0.2"), N03 = new BigDecimal("0.3"),
-			N05 = new BigDecimal("0.5"), N07 = new BigDecimal("0.7"),
-			N08 = new BigDecimal("0.8"), N09 = new BigDecimal("0.9");
-	private final static DiscreteValue low = new DiscreteValue("low");
-	private final static DiscreteValue high = new DiscreteValue("high");
-
-	private final static String jsontext = "{\"PartsUtilities\":{\"issues\":[\"issue1\",\"issue2\"],\"utilslist\":[{\"values\":[\"low\",\"low\"],\"util\":0.3},{\"values\":[\"high\",\"high\"],\"util\":0.9}]}}";
-
-	private PartsUtilities parts1, parts1a, parts2, parts3;
-
-	@Before
-	public void before() {
-		List<PartUtil> vals = new LinkedList<>();
-		vals.add(new PartUtil(Arrays.asList(low, low), N03));
-		vals.add(new PartUtil(Arrays.asList(high, high), N09));
-		List<PartUtil> vals1 = new LinkedList<>();
-		vals1.add(new PartUtil(Arrays.asList(low, low), N09));
-		List<String> issues = Arrays.asList(iss1, iss2);
-		parts1 = new PartsUtilities(issues, vals);
-		parts1a = new PartsUtilities(issues, vals);
-		parts2 = new PartsUtilities(Arrays.asList(iss1), vals);
-		parts3 = new PartsUtilities(issues, vals1);
-	}
-
-	@Override
-	public List<List<PartsUtilities>> getGeneralTestData() {
-		return Arrays.asList(Arrays.asList(parts1, parts1a),
-				Arrays.asList(parts2), Arrays.asList(parts3));
-	}
-
-	@Override
-	public List<String> getGeneralTestStrings() {
-		return Arrays.asList(
-				"PartsUtilities..issue1, issue2.,\\{.\"low\", \"low\".=0.3, .\"high\", \"high\".=0.9\\}.",
-				"PartsUtilities..issue1.,\\{.\"low\", \"low\".=0.3, .\"high\", \"high\".=0.9\\}.",
-				"PartsUtilities..issue1, issue2.,\\{.\"low\", \"low\".=0.9\\}.");
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testWeightsTooHigh() {
-		Map<ProductOfValue, BigDecimal> utils = new HashMap<>();
-		utils.put(new ProductOfValue(Arrays.asList(low, low)),
-				new BigDecimal("1.1"));
-		new PartsUtilities(Arrays.asList(iss1, iss2), utils);
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void testWeightsTooLow() {
-		Map<ProductOfValue, BigDecimal> utils = new HashMap<>();
-		utils.put(new ProductOfValue(Arrays.asList(low, low)),
-				new BigDecimal("-0.3"));
-		new PartsUtilities(Arrays.asList(iss1, iss2), utils);
-	}
-
-	@Test
-	public void testBasicSerialize()
-			throws JsonParseException, JsonMappingException, IOException {
-		System.out.println(jsontext);
-		assertEquals(jsontext, jackson.writeValueAsString(parts1));
-	}
-
-	@Test
-	public void testBasicDeserialize()
-			throws JsonParseException, JsonMappingException, IOException {
-		System.out.println(jsontext);
-		assertEquals(parts1, jackson.readValue(jsontext, PartsUtilities.class));
-	}
-
-	@Test
-	public void testGetUtility() {
-		assertEquals(N03,
-				parts1.getUtility(new ProductOfValue(Arrays.asList(low, low))));
-		assertEquals(N09, parts1
-				.getUtility(new ProductOfValue(Arrays.asList(high, high))));
-		assertEquals(BigDecimal.ZERO, parts1
-				.getUtility(new ProductOfValue(Arrays.asList(low, high))));
-	}
-
-	@Test
-	public void testGetIssues() {
-		assertEquals(Arrays.asList(iss1, iss2), parts1.getIssues());
-	}
-
-	@Test
-	public void testGetIncorrectValue() {
-		assertEquals(BigDecimal.ZERO, parts1.getUtility(low));
-	}
-
-	@Test
-	public void testGetValue() {
-		assertTrue(N03.compareTo(parts1
-				.getUtility(new ProductOfValue(Arrays.asList(low, low)))) == 0);
-	}
-
-	@Test
-	public void testMerge() {
-		Map<ProductOfValue, BigDecimal> extravals = new HashMap<>();
-		extravals.put(new ProductOfValue(Arrays.asList(low, low)),
-				N01.multiply(N05));
-		extravals.put(new ProductOfValue(Arrays.asList(high, high)),
-				N01.multiply(N07));
-		PartsUtilities extraparts = new PartsUtilities(
-				Arrays.asList("extra1", "extra2"), extravals);
-
-		PartsUtilities merged = parts1.add(extraparts);
-
-		Value pval = new ProductOfValue(Arrays.asList(low, low, high, high));
-		assertEquals(0,
-				N03.add(N01.multiply(N07)).compareTo(merged.getUtility(pval)));
-	}
-
-}
Index: profile/src/test/java/geniusweb/profile/utilityspace/ProductOfValueTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/ProductOfValueTest.java	(revision 52)
+++ 	(revision )
@@ -1,78 +1,0 @@
-package geniusweb.profile.utilityspace;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Test;
-
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import geniusweb.issuevalue.DiscreteValue;
-import geniusweb.issuevalue.Value;
-import tudelft.utilities.junit.GeneralTests;
-
-public class ProductOfValueTest extends GeneralTests<ProductOfValue> {
-	private final static ObjectMapper jackson = new ObjectMapper();
-
-	private final static Value value1 = new DiscreteValue("val1");
-	private final static Value value2 = new DiscreteValue("val2");
-	private final static ProductOfValue values1 = new ProductOfValue(
-			Arrays.asList(value1, value2));
-	private final static ProductOfValue values1a = new ProductOfValue(
-			Arrays.asList(value1, value2));
-	private final static ProductOfValue values2 = new ProductOfValue(
-			Arrays.asList(value2));
-	private final static DiscreteValue low = new DiscreteValue("low");
-	private final static DiscreteValue high = new DiscreteValue("high");
-
-	private String jsontext = "[\"val1\",\"val2\"]";
-
-	@Override
-	public List<List<ProductOfValue>> getGeneralTestData() {
-		return Arrays.asList(Arrays.asList(values1, values1a),
-				Arrays.asList(values2));
-	}
-
-	@Override
-	public List<String> getGeneralTestStrings() {
-		return Arrays.asList(".*\"val1\", \"val2\".*", ".*\"val2\".*");
-	}
-
-	@Test
-	public void testSerialize()
-			throws JsonParseException, JsonMappingException, IOException {
-
-		assertEquals(jsontext, jackson.writeValueAsString(values1));
-	}
-
-	@Test
-	public void testBasicDeserialize()
-			throws JsonParseException, JsonMappingException, IOException {
-		System.out.println(jsontext);
-		assertEquals(values1,
-				jackson.readValue(jsontext, ProductOfValue.class));
-	}
-
-	@Test
-	public void testMerge() {
-		Value val1 = mock(Value.class);
-		Value val2 = mock(Value.class);
-		Value val3 = mock(Value.class);
-		Value val4 = mock(Value.class);
-
-		ProductOfValue prodOfVal1 = new ProductOfValue(
-				Arrays.asList(val1, val2));
-		ProductOfValue prodOfVal2 = new ProductOfValue(
-				Arrays.asList(val3, val4));
-
-		ProductOfValue prodVal = prodOfVal1.merge(prodOfVal2);
-		assertEquals(4, prodVal.getValues().size());
-	}
-
-}
Index: profile/src/test/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpaceTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpaceTest.java	(revision 52)
+++ 	(revision )
@@ -1,308 +1,0 @@
-package geniusweb.profile.utilityspace;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-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.Value;
-import geniusweb.issuevalue.ValueSet;
-import geniusweb.profile.Profile;
-import tudelft.utilities.immutablelist.AbstractImmutableList;
-import tudelft.utilities.immutablelist.ImmutableList;
-import tudelft.utilities.immutablelist.Outer;
-
-public class SumOfGroupsUtilitySpaceTest {
-	private final ObjectMapper jackson = new ObjectMapper();
-	private SumOfGroupsUtilitySpace pa1;
-	private final String iss1 = "issue1", iss2 = "issue2", iss3 = "issue3";
-	private static BigDecimal N01 = new BigDecimal("0.1"),
-			N02 = new BigDecimal("0.2"), N03 = new BigDecimal("0.3"),
-			N05 = new BigDecimal("0.5"), N07 = new BigDecimal("0.7"),
-			N08 = new BigDecimal("0.8"), N09 = new BigDecimal("0.9");
-
-	private final DiscreteValue lo = new DiscreteValue("low");
-	private final DiscreteValue hi = new DiscreteValue("high");
-	private final Bid resBid = new Bid(iss1, hi);
-
-	private Domain domain;
-	private PartsUtilities putils12, putils3;
-	private String serialized = "{\"SumOfGroupsUtilitySpace\":{\"domain\":{\"name\":\"domain\",\"issuesValues\":{\"issue3\":{\"values\":[\"low\",\"high\"]},\"issue2\":{\"values\":[\"low\",\"high\"]},\"issue1\":{\"values\":[\"low\",\"high\"]}}},\"name\":\"testspace\",\"partUtilities\":{\"1and2\":{\"PartsUtilities\":{\"issues\":[\"issue1\",\"issue2\"],\"utilslist\":[{\"values\":[\"low\",\"low\"],\"util\":0.16},{\"values\":[\"high\",\"high\"],\"util\":0.72},{\"values\":[\"low\",\"high\"],\"util\":0.16},{\"values\":[\"high\",\"low\"],\"util\":0.16}]}},\"3\":{\"PartsUtilities\":{\"issues\":[\"issue3\"],\"utilslist\":[{\"values\":[\"low\"],\"util\":0.16},{\"values\":[\"high\"],\"util\":0.14}]}}},\"reservationbid\":{\"issuevalues\":{\"issue1\":\"high\"}}}}";
-
-	@Before
-	public void before() {
-		Map<String, ValueSet> issues = new HashMap<>();
-		issues.put(iss1, new DiscreteValueSet(lo, hi));
-		issues.put(iss2, new DiscreteValueSet(lo, hi));
-		issues.put(iss3, new DiscreteValueSet(lo, hi));
-		domain = new Domain("domain", issues);
-
-		Map<ProductOfValue, BigDecimal> utils12 = new HashMap<>();
-		// util12 has weight N08
-		utils12.put(new ProductOfValue(Arrays.asList(lo, lo)),
-				N02.multiply(N08));
-		utils12.put(new ProductOfValue(Arrays.asList(lo, hi)),
-				N02.multiply(N08));
-		utils12.put(new ProductOfValue(Arrays.asList(hi, lo)),
-				N02.multiply(N08));
-		utils12.put(new ProductOfValue(Arrays.asList(hi, hi)),
-				N09.multiply(N08));
-		putils12 = new PartsUtilities(Arrays.asList(iss1, iss2), utils12);
-
-		// utils3 has weight N02.
-		Map<ProductOfValue, BigDecimal> utils3 = new HashMap<>();
-		utils3.put(new ProductOfValue(Arrays.asList(lo)), N08.multiply(N02));
-		utils3.put(new ProductOfValue(Arrays.asList(hi)), N07.multiply(N02));
-		putils3 = new PartsUtilities(Arrays.asList(iss3), utils3);
-
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void smokeTestIncompleteProfile() {
-		HashMap<String, PartsUtilities> partutils = new HashMap<>();
-		partutils.put("1and2", putils12);
-		new SumOfGroupsUtilitySpace(domain, "testspace", partutils, resBid);
-
-	}
-
-	@Test // non-normalized utils should be fine in this case
-	public void smokeTestWeightsNotNormalized() {
-		HashMap<String, PartsUtilities> partutils = new HashMap<>();
-		partutils.put("1and2", putils12);
-		partutils.put("3", putils3);
-		new SumOfGroupsUtilitySpace(domain, "testspace", partutils, resBid);
-
-	}
-
-	@Test(expected = IllegalArgumentException.class)
-	public void smokeTestExtraIssue() {
-		HashMap<String, PartsUtilities> partutils = new HashMap<>();
-		partutils.put("1and2", putils12);
-		partutils.put("3", putils3);
-		partutils.put("4", putils3);
-		new SumOfGroupsUtilitySpace(domain, "testspace", partutils, resBid);
-
-	}
-
-	@Test
-	public void smokeTest() {
-		makeBasic();
-	}
-
-	@Test
-	public void testName() {
-		SumOfGroupsUtilitySpace paus = makeBasic();
-		assertEquals("testspace", paus.getName());
-	}
-
-	@Test
-	public void testDomain() {
-		SumOfGroupsUtilitySpace paus = makeBasic();
-		assertEquals(domain, paus.getDomain());
-	}
-
-	@Test
-	public void testGetResBid() {
-		SumOfGroupsUtilitySpace paus = makeBasic();
-		assertEquals(resBid, paus.getReservationBid());
-	}
-
-	@Test
-	public void testGetUtilityEmptyBid() {
-		SumOfGroupsUtilitySpace paus = makeBasic();
-		assertTrue(BigDecimal.ZERO.compareTo(
-				paus.getUtility(new Bid(Collections.emptyMap()))) == 0);
-	}
-
-	@Test
-	public void testGetUtility() {
-		SumOfGroupsUtilitySpace paus = makeBasic();
-		Map<String, Value> map = new HashMap<>();
-		map.put(iss1, lo);
-		map.put(iss2, lo); // 1,2 combined has util 0.2
-		map.put(iss3, hi); // 3 has util 0.7
-		// weights are set to 0.8, 0.2. Gives total util 0.3
-		Bid bid = new Bid(map);
-		assertTrue(N03.compareTo(paus.getUtility(bid)) == 0);
-	}
-
-	/**
-	 * Demonstrates how to convert {@link LinearAdditiveUtilitySpace} to a
-	 * {@link SumOfGroupsUtilitySpace}
-	 * 
-	 */
-	@Test
-	public void testConvertLas() throws IOException {
-		String profile = new String(
-				Files.readAllBytes(Paths.get("src/test/resources/party1.json")),
-				StandardCharsets.UTF_8);
-		LinearAdditiveUtilitySpace las = jackson.readValue(profile,
-				LinearAdditiveUtilitySpace.class);
-		SumOfGroupsUtilitySpace pas = new SumOfGroupsUtilitySpace(las);
-		checkUtilitiesAllEqual(las, pas);
-		System.out.println("Generated partial profile:\n" + pas);
-	}
-
-	/**
-	 * Demonstrates how to convert {@link LinearAdditiveUtilitySpace} to a
-	 * {@link SumOfGroupsUtilitySpace} and group some issues
-	 * 
-	 */
-	@Test
-	public void testConvertAndGroupParty() throws IOException {
-		String profile = new String(
-				Files.readAllBytes(Paths.get("src/test/resources/party1.json")),
-				StandardCharsets.UTF_8);
-		LinearAdditiveUtilitySpace las = jackson.readValue(profile,
-				LinearAdditiveUtilitySpace.class);
-		SumOfGroupsUtilitySpace pas = new SumOfGroupsUtilitySpace(las);
-		pas = pas.group(Arrays.asList("Food", "Drinks"), "food&drinks");
-		checkUtilitiesAllEqual(las, pas);
-		System.out.println("Re-grouped party profile:\n");
-		System.out.println(jackson.writeValueAsString(pas));
-
-	}
-
-	@Test
-	public void testGroupe2e() {
-		Map<ProductOfValue, BigDecimal> utils1 = new HashMap<>();
-		utils1.put(new ProductOfValue(Arrays.asList(lo)), N02.multiply(N02));
-		utils1.put(new ProductOfValue(Arrays.asList(hi)), N03.multiply(N02));
-		Map<ProductOfValue, BigDecimal> utils2 = new HashMap<>();
-		utils2.put(new ProductOfValue(Arrays.asList(lo)), N07.multiply(N03));
-		utils2.put(new ProductOfValue(Arrays.asList(hi)), N02.multiply(N03));
-		Map<ProductOfValue, BigDecimal> utils3 = new HashMap<>();
-		utils3.put(new ProductOfValue(Arrays.asList(lo)), N05.multiply(N05));
-		utils3.put(new ProductOfValue(Arrays.asList(hi)), N08.multiply(N05));
-		HashMap<String, PartsUtilities> partutils = new HashMap<>();
-		partutils.put(iss1, new PartsUtilities(Arrays.asList(iss1), utils1));
-		partutils.put(iss2, new PartsUtilities(Arrays.asList(iss2), utils2));
-		partutils.put(iss3, new PartsUtilities(Arrays.asList(iss3), utils3));
-
-		Map<String, ValueSet> issvalues = new HashMap<>();
-		issvalues.put(iss1, new DiscreteValueSet(lo, hi));
-		issvalues.put(iss2, new DiscreteValueSet(lo, hi));
-		issvalues.put(iss3, new DiscreteValueSet(lo, hi));
-		Domain domain1 = new Domain("test", issvalues);
-
-		SumOfGroupsUtilitySpace pas = new SumOfGroupsUtilitySpace(domain1,
-				"testspace", partutils, resBid);
-
-		SumOfGroupsUtilitySpace pasgrouped12 = pas
-				.group(Arrays.asList(iss1, iss2), "iss12");
-
-		checkEqualUtilities(pas, pasgrouped12);
-
-	}
-
-	@Test
-	public void testSerialize() throws JsonProcessingException {
-		SumOfGroupsUtilitySpace paus = makeBasic();
-		ObjectMapper jackson = new ObjectMapper();
-		String string = jackson.writeValueAsString(paus);
-		System.out.println(string);
-		assertEquals(serialized, string);
-
-	}
-
-	@Test
-	public void testDeserialize() throws IOException {
-		ObjectMapper jackson = new ObjectMapper();
-		assertEquals(makeBasic(), jackson.readValue(serialized, Profile.class));
-
-	}
-
-	/************************ PRIVATE FUNCTIONS *******************/
-
-	private void checkEqualUtilities(UtilitySpace space1, UtilitySpace space2) {
-		for (Bid bid : new MyAllBidsList(space1.getDomain())) {
-			assertEquals(space1.getUtility(bid), space2.getUtility(bid));
-		}
-	}
-
-	private SumOfGroupsUtilitySpace makeBasic() {
-		HashMap<String, PartsUtilities> partutils = new HashMap<>();
-		partutils.put("1and2", putils12);
-		partutils.put("3", putils3);
-		return new SumOfGroupsUtilitySpace(domain, "testspace", partutils,
-				resBid);
-
-	}
-
-	private void checkUtilitiesAllEqual(UtilitySpace space1,
-			UtilitySpace space2) {
-		for (Bid bid : new MyAllBidsList(space1.getDomain())) {
-			assertTrue(space1.getUtility(bid)
-					.compareTo(space2.getUtility(bid)) == 0);
-		}
-	}
-
-}
-
-/**
- * Copy of AllBidsList. We can not depend on BidSpace because that would cause a
- * cyclic dependency.
- */
-class MyAllBidsList extends AbstractImmutableList<Bid> {
-
-	private final List<String> issues;
-	private final Outer<? extends Value> allValuePermutations;
-
-	/**
-	 * A list containing all bids in the space. This is an ImmutableList so it
-	 * can contain all bids without pre-computing them.
-	 * 
-	 */
-	public MyAllBidsList(Domain domain) {
-		if (domain == null)
-			throw new IllegalArgumentException("domain=null");
-		issues = new ArrayList<>(domain.getIssues());
-
-		List<ImmutableList<Value>> values = issues.stream()
-				.map(issue -> domain.getValues(issue))
-				.collect(Collectors.toList());
-
-		allValuePermutations = new Outer<Value>(values);
-	}
-
-	@Override
-	public Bid get(BigInteger index) {
-		ImmutableList<? extends Value> nextValues = allValuePermutations
-				.get(index);
-
-		Map<String, Value> issueValues = new HashMap<>();
-		for (int n = 0; n < issues.size(); n++) {
-			issueValues.put(issues.get(n),
-					nextValues.get(BigInteger.valueOf(n)));
-		}
-		return new Bid(issueValues);
-	}
-
-	@Override
-	public BigInteger size() {
-		return allValuePermutations.size();
-	}
-
-}
