Index: profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java
===================================================================
--- profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java	(revision 53)
@@ -1,7 +1,7 @@
 package geniusweb.profile;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -10,10 +10,53 @@
 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.JsonGetter;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.KeyDeserializer;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
 import geniusweb.issuevalue.Bid;
 import geniusweb.issuevalue.Domain;
+
+/**
+ * Strange that we need to do this. Bid is completely standard. The complication
+ * that this solves is that the keys are places as STRING in the json code
+ * because json allows only strings as key.
+ */
+@SuppressWarnings("serial")
+class BidDeserializer extends KeyDeserializer {
+	private ObjectMapper jackson = new ObjectMapper();
+
+	@Override
+	public Bid deserializeKey(String key, DeserializationContext ctxt)
+			throws IOException {
+		return jackson.readValue(key, Bid.class);
+	}
+
+}
+
+/**
+ * Serializes a Bid to string. Unfortunately by default jackson uses
+ * key.toString() for serializing (rather than
+ * {@link ObjectMapper#writeValueAsString(Object)}).
+ *
+ */
+class BidSerializer extends JsonSerializer<Bid> {
+	private ObjectMapper jackson = new ObjectMapper();
+
+	@Override
+	public void serialize(Bid bid, JsonGenerator gen,
+			SerializerProvider serializers) throws IOException {
+		gen.writeFieldName(jackson.writeValueAsString(bid));
+	}
+
+}
 
 /**
@@ -26,4 +69,5 @@
  * limited anyway.
  */
+@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
 public class DefaultPartialOrdering extends DefaultProfile
 		implements PartialOrdering {
@@ -33,17 +77,14 @@
 	 * other bid.
 	 */
-	private final Map<Bid, Set<Bid>> isBetter;
+	@JsonDeserialize(keyUsing = BidDeserializer.class)
+	@JsonSerialize(keyUsing = BidSerializer.class)
+	private final Map<Bid, Set<Bid>> better;
 
 	/**
-	 * 
-	 * @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].
+	 * @param name           the name for the profile
+	 * @param domain         the {@link Domain} description
+	 * @param reservationbid the reservation {@link Bid}
+	 * @param better         a map with keys = a better bid and value=a less
+	 *                       good bid.
 	 */
 	@JsonCreator
@@ -51,27 +92,14 @@
 			@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) {
+			@JsonProperty("better") Map<Bid, Set<Bid>> better) {
 		super(name, domain, reservationbid);
-		this.isBetter = isBetterMap;
+		this.better = better;
 	}
 
 	@Override
 	public boolean isPreferredOrEqual(Bid bid1, Bid bid2) {
-		if (!isBetter.containsKey(bid1))
+		if (!better.containsKey(bid1))
 			return false;
-		return isBetter.get(bid1).contains(bid2);
+		return better.get(bid1).contains(bid2);
 	}
 
@@ -81,16 +109,14 @@
 	 *         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()) {
+		for (Bid bid : better.keySet()) {
 			bids.add(bid);
-			bids.addAll(isBetter.get(bid));
+			bids.addAll(better.get(bid));
 		}
 		return new ArrayList<Bid>(bids);
 	}
 
-	@JsonGetter
 	/**
 	 * 
@@ -103,6 +129,6 @@
 
 		for (Bid bid : bidslist) {
-			if (isBetter.containsKey(bid)) {
-				for (Bid worsebid : isBetter.get(bid)) {
+			if (better.containsKey(bid)) {
+				for (Bid worsebid : better.get(bid)) {
 					betterlist.add(Arrays.asList(bidslist.indexOf(bid),
 							bidslist.indexOf(worsebid)));
@@ -116,27 +142,6 @@
 	@Override
 	public String toString() {
-		return "DefaultPartialOrdering[" + getValuesString() + "," + isBetter
+		return "DefaultPartialOrdering[" + getValuesString() + "," + better
 				+ "]";
-	}
-
-	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;
 	}
 
@@ -145,6 +150,5 @@
 		final int prime = 31;
 		int result = super.hashCode();
-		result = prime * result
-				+ ((isBetter == null) ? 0 : isBetter.hashCode());
+		result = prime * result + ((better == null) ? 0 : better.hashCode());
 		return result;
 	}
@@ -159,8 +163,8 @@
 			return false;
 		DefaultPartialOrdering other = (DefaultPartialOrdering) obj;
-		if (isBetter == null) {
-			if (other.isBetter != null)
+		if (better == null) {
+			if (other.better != null)
 				return false;
-		} else if (!isBetter.equals(other.isBetter))
+		} else if (!better.equals(other.better))
 			return false;
 		return true;
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 53)
@@ -49,12 +49,12 @@
 	 * @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 utils   a map with key: issue names (String) and value: the values
+	 * @param issueUtilities   a map with key: issue names (String) and value: the values
 	 *                for that issue. There MUST NOT be a null issue. All values
 	 *                MUST NOT be null.
-	 * @param weights the weight of each issue in the computation of the
+	 * @param issueWeights the weight of each issue in the computation of the
 	 *                weighted sum. The issues must be the same as those in the
 	 *                utils map. All weights MUST NOT be null. The weights MUST
 	 *                sum to 1.
-	 * @param resBid  the reservation bid. Only bids that are
+	 * @param reservationBid  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
@@ -66,31 +66,26 @@
 	public LinearAdditiveUtilitySpace(@JsonProperty("domain") Domain domain,
 			@JsonProperty("name") String name,
-			@JsonProperty("issueUtilities") Map<String, ValueSetUtilities> utils,
-			@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);
+			@JsonProperty("issueUtilities") Map<String, ValueSetUtilities> issueUtilities,
+			@JsonProperty("issueWeights") Map<String, BigDecimal> issueWeights,
+			@JsonProperty("reservationBid") Bid reservationBid) {
 
 		if (domain == null) {
 			throw new NullPointerException("domain=null");
 		}
-		if (utils == null) {
+		if (issueUtilities == null) {
 			throw new NullPointerException("utils=null");
 		}
-		if (weights == null) {
+		if (issueWeights == null) {
 			throw new NullPointerException("weights=null");
 		}
-		if (utils.values().contains(null)) {
+		if (issueUtilities.values().contains(null)) {
 			throw new NullPointerException(
 					"One of the ValueSetUtilities in issueUtilitiesis null:"
-							+ utils);
-		}
-		if (weights.values().contains(null)) {
+							+ issueUtilities);
+		}
+		if (issueWeights.values().contains(null)) {
 			throw new NullPointerException("One of the weights is null");
 		}
-		if (utils.keySet().contains(null)) {
+		if (issueUtilities.keySet().contains(null)) {
 			throw new NullPointerException("One of the issue names is null");
 		}
@@ -99,14 +94,14 @@
 					"Name must be simple (a-Z, 0-9) but got " + name);
 		}
-		if (!(utils.keySet().equals(domain.getIssues()))) {
+		if (!(issueUtilities.keySet().equals(domain.getIssues()))) {
 			throw new IllegalArgumentException(
 					"The issues in  utilityspace and domain do not match: utilityspace has issues "
-							+ utils.keySet() + " but domain contains "
+							+ issueUtilities.keySet() + " but domain contains "
 							+ domain.getIssues());
 		}
-		if (!(weights.keySet().equals(domain.getIssues()))) {
+		if (!(issueWeights.keySet().equals(domain.getIssues()))) {
 			throw new IllegalArgumentException(
 					"The issues in weights and domain do not match: weights has "
-							+ weights.keySet() + " but domain contains "
+							+ issueWeights.keySet() + " but domain contains "
 							+ domain.getIssues());
 		}
@@ -118,17 +113,24 @@
 		}
 
-		BigDecimal sum = weights.values().stream().reduce(BigDecimal.ZERO,
+		BigDecimal sum = issueWeights.values().stream().reduce(BigDecimal.ZERO,
 				BigDecimal::add);
 		if (BigDecimal.ONE.compareTo(sum) != 0) { // equals does NOT work for
 													// comparing BigDecimals!!
 			throw new IllegalArgumentException("The sum of the weights ("
-					+ weights.values() + ") must be 1");
-		}
-		if (resBid != null) {
-			String message = domain.isFitting(resBid);
+					+ issueWeights.values() + ") must be 1");
+		}
+		if (reservationBid != null) {
+			String message = domain.isFitting(reservationBid);
 			if (message != null)
 				throw new IllegalArgumentException(
 						"reservationbid is not fitting domain: " + message);
 		}
+
+		this.domain = domain;
+		this.name = name;
+		this.reservationBid = reservationBid;
+		this.issueUtilities.putAll(issueUtilities);
+		this.issueWeights.putAll(issueWeights);
+
 	}
 
Index: profile/src/main/java/geniusweb/profile/utilityspace/PartsUtilities.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/PartsUtilities.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/utilityspace/PartsUtilities.java	(revision 53)
@@ -7,4 +7,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
@@ -13,6 +14,9 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 
+import geniusweb.issuevalue.Domain;
 import geniusweb.issuevalue.Value;
 import geniusweb.issuevalue.ValueSet;
+import tudelft.utilities.immutablelist.ImmutableList;
+import tudelft.utilities.immutablelist.Outer;
 
 /**
@@ -41,14 +45,15 @@
 	 * 
 	 * @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.
+	 * @param utils  with keys: list of values, one for each issue in issues (in
+	 *               the order of the list of issues) 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) {
+		if (issues == null || utils == null || issues.isEmpty()) {
 			throw new IllegalArgumentException(
-					"issues and utils must be not null");
+					"issues and utils must be not null or empty");
 		}
 
@@ -149,4 +154,25 @@
 	}
 
+	/**
+	 * Check that all needed values have been set to a utility.
+	 * 
+	 * @param domain the domain for which this should be parts. We need this to
+	 *               check that the values used are actually from the dmoain
+	 * @throws IllegalArgumentException if a problem is found
+	 */
+	public void checkComplete(Domain domain) {
+
+		final List<ImmutableList<Value>> valuesofissues = issues.stream()
+				.map(iss -> domain.getValues(iss)).collect(Collectors.toList());
+
+		// check that all possible value combinations are handled
+		for (ImmutableList<Value> vals : new Outer<Value>(valuesofissues)) {
+			ProductOfValue expected = ProductOfValue.create(vals);
+			if (!utilities.containsKey(expected))
+				throw new IllegalArgumentException(
+						"Values " + vals + " must be assigned a utility");
+		}
+	}
+
 	@Override
 	public boolean equals(Object obj) {
@@ -176,10 +202,15 @@
 	}
 
+	/**
+	 * Check that the set of utilities is complete and no weird utility values
+	 * were used
+	 * 
+	 */
 	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]");
+		for (BigDecimal value : utilities.values()) {
+			if (value == null || value.compareTo(BigDecimal.ZERO) < 0
+					|| value.compareTo(BigDecimal.ONE) > 0)
+				throw new IllegalArgumentException(
+						"part weights must all be in [0,1] but found " + value);
 		}
 	}
@@ -196,5 +227,4 @@
 
 	/**
-	 * 
 	 * @return the max utility of all values contained here.
 	 */
Index: profile/src/main/java/geniusweb/profile/utilityspace/ProductOfValue.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/ProductOfValue.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/utilityspace/ProductOfValue.java	(revision 53)
@@ -2,4 +2,5 @@
 
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 
@@ -10,7 +11,8 @@
 
 import geniusweb.issuevalue.Value;
+import tudelft.utilities.immutablelist.ImmutableList;
 
 /**
- * A {@link Value} that is the product of some existing values
+ * A {@link Value} that is a list of a number of values in the space
  */
 @JsonDeserialize(using = JsonDeserializer.None.class)
@@ -24,4 +26,12 @@
 	public ProductOfValue(List<Value> newvals) {
 		values.addAll(newvals);
+	}
+
+	public static ProductOfValue create(ImmutableList<Value> vals) {
+		List<Value> list = new LinkedList<>();
+		for (Value val : vals) {
+			list.add(val);
+		}
+		return new ProductOfValue(list);
 	}
 
Index: profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java	(revision 52)
+++ profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java	(revision 53)
@@ -3,4 +3,5 @@
 import java.math.BigDecimal;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -51,11 +52,14 @@
 	 * @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
+	 *                  a null part name. The PartsUtilities must be complete:
+	 *                  all possible combinations of all parts must cover all
+	 *                  combinations of issue values and assign a proper utility
+	 *                  in [0,1].
 	 * @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.
+	 *                  agreement. Read the note about partial bids in
+	 *                  {@link #getUtility(Bid)}.
 	 * @throws NullPointerException     if values are incorrectly null.
 	 * @throws IllegalArgumentException if preconditions not met.
@@ -69,34 +73,47 @@
 		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.
+		checkParts();
+	}
+
+	/**
+	 * Copy settings in las. This will have the exact same utilities as the
+	 * {@link LinearAdditive} space 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());
-	}
-
+	public static SumOfGroupsUtilitySpace create(LinearAdditive las) {
+		return new SumOfGroupsUtilitySpace(las.getDomain(), las.getName(),
+				las2parts(las), las.getReservationBid());
+	}
+
+	/**
+	 * 
+	 * @return all partsutilities
+	 */
+	public Map<String, PartsUtilities> getPartsUtilities() {
+		return Collections.unmodifiableMap(partUtilities);
+	}
+
+	/**
+	 * 
+	 * Note: If bid is partial for a group, the utility of that group can not be
+	 * evaluated and is set to 0.
+	 * 
+	 */
 	@Override
 	public BigDecimal getUtility(Bid bid) {
-		return partUtilities.keySet().stream()
-				.map(partname -> util(partname, bid))
-				.reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal sum = BigDecimal.ZERO;
+		for (String partname : partUtilities.keySet()) {
+			sum = sum.add(util(partname, bid));
+		}
+		return sum;
 	}
 
 	@Override
 	public String toString() {
-		return "PartialAdditive[" + partUtilities + "," + getReservationBid()
-				+ "]";
+		return "SumOfGroupsUtilitySpace[" + getName() + "," + partUtilities
+				+ "," + getReservationBid() + "]";
 	}
 
@@ -235,5 +252,5 @@
 	 * @return error string, or null if no error (all parts seem fine)
 	 */
-	private String checkParts() {
+	private void checkParts() throws IllegalArgumentException {
 
 		Set<String> collectedIssues = new HashSet<>();
@@ -241,5 +258,6 @@
 			PartsUtilities part = partUtilities.get(partname);
 			if (part == null) {
-				return "partUtilities " + partname + " contains null value";
+				throw new IllegalArgumentException(
+						"partUtilities " + partname + " contains null value");
 			}
 			List<String> issues = part.getIssues();
@@ -247,17 +265,21 @@
 			intersection.retainAll(issues);
 			if (!intersection.isEmpty()) {
-				return "issues " + intersection + " occur multiple times";
-			}
+				throw new IllegalArgumentException(
+						"issues " + intersection + " occur multiple times");
+			}
+			part.checkComplete(getDomain());
 			collectedIssues.addAll(issues);
 		}
 
 		if (!collectedIssues.equals(getDomain().getIssues())) {
-			return "parts must cover the domain issues "
-					+ getDomain().getIssues() + " but cover " + collectedIssues;
+			throw new IllegalArgumentException(
+					"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;
+			throw new IllegalArgumentException(
+					"Max utility of the space exceedds 1");
+		}
 
 	}
Index: profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java	(revision 52)
+++ profile/src/test/java/geniusweb/profile/DefaultPartialOrderingTest.java	(revision 53)
@@ -27,15 +27,17 @@
 import tudelft.utilities.junit.GeneralTests;
 
-public class DefaultPartialOrderingTest extends GeneralTests<DefaultPartialOrdering> {
+public class DefaultPartialOrderingTest
+		extends GeneralTests<DefaultPartialOrdering> {
 
-	private final String serialized = "{\"DefaultPartialOrdering\":{" + "\"name\":\"ordering1\","
+	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]]}}";
+			+ "\"better\":{\"{\\\"issuevalues\\\":{\\\"iss1\\\":\\\"1\\\"}}\":[{\"issuevalues\":{\"iss1\":\"2\"}}],\"{\\\"issuevalues\\\":{\\\"iss1\\\":\\\"3\\\"}}\":[{\"issuevalues\":{\"iss1\":\"2\"}}]},"
+			+ "\"reservationbid\":{\"issuevalues\":{\"iss1\":\"1\"}}}}";
 
 	// we need real (not mock) values otherwise serializer crashes..
 	private String issue1 = "iss1";
-	private DefaultPartialOrdering ordering1, ordering1b, ordering2, ordering3, ordering4, ordering5;
+	private DefaultPartialOrdering ordering1, ordering1b, ordering2, ordering3,
+			ordering4, ordering5;
 
 	private Bid bid1, bid2, bid3;
@@ -47,5 +49,6 @@
 		DiscreteValue val2 = new DiscreteValue("2");
 		DiscreteValue val3 = new DiscreteValue("3");
-		issues.put(issue1, new DiscreteValueSet(new HashSet<>(Arrays.asList(val1, val2, val3))));
+		issues.put(issue1, new DiscreteValueSet(
+				new HashSet<>(Arrays.asList(val1, val2, val3))));
 		Domain domain1 = new Domain("dom1", issues);
 		Domain domain2 = new Domain("dom2", issues);
@@ -62,10 +65,16 @@
 		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);
+		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);
 
 	}
@@ -73,5 +82,6 @@
 	@Override
 	public List<List<DefaultPartialOrdering>> getGeneralTestData() {
-		return Arrays.asList(Arrays.asList(ordering1, ordering1b), Arrays.asList(ordering2), Arrays.asList(ordering3),
+		return Arrays.asList(Arrays.asList(ordering1, ordering1b),
+				Arrays.asList(ordering2), Arrays.asList(ordering3),
 				Arrays.asList(ordering4), Arrays.asList(ordering5));
 	}
@@ -79,5 +89,6 @@
 	@Override
 	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("DefaultPartialOrdering.*", "DefaultPartialOrdering.*", "DefaultPartialOrdering.*",
+		return Arrays.asList("DefaultPartialOrdering.*",
+				"DefaultPartialOrdering.*", "DefaultPartialOrdering.*",
 				"DefaultPartialOrdering.*", "DefaultPartialOrdering.*");
 	}
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 53)
@@ -22,4 +22,5 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.exc.ValueInstantiationException;
 
 import geniusweb.issuevalue.Bid;
@@ -309,3 +310,18 @@
 	}
 
+	/**
+	 * This should throw because computersell-domainmismatch has a mismatch: it
+	 * has "high 32G" as graphics option, but the utilities have no value for
+	 * that. Instead it talks about "high 24G"
+	 */
+	@Test(expected = ValueInstantiationException.class)
+	public void testIsFitting() throws IOException {
+		String profile = new String(
+				Files.readAllBytes(Paths.get(
+						"src/test/resources/computersell-domainmismatch.json")),
+				StandardCharsets.UTF_8);
+		UtilitySpace space = jackson.readValue(profile, UtilitySpace.class);
+
+	}
+
 }
Index: profile/src/test/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpaceTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpaceTest.java	(revision 52)
+++ profile/src/test/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpaceTest.java	(revision 53)
@@ -21,6 +21,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 com.fasterxml.jackson.databind.exc.ValueInstantiationException;
 
 import geniusweb.issuevalue.Bid;
@@ -34,6 +37,8 @@
 import tudelft.utilities.immutablelist.ImmutableList;
 import tudelft.utilities.immutablelist.Outer;
-
-public class SumOfGroupsUtilitySpaceTest {
+import tudelft.utilities.junit.GeneralTests;
+
+public class SumOfGroupsUtilitySpaceTest
+		extends GeneralTests<SumOfGroupsUtilitySpace> {
 	private final ObjectMapper jackson = new ObjectMapper();
 	private SumOfGroupsUtilitySpace pa1;
@@ -49,6 +54,7 @@
 
 	private Domain domain;
-	private PartsUtilities putils12, putils3;
+	private PartsUtilities putils12, putils3, putils3b;
 	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\"}}}}";
+	private SumOfGroupsUtilitySpace sog1, sog1a, sog2, sog3;
 
 	@Before
@@ -78,4 +84,41 @@
 		putils3 = new PartsUtilities(Arrays.asList(iss3), utils3);
 
+		Map<ProductOfValue, BigDecimal> utils3b = new HashMap<>();
+		utils3b.put(new ProductOfValue(Arrays.asList(lo)), N07.multiply(N02));
+		utils3b.put(new ProductOfValue(Arrays.asList(hi)), N08.multiply(N02));
+		putils3b = new PartsUtilities(Arrays.asList(iss3), utils3b);
+
+		HashMap<String, PartsUtilities> partutils = new HashMap<>();
+		partutils.put("1and2", putils12);
+		partutils.put("3", putils3);
+
+		sog1 = new SumOfGroupsUtilitySpace(domain, "testspace", partutils,
+				resBid);
+		sog1a = new SumOfGroupsUtilitySpace(domain, "testspace", partutils,
+				resBid);
+		sog2 = new SumOfGroupsUtilitySpace(domain, "testspace2", partutils,
+				resBid);
+
+		// reuse partutils. Also checks that the values have been copied
+		partutils = new HashMap<>();
+		partutils.put("1and2", putils12);
+		partutils.put("3", putils3b);
+		sog3 = new SumOfGroupsUtilitySpace(domain, "testspace", partutils,
+				resBid);
+
+	}
+
+	@Override
+	public List<List<SumOfGroupsUtilitySpace>> getGeneralTestData() {
+		return Arrays.asList(Arrays.asList(sog1, sog1a), Arrays.asList(sog2),
+				Arrays.asList(sog3));
+	}
+
+	@Override
+	public List<String> getGeneralTestStrings() {
+		return Arrays.asList(
+				"SumOfGroupsUtilitySpace.*testspace.*1and2.*PartsUtilities.*issue1.*issue2.*3.*PartsUtilities.*Bid.*issue1.*high.*",
+				"SumOfGroupsUtilitySpace.*testspace2.*1and2.*PartsUtilities.*issue1.*issue2.*3.*PartsUtilities.*Bid.*issue1.*high.*",
+				"SumOfGroupsUtilitySpace.*testspace.*1and2.*PartsUtilities.*issue1.*issue2.*3.*PartsUtilities.*Bid.*issue1.*high.*");
 	}
 
@@ -161,5 +204,5 @@
 		LinearAdditiveUtilitySpace las = jackson.readValue(profile,
 				LinearAdditiveUtilitySpace.class);
-		SumOfGroupsUtilitySpace pas = new SumOfGroupsUtilitySpace(las);
+		SumOfGroupsUtilitySpace pas = SumOfGroupsUtilitySpace.create(las);
 		checkUtilitiesAllEqual(las, pas);
 		System.out.println("Generated partial profile:\n" + pas);
@@ -178,5 +221,5 @@
 		LinearAdditiveUtilitySpace las = jackson.readValue(profile,
 				LinearAdditiveUtilitySpace.class);
-		SumOfGroupsUtilitySpace pas = new SumOfGroupsUtilitySpace(las);
+		SumOfGroupsUtilitySpace pas = SumOfGroupsUtilitySpace.create(las);
 		pas = pas.group(Arrays.asList("Food", "Drinks"), "food&drinks");
 		checkUtilitiesAllEqual(las, pas);
@@ -235,4 +278,50 @@
 	}
 
+	@Test
+	public void loadComputerBuy() throws IOException {
+		UtilitySpace space = jackson.readValue(
+				getClass().getResourceAsStream("/computerbuy.json"),
+				UtilitySpace.class);
+		assertTrue(space instanceof SumOfGroupsUtilitySpace);
+
+	}
+
+	@Test
+	public void loadComputerSell() throws IOException {
+		UtilitySpace space = jackson.readValue(
+				getClass().getResourceAsStream("/computersell.json"),
+				UtilitySpace.class);
+		assertTrue(space instanceof LinearAdditiveUtilitySpace);
+
+	}
+
+	@Test(expected = ValueInstantiationException.class)
+	public void loadComputerBuyIncomplete() throws IOException {
+		UtilitySpace space = jackson.readValue(
+				getClass().getResourceAsStream("/computerbuyincomplete.json"),
+				UtilitySpace.class);
+		assertTrue(space instanceof LinearAdditiveUtilitySpace);
+
+	}
+
+	@Test
+	public void loadComputerBuyNumbers() throws IOException {
+		UtilitySpace space = jackson.readValue(
+				getClass().getResourceAsStream("/computerbuynumbers.json"),
+				UtilitySpace.class);
+		assertTrue(space instanceof SumOfGroupsUtilitySpace);
+
+	}
+
+	@Test
+	public void testComputerBuyUtility()
+			throws JsonParseException, JsonMappingException, IOException {
+		SumOfGroupsUtilitySpace space = jackson.readValue(
+				getClass().getResourceAsStream("/computerbuy.json"),
+				SumOfGroupsUtilitySpace.class);
+		Bid bid = space.getReservationBid();
+		assertEquals(new BigDecimal("0.625"), space.getUtility(bid));
+	}
+
 	/************************ PRIVATE FUNCTIONS *******************/
 
Index: profile/src/test/resources/computerbuy.json
===================================================================
--- profile/src/test/resources/computerbuy.json	(revision 53)
+++ profile/src/test/resources/computerbuy.json	(revision 53)
@@ -0,0 +1,618 @@
+{
+	"SumOfGroupsUtilitySpace": {
+		"domain": {
+			"name": "computer",
+			"issuesValues": {
+				"box": {
+					"values": [
+						"all-in-one",
+						"small box",
+						"tower"
+					]
+				},
+				"graphics": {
+					"values": [
+						"built-in",
+						"low 8G",
+						"medium 16G",
+						"high 32G"
+					]
+				},
+				"main mem": {
+					"values": [
+						"8GB",
+						"16GB",
+						"32GB",
+						"64GB"
+					]
+				},
+				"SSD": {
+					"values": [
+						"64GB",
+						"1TB",
+						"2TB",
+						"4TB",
+						"8TB"
+					]
+				},
+				"display": {
+					"values": [
+						"24-1K",
+						"27-4K",
+						"32-4K",
+						"27-4K gaming",
+						"34-4K gaming"
+					]
+				},
+				"input": {
+					"values": [
+						"standard keybd,mouse",
+						"wireless keybd,mouse",
+						"gaming keybd,mouse"
+					]
+				},
+				"price": {
+					"values": [
+						"614",
+						"663",
+						"716",
+						"773",
+						"835",
+						"902",
+						"974",
+						"1052",
+						"1136",
+						"1227",
+						"1326",
+						"1432",
+						"1546",
+						"1670",
+						"1803",
+						"1948",
+						"2104",
+						"2272",
+						"2454",
+						"2650",
+						"2862",
+						"3091",
+						"3338",
+						"3605",
+						"3893",
+						"4205",
+						"4541",
+						"4905",
+						"5297"
+					]
+				},
+				"rounding": {
+					"values": [
+						"1"
+					]
+				}
+			}
+		},
+		"name": "computerbuy",
+		"partUtilities": {
+			"boxandgraphics": {
+				"PartsUtilities": {
+					"issues": [
+						"box",
+						"graphics"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"all-in-one",
+								"built-in"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"all-in-one",
+								"low 8G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"all-in-one",
+								"medium 16G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"all-in-one",
+								"high 32G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"small box",
+								"built-in"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"small box",
+								"low 8G"
+							],
+							"util": 0.15
+						},
+						{
+							"values": [
+								"small box",
+								"medium 16G"
+							],
+							"util": 0.003
+						},
+						{
+							"values": [
+								"small box",
+								"high 32G"
+							],
+							"util": 0.003
+						},
+						{
+							"values": [
+								"tower",
+								"built-in"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"tower",
+								"low 8G"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"tower",
+								"medium 16G"
+							],
+							"util": 0.24
+						},
+						{
+							"values": [
+								"tower",
+								"high 32G"
+							],
+							"util": 0.003
+						}
+					]
+				}
+			},
+			"display": {
+				"PartsUtilities": {
+					"issues": [
+						"display"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"24-1K"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"27-4K"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"32-4K"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"27-4K gaming"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"34-4K gaming"
+							],
+							"util": 0.2
+						}
+					]
+				}
+			},
+			"input": {
+				"PartsUtilities": {
+					"issues": [
+						"input"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"standard keybd,mouse"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"wireless keybd,mouse"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"gaming keybd,mouse"
+							],
+							"util": 0.09
+						}
+					]
+				}
+			},
+			"rounding": {
+				"PartsUtilities": {
+					"issues": [
+						"rounding"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"1"
+							],
+							"util": 0.0
+						}
+					]
+				}
+			},
+			"memory": {
+				"PartsUtilities": {
+					"issues": [
+						"main mem",
+						"SSD"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"8GB",
+								"64GB"
+							],
+							"util": 0.005
+						},
+						{
+							"values": [
+								"16GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"32GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"64GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"8GB",
+								"1TB"
+							],
+							"util": 0.015
+						},
+						{
+							"values": [
+								"16GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"32GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"64GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"8GB",
+								"2TB"
+							],
+							"util": 0.03
+						},
+						{
+							"values": [
+								"16GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"32GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"64GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"8GB",
+								"4TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"16GB",
+								"4TB"
+							],
+							"util": 0.05
+						},
+						{
+							"values": [
+								"32GB",
+								"4TB"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"64GB",
+								"4TB"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"8GB",
+								"8TB"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"16GB",
+								"8TB"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"32GB",
+								"8TB"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"64GB",
+								"8TB"
+							],
+							"util": 0.10
+						}
+					]
+				}
+			},
+			"price": {
+				"PartsUtilities": {
+					"issues": [
+						"price"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"614"
+							],
+							"util": 0.3
+						},
+						{
+							"values": [
+								"663"
+							],
+							"util": 0.29
+						},
+						{
+							"values": [
+								"716"
+							],
+							"util": 0.28
+						},
+						{
+							"values": [
+								"773"
+							],
+							"util": 0.27
+						},
+						{
+							"values": [
+								"835"
+							],
+							"util": 0.26
+						},
+						{
+							"values": [
+								"902"
+							],
+							"util": 0.25
+						},
+						{
+							"values": [
+								"974"
+							],
+							"util": 0.24
+						},
+						{
+							"values": [
+								"1052"
+							],
+							"util": 0.23
+						},
+						{
+							"values": [
+								"1136"
+							],
+							"util": 0.22
+						},
+						{
+							"values": [
+								"1227"
+							],
+							"util": 0.21
+						},
+						{
+							"values": [
+								"1326"
+							],
+							"util": 0.2
+						},
+						{
+							"values": [
+								"1432"
+							],
+							"util": 0.19
+						},
+						{
+							"values": [
+								"1546"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"1670"
+							],
+							"util": 0.17
+						},
+						{
+							"values": [
+								"1803"
+							],
+							"util": 0.16
+						},
+						{
+							"values": [
+								"1948"
+							],
+							"util": 0.15
+						},
+						{
+							"values": [
+								"2104"
+							],
+							"util": 0.14
+						},
+						{
+							"values": [
+								"2272"
+							],
+							"util": 0.13
+						},
+						{
+							"values": [
+								"2454"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"2650"
+							],
+							"util": 0.11
+						},
+						{
+							"values": [
+								"2862"
+							],
+							"util": 0.1
+						},
+						{
+							"values": [
+								"3091"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"3338"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"3605"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"3893"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"4205"
+							],
+							"util": 0.05
+						},
+						{
+							"values": [
+								"4541"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"4905"
+							],
+							"util": 0.03
+						},
+						{
+							"values": [
+								"5297"
+							],
+							"util": 0.02
+						}
+					]
+				}
+			}
+		},
+		"reservationBid": {
+			"issuevalues": {
+				"box": "small box",
+				"graphics": "low 8G",
+				"main mem": "8GB",
+				"SSD": "1TB",
+				"display": "32-4K",
+				"input": "gaming keybd,mouse",
+				"price": "1432",
+				"rounding":"1"
+			}
+		}
+	}
+}
Index: profile/src/test/resources/computerbuyincomplete.json
===================================================================
--- profile/src/test/resources/computerbuyincomplete.json	(revision 53)
+++ profile/src/test/resources/computerbuyincomplete.json	(revision 53)
@@ -0,0 +1,612 @@
+{
+	"SumOfGroupsUtilitySpace": {
+		"domain": {
+			"name": "computer",
+			"issuesValues": {
+				"box": {
+					"values": [
+						"all-in-one",
+						"small box",
+						"tower"
+					]
+				},
+				"graphics": {
+					"values": [
+						"built-in",
+						"low 8G",
+						"medium 16G",
+						"high 32G"
+					]
+				},
+				"main mem": {
+					"values": [
+						"8GB",
+						"16GB",
+						"32GB",
+						"64GB"
+					]
+				},
+				"SSD": {
+					"values": [
+						"64GB",
+						"1TB",
+						"2TB",
+						"4TB",
+						"8TB"
+					]
+				},
+				"display": {
+					"values": [
+						"24-1K",
+						"27-4K",
+						"32-4K",
+						"27-4K gaming",
+						"34-4K gaming"
+					]
+				},
+				"input": {
+					"values": [
+						"standard keybd,mouse",
+						"wireless keybd,mouse",
+						"gaming keybd,mouse"
+					]
+				},
+				"price": {
+					"values": [
+						"614",
+						"663",
+						"716",
+						"773",
+						"835",
+						"902",
+						"974",
+						"1052",
+						"1136",
+						"1227",
+						"1326",
+						"1432",
+						"1546",
+						"1670",
+						"1803",
+						"1948",
+						"2104",
+						"2272",
+						"2454",
+						"2650",
+						"2862",
+						"3091",
+						"3338",
+						"3605",
+						"3893",
+						"4205",
+						"4541",
+						"4905",
+						"5297"
+					]
+				},
+				"rounding": {
+					"values": [
+						"1"
+					]
+				}
+			}
+		},
+		"name": "computerbuy",
+		"partUtilities": {
+			"boxandgraphics": {
+				"PartsUtilities": {
+					"issues": [
+						"box",
+						"graphics"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"all-in-one",
+								"built-in"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"all-in-one",
+								"low 8G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"all-in-one",
+								"medium 16G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"all-in-one",
+								"high 32G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"small box",
+								"built-in"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"small box",
+								"low 8G"
+							],
+							"util": 0.15
+						},
+						{
+							"values": [
+								"small box",
+								"medium 16G"
+							],
+							"util": 0.003
+						},
+						{
+							"values": [
+								"small box",
+								"high 32G"
+							],
+							"util": 0.003
+						},
+						
+						{
+							"values": [
+								"tower",
+								"low 8G"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"tower",
+								"medium 16G"
+							],
+							"util": 0.24
+						},
+						{
+							"values": [
+								"tower",
+								"high 32G"
+							],
+							"util": 0.003
+						}
+					]
+				}
+			},
+			"display": {
+				"PartsUtilities": {
+					"issues": [
+						"display"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"24-1K"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"27-4K"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"32-4K"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"27-4K gaming"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"34-4K gaming"
+							],
+							"util": 0.2
+						}
+					]
+				}
+			},
+			"input": {
+				"PartsUtilities": {
+					"issues": [
+						"input"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"standard keybd,mouse"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"wireless keybd,mouse"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"gaming keybd,mouse"
+							],
+							"util": 0.09
+						}
+					]
+				}
+			},
+			"rounding": {
+				"PartsUtilities": {
+					"issues": [
+						"rounding"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"1"
+							],
+							"util": 0.0
+						}
+					]
+				}
+			},
+			"memory": {
+				"PartsUtilities": {
+					"issues": [
+						"main mem",
+						"SSD"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"8GB",
+								"64GB"
+							],
+							"util": 0.005
+						},
+						{
+							"values": [
+								"16GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"32GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"64GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"8GB",
+								"1TB"
+							],
+							"util": 0.015
+						},
+						{
+							"values": [
+								"16GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"32GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"64GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"8GB",
+								"2TB"
+							],
+							"util": 0.03
+						},
+						{
+							"values": [
+								"16GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"32GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"64GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"8GB",
+								"4TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"16GB",
+								"4TB"
+							],
+							"util": 0.05
+						},
+						{
+							"values": [
+								"32GB",
+								"4TB"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"64GB",
+								"4TB"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"8GB",
+								"8TB"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"16GB",
+								"8TB"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"32GB",
+								"8TB"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"64GB",
+								"8TB"
+							],
+							"util": 0.10
+						}
+					]
+				}
+			},
+			"price": {
+				"PartsUtilities": {
+					"issues": [
+						"price"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"614"
+							],
+							"util": 0.3
+						},
+						{
+							"values": [
+								"663"
+							],
+							"util": 0.29
+						},
+						{
+							"values": [
+								"716"
+							],
+							"util": 0.28
+						},
+						{
+							"values": [
+								"773"
+							],
+							"util": 0.27
+						},
+						{
+							"values": [
+								"835"
+							],
+							"util": 0.26
+						},
+						{
+							"values": [
+								"902"
+							],
+							"util": 0.25
+						},
+						{
+							"values": [
+								"974"
+							],
+							"util": 0.24
+						},
+						{
+							"values": [
+								"1052"
+							],
+							"util": 0.23
+						},
+						{
+							"values": [
+								"1136"
+							],
+							"util": 0.22
+						},
+						{
+							"values": [
+								"1227"
+							],
+							"util": 0.21
+						},
+						{
+							"values": [
+								"1326"
+							],
+							"util": 0.2
+						},
+						{
+							"values": [
+								"1432"
+							],
+							"util": 0.19
+						},
+						{
+							"values": [
+								"1546"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"1670"
+							],
+							"util": 0.17
+						},
+						{
+							"values": [
+								"1803"
+							],
+							"util": 0.16
+						},
+						{
+							"values": [
+								"1948"
+							],
+							"util": 0.15
+						},
+						{
+							"values": [
+								"2104"
+							],
+							"util": 0.14
+						},
+						{
+							"values": [
+								"2272"
+							],
+							"util": 0.13
+						},
+						{
+							"values": [
+								"2454"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"2650"
+							],
+							"util": 0.11
+						},
+						{
+							"values": [
+								"2862"
+							],
+							"util": 0.1
+						},
+						{
+							"values": [
+								"3091"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"3338"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"3605"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"3893"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"4205"
+							],
+							"util": 0.05
+						},
+						{
+							"values": [
+								"4541"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"4905"
+							],
+							"util": 0.03
+						},
+						{
+							"values": [
+								"5297"
+							],
+							"util": 0.02
+						}
+					]
+				}
+			}
+		},
+		"reservationbid": {
+			"issuevalues": {
+				"box": "small box",
+				"graphics": "low 8GB",
+				"main mem": "8GB",
+				"SSD": "1TB",
+				"display": "32-4K",
+				"input": "gamin keybd,mouse",
+				"price": "1432",
+				"rounding":"1"
+			}
+		}
+	}
+}
Index: profile/src/test/resources/computerbuynumbers.json
===================================================================
--- profile/src/test/resources/computerbuynumbers.json	(revision 53)
+++ profile/src/test/resources/computerbuynumbers.json	(revision 53)
@@ -0,0 +1,508 @@
+{
+	"SumOfGroupsUtilitySpace": {
+		"domain": {
+			"name": "computer",
+			"issuesValues": {
+				"box": {
+					"values": [
+						"all-in-one",
+						"small box",
+						"tower"
+					]
+				},
+				"graphics": {
+					"values": [
+						"built-in",
+						"low 8G",
+						"medium 16G",
+						"high 32G"
+					]
+				},
+				"main mem": {
+					"values": [
+						"8GB",
+						"16GB",
+						"32GB",
+						"64GB"
+					]
+				},
+				"SSD": {
+					"values": [
+						"64GB",
+						"1TB",
+						"2TB",
+						"4TB",
+						"8TB"
+					]
+				},
+				"display": {
+					"values": [
+						"24-1K",
+						"27-4K",
+						"32-4K",
+						"27-4K gaming",
+						"34-4K gaming"
+					]
+				},
+				"input": {
+					"values": [
+						"standard keybd,mouse",
+						"wireless keybd,mouse",
+						"gaming keybd,mouse"
+					]
+				},
+				"price": {
+					"range": {
+						"low": 600,
+						"high": 2000,
+						"step": 100
+					}
+				},
+				"rounding": {
+					"values": [
+						"1"
+					]
+				}
+			}
+		},
+		"name": "computerbuy",
+		"partUtilities": {
+			"boxandgraphics": {
+				"PartsUtilities": {
+					"issues": [
+						"box",
+						"graphics"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"all-in-one",
+								"built-in"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"all-in-one",
+								"low 8G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"all-in-one",
+								"medium 16G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"all-in-one",
+								"high 32G"
+							],
+							"util": 0
+						},
+						{
+							"values": [
+								"small box",
+								"built-in"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"small box",
+								"low 8G"
+							],
+							"util": 0.15
+						},
+						{
+							"values": [
+								"small box",
+								"medium 16G"
+							],
+							"util": 0.003
+						},
+						{
+							"values": [
+								"small box",
+								"high 32G"
+							],
+							"util": 0.003
+						},
+						{
+							"values": [
+								"tower",
+								"built-in"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"tower",
+								"low 8G"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"tower",
+								"medium 16G"
+							],
+							"util": 0.24
+						},
+						{
+							"values": [
+								"tower",
+								"high 32G"
+							],
+							"util": 0.003
+						}
+					]
+				}
+			},
+			"display": {
+				"PartsUtilities": {
+					"issues": [
+						"display"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"24-1K"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"27-4K"
+							],
+							"util": 0.12
+						},
+						{
+							"values": [
+								"32-4K"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"27-4K gaming"
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								"34-4K gaming"
+							],
+							"util": 0.2
+						}
+					]
+				}
+			},
+			"input": {
+				"PartsUtilities": {
+					"issues": [
+						"input"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"standard keybd,mouse"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"wireless keybd,mouse"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"gaming keybd,mouse"
+							],
+							"util": 0.09
+						}
+					]
+				}
+			},
+			"rounding": {
+				"PartsUtilities": {
+					"issues": [
+						"rounding"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"1"
+							],
+							"util": 0.0
+						}
+					]
+				}
+			},
+			"memory": {
+				"PartsUtilities": {
+					"issues": [
+						"main mem",
+						"SSD"
+					],
+					"utilslist": [
+						{
+							"values": [
+								"8GB",
+								"64GB"
+							],
+							"util": 0.005
+						},
+						{
+							"values": [
+								"16GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"32GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"64GB",
+								"64GB"
+							],
+							"util": 0.01
+						},
+						{
+							"values": [
+								"8GB",
+								"1TB"
+							],
+							"util": 0.015
+						},
+						{
+							"values": [
+								"16GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"32GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"64GB",
+								"1TB"
+							],
+							"util": 0.02
+						},
+						{
+							"values": [
+								"8GB",
+								"2TB"
+							],
+							"util": 0.03
+						},
+						{
+							"values": [
+								"16GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"32GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"64GB",
+								"2TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"8GB",
+								"4TB"
+							],
+							"util": 0.04
+						},
+						{
+							"values": [
+								"16GB",
+								"4TB"
+							],
+							"util": 0.05
+						},
+						{
+							"values": [
+								"32GB",
+								"4TB"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"64GB",
+								"4TB"
+							],
+							"util": 0.09
+						},
+						{
+							"values": [
+								"8GB",
+								"8TB"
+							],
+							"util": 0.06
+						},
+						{
+							"values": [
+								"16GB",
+								"8TB"
+							],
+							"util": 0.07
+						},
+						{
+							"values": [
+								"32GB",
+								"8TB"
+							],
+							"util": 0.08
+						},
+						{
+							"values": [
+								"64GB",
+								"8TB"
+							],
+							"util": 0.10
+						}
+					]
+				}
+			},
+			"price": {
+				"PartsUtilities": {
+					"issues": [
+						"price"
+					],
+					"utilslist": [
+						{
+							"values": [
+								600
+							],
+							"util": 0.3
+						},
+						{
+							"values": [
+								700
+							],
+							"util": 0.29
+						},
+						{
+							"values": [
+								800
+							],
+							"util": 0.28
+						},
+						{
+							"values": [
+								900
+							],
+							"util": 0.27
+						},
+						{
+							"values": [
+								1000
+							],
+							"util": 0.26
+						},
+						{
+							"values": [
+								1100
+							],
+							"util": 0.25
+						},
+						{
+							"values": [
+								1200
+							],
+							"util": 0.24
+						},
+						{
+							"values": [
+								1300
+							],
+							"util": 0.23
+						},
+						{
+							"values": [
+								1400
+							],
+							"util": 0.22
+						},
+						{
+							"values": [
+								1500
+							],
+							"util": 0.21
+						},
+						{
+							"values": [
+								1600
+							],
+							"util": 0.2
+						},
+						{
+							"values": [
+								1700
+							],
+							"util": 0.19
+						},
+						{
+							"values": [
+								1800
+							],
+							"util": 0.18
+						},
+						{
+							"values": [
+								1900
+							],
+							"util": 0.17
+						},
+						{
+							"values": [
+								2000
+							],
+							"util": 0.16
+						}
+					]
+				}
+			}
+		},
+		"reservationBid": {
+			"issuevalues": {
+				"box": "small box",
+				"graphics": "low 8G",
+				"main mem": "8GB",
+				"SSD": "1TB",
+				"display": "32-4K",
+				"input": "gaming keybd,mouse",
+				"price": 1400,
+				"rounding": "1"
+			}
+		}
+	}
+}
Index: profile/src/test/resources/computersell-domainmismatch.json
===================================================================
--- profile/src/test/resources/computersell-domainmismatch.json	(revision 53)
+++ profile/src/test/resources/computersell-domainmismatch.json	(revision 53)
@@ -0,0 +1,222 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"issueUtilities": {
+			"box": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"all-in-one": 0.899045,
+						"small box": 0.83017,
+						"tower": 0.758464
+					}
+				}
+			},
+			"graphics": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"built-in": 1.0,
+						"low 8G": 0.90565,
+						"medium 12G": 0.8113,
+						"high 24G": 0.58486
+					}
+				}
+			},
+			"main mem": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"8GB": 0.995471,
+						"16GB": 0.988678,
+						"32GB": 0.979243,
+						"64GB": 0.958486
+					}
+				}
+			},
+			"SSD": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"64GB": 0.998113,
+						"1TB": 0.979243,
+						"2TB": 0.961128,
+						"4TB": 0.92452,
+						"8TB": 0.885837
+					}
+				}
+			},
+			"display": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"24-1K": 0.993395,
+						"27-4K": 0.909424,
+						"32-4K": 0.92169,
+						"27-4K gaming": 0.882063,
+						"34-4K gaming": 0.901876
+					}
+				}
+			},
+			"input": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"standard keybd,mouse": 0.998113,
+						"wireless keybd,mouse": 0.992452,
+						"gaming keybd,mouse": 0.967921
+					}
+				}
+			},
+			"rounding": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"1": 0
+					}
+				}
+			},
+			"price": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"614": 0.115862,
+						"663": 0.125108,
+						"716": 0.135109,
+						"773": 0.145865,
+						"835": 0.157565,
+						"902": 0.170207,
+						"974": 0.183794,
+						"1052": 0.198512,
+						"1136": 0.214363,
+						"1227": 0.231535,
+						"1326": 0.250216,
+						"1432": 0.270218,
+						"1546": 0.29173,
+						"1670": 0.315129,
+						"1803": 0.340226,
+						"1948": 0.367588,
+						"2104": 0.397025,
+						"2272": 0.428726,
+						"2454": 0.46307,
+						"2650": 0.500055,
+						"2862": 0.540059,
+						"3091": 0.583272,
+						"3338": 0.629881,
+						"3605": 0.680264,
+						"3893": 0.734609,
+						"4205": 0.793484,
+						"4541": 0.856887,
+						"4905": 0.925574,
+						"5297": 0.999544
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"box": 0.142857,
+			"graphics": 0.142857,
+			"main mem": 0.142857,
+			"SSD": 0.142857,
+			"display": 0.142857,
+			"input": 0.142857,
+			"price": 0.142857,
+			"rounding": 0.000001
+		},
+		"domain": {
+			"name": "computer",
+			"issuesValues": {
+				"box": {
+					"values": [
+						"all-in-one",
+						"small box",
+						"tower"
+					]
+				},
+				"graphics": {
+					"values": [
+						"built-in",
+						"low 8G",
+						"medium 16G",
+						"high 32G"
+					]
+				},
+				"main mem": {
+					"values": [
+						"8GB",
+						"16GB",
+						"32GB",
+						"64GB"
+					]
+				},
+				"SSD": {
+					"values": [
+						"64GB",
+						"1TB",
+						"2TB",
+						"4TB",
+						"8TB"
+					]
+				},
+				"display": {
+					"values": [
+						"24-1K",
+						"27-4K",
+						"32-4K",
+						"27-4K gaming",
+						"34-4K gaming"
+					]
+				},
+				"input": {
+					"values": [
+						"standard keybd,mouse",
+						"wireless keybd,mouse",
+						"gaming keybd,mouse"
+					]
+				},
+				"price": {
+					"values": [
+						"614",
+						"663",
+						"716",
+						"773",
+						"835",
+						"902",
+						"974",
+						"1052",
+						"1136",
+						"1227",
+						"1326",
+						"1432",
+						"1546",
+						"1670",
+						"1803",
+						"1948",
+						"2104",
+						"2272",
+						"2454",
+						"2650",
+						"2862",
+						"3091",
+						"3338",
+						"3605",
+						"3893",
+						"4205",
+						"4541",
+						"4905",
+						"5297"
+					]
+				},
+				"rounding": {
+					"values": [
+						"1"
+					]
+				}
+			}
+		},
+		"name": "computersell",
+		"reservationBid": {
+			"issuevalues": {
+				"box": "all-in-one",
+				"graphics": "built-in",
+				"main mem": "8GB",
+				"SSD": "64GB",
+				"display": "24-1K",
+				"input": "standard keybd,mouse",
+				"price": "614",
+				"rounding": "1"
+			}
+		}
+	}
+}
Index: profile/src/test/resources/computersell.json
===================================================================
--- profile/src/test/resources/computersell.json	(revision 53)
+++ profile/src/test/resources/computersell.json	(revision 53)
@@ -0,0 +1,222 @@
+{
+	"LinearAdditiveUtilitySpace": {
+		"issueUtilities": {
+			"box": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"all-in-one": 0.899045,
+						"small box": 0.83017,
+						"tower": 0.758464
+					}
+				}
+			},
+			"graphics": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"built-in": 1.0,
+						"low 8G": 0.90565,
+						"medium 16G": 0.8113,
+						"high 32G": 0.58486
+					}
+				}
+			},
+			"main mem": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"8GB": 0.995471,
+						"16GB": 0.988678,
+						"32GB": 0.979243,
+						"64GB": 0.958486
+					}
+				}
+			},
+			"SSD": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"64GB": 0.998113,
+						"1TB": 0.979243,
+						"2TB": 0.961128,
+						"4TB": 0.92452,
+						"8TB": 0.885837
+					}
+				}
+			},
+			"display": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"24-1K": 0.993395,
+						"27-4K": 0.909424,
+						"32-4K": 0.92169,
+						"27-4K gaming": 0.882063,
+						"34-4K gaming": 0.901876
+					}
+				}
+			},
+			"input": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"standard keybd,mouse": 0.998113,
+						"wireless keybd,mouse": 0.992452,
+						"gaming keybd,mouse": 0.967921
+					}
+				}
+			},
+			"rounding": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"1": 0
+					}
+				}
+			},
+			"price": {
+				"DiscreteValueSetUtilities": {
+					"valueUtilities": {
+						"614": 0.115862,
+						"663": 0.125108,
+						"716": 0.135109,
+						"773": 0.145865,
+						"835": 0.157565,
+						"902": 0.170207,
+						"974": 0.183794,
+						"1052": 0.198512,
+						"1136": 0.214363,
+						"1227": 0.231535,
+						"1326": 0.250216,
+						"1432": 0.270218,
+						"1546": 0.29173,
+						"1670": 0.315129,
+						"1803": 0.340226,
+						"1948": 0.367588,
+						"2104": 0.397025,
+						"2272": 0.428726,
+						"2454": 0.46307,
+						"2650": 0.500055,
+						"2862": 0.540059,
+						"3091": 0.583272,
+						"3338": 0.629881,
+						"3605": 0.680264,
+						"3893": 0.734609,
+						"4205": 0.793484,
+						"4541": 0.856887,
+						"4905": 0.925574,
+						"5297": 0.999544
+					}
+				}
+			}
+		},
+		"issueWeights": {
+			"box": 0.142857,
+			"graphics": 0.142857,
+			"main mem": 0.142857,
+			"SSD": 0.142857,
+			"display": 0.142857,
+			"input": 0.142857,
+			"price": 0.142857,
+			"rounding": 0.000001
+		},
+		"domain": {
+			"name": "computer",
+			"issuesValues": {
+				"box": {
+					"values": [
+						"all-in-one",
+						"small box",
+						"tower"
+					]
+				},
+				"graphics": {
+					"values": [
+						"built-in",
+						"low 8G",
+						"medium 16G",
+						"high 32G"
+					]
+				},
+				"main mem": {
+					"values": [
+						"8GB",
+						"16GB",
+						"32GB",
+						"64GB"
+					]
+				},
+				"SSD": {
+					"values": [
+						"64GB",
+						"1TB",
+						"2TB",
+						"4TB",
+						"8TB"
+					]
+				},
+				"display": {
+					"values": [
+						"24-1K",
+						"27-4K",
+						"32-4K",
+						"27-4K gaming",
+						"34-4K gaming"
+					]
+				},
+				"input": {
+					"values": [
+						"standard keybd,mouse",
+						"wireless keybd,mouse",
+						"gaming keybd,mouse"
+					]
+				},
+				"price": {
+					"values": [
+						"614",
+						"663",
+						"716",
+						"773",
+						"835",
+						"902",
+						"974",
+						"1052",
+						"1136",
+						"1227",
+						"1326",
+						"1432",
+						"1546",
+						"1670",
+						"1803",
+						"1948",
+						"2104",
+						"2272",
+						"2454",
+						"2650",
+						"2862",
+						"3091",
+						"3338",
+						"3605",
+						"3893",
+						"4205",
+						"4541",
+						"4905",
+						"5297"
+					]
+				},
+				"rounding": {
+					"values": [
+						"1"
+					]
+				}
+			}
+		},
+		"name": "computersell",
+		"reservationBid": {
+			"issuevalues": {
+				"box": "all-in-one",
+				"graphics": "built-in",
+				"main mem": "8GB",
+				"SSD": "64GB",
+				"display": "24-1K",
+				"input": "standard keybd,mouse",
+				"price": "614",
+				"rounding": "1"
+			}
+		}
+	}
+}
