Index: profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java
===================================================================
--- profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java	(revision 9)
+++ profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java	(revision 10)
@@ -26,5 +26,6 @@
  * limited anyway.
  */
-public class DefaultPartialOrdering extends DefaultProfile implements PartialOrdering {
+public class DefaultPartialOrdering extends DefaultProfile
+		implements PartialOrdering {
 
 	/**
@@ -40,10 +41,13 @@
 	 * @param reservationbid
 	 * @param bids
-	 * @param isbetterList   a list of tuples [bid1index, bid2index]. It indicates
-	 *                       that bids[bid1index] isbetterthan bids[bid2index].
+	 * @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,
+	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));
@@ -54,8 +58,9 @@
 	 * @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.
+	 * @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) {
+	public DefaultPartialOrdering(String name, Domain domain,
+			Bid reservationbid, Map<Bid, Set<Bid>> isBetterMap) {
 		super(name, domain, reservationbid);
 		this.isBetter = isBetterMap;
@@ -71,5 +76,6 @@
 	/**
 	 * 
-	 * @return a list with all the bids
+	 * @return a list with all the bids that are referred to, either as better
+	 *         or as worse than another bid
 	 */
 	@JsonGetter
@@ -97,5 +103,6 @@
 			if (isBetter.containsKey(bid)) {
 				for (Bid worsebid : isBetter.get(bid)) {
-					betterlist.add(Arrays.asList(bidslist.indexOf(bid), bidslist.indexOf(worsebid)));
+					betterlist.add(Arrays.asList(bidslist.indexOf(bid),
+							bidslist.indexOf(worsebid)));
 				}
 			}
@@ -107,13 +114,16 @@
 	@Override
 	public String toString() {
-		return "DefaultPartialOrdering[" + getValuesString() + "," + isBetter + "]";
+		return "DefaultPartialOrdering[" + getValuesString() + "," + isBetter
+				+ "]";
 	}
 
-	private static Map<Bid, Set<Bid>> makeBidMap(List<Bid> bids, List<List<Integer>> isBetterList) {
+	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);
+				throw new IllegalArgumentException("Expected tuple but found "
+						+ tuple + "in " + isBetterList);
 			}
 			Bid betterbid = bids.get(tuple.get(0));
@@ -133,5 +143,6 @@
 		final int prime = 31;
 		int result = super.hashCode();
-		result = prime * result + ((isBetter == null) ? 0 : isBetter.hashCode());
+		result = prime * result
+				+ ((isBetter == null) ? 0 : isBetter.hashCode());
 		return result;
 	}
Index: profile/src/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java	(revision 9)
+++ profile/src/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java	(revision 10)
@@ -2,4 +2,5 @@
 
 import java.math.BigDecimal;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -68,4 +69,11 @@
 	}
 
+	/**
+	 * @return copy of the value-utility pair map.
+	 */
+	public Map<DiscreteValue, BigDecimal> getUtilities() {
+		return Collections.unmodifiableMap(valueUtilities);
+	}
+
 	@Override
 	public String isFitting(ValueSet valueset) {
Index: profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditive.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditive.java	(revision 10)
+++ profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditive.java	(revision 10)
@@ -0,0 +1,29 @@
+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
+	 * @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 9)
+++ profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditiveUtilitySpace.java	(revision 10)
@@ -25,5 +25,5 @@
  */
 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
-public class LinearAdditiveUtilitySpace implements UtilitySpace {
+public class LinearAdditiveUtilitySpace implements LinearAdditive {
 
 	private final String name;
@@ -131,16 +131,5 @@
 	}
 
-	/**
-	 * 
-	 * @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));
-	}
-
+	@Override
 	public BigDecimal getWeight(String issue) {
 		return issueWeights.get(issue);
@@ -220,18 +209,25 @@
 	}
 
-	/**
-	 * @return the map from issue names to valuesetutilities (un-weighted)
-	 */
+	@Override
 	public Map<String, ValueSetUtilities> getUtilities() {
 		return Collections.unmodifiableMap(issueUtilities);
 	}
 
-	/**
-	 * 
-	 * @return the map from issue names to weights. weights sum to 1.
-	 */
+	@Override
 	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/SumOfGroupsUtilitySpace.java
===================================================================
--- profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java	(revision 9)
+++ profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java	(revision 10)
@@ -84,8 +84,8 @@
 	 * grouping.
 	 * 
-	 * @param las the {@link LinearAdditiveUtilitySpace} to be converted/copied.
-	 * 
-	 */
-	public SumOfGroupsUtilitySpace(LinearAdditiveUtilitySpace las) {
+	 * @param las the {@link LinearAdditive} to be converted/copied.
+	 * 
+	 */
+	public SumOfGroupsUtilitySpace(LinearAdditive las) {
 		this(las.getDomain(), las.getName(), las2parts(las),
 				las.getReservationBid());
@@ -212,10 +212,10 @@
 	/**
 	 * 
-	 * @param las a {@link LinearAdditiveUtilitySpace}
+	 * @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(
-			LinearAdditiveUtilitySpace las) {
+			LinearAdditive las) {
 
 		HashMap<String, PartsUtilities> map = new HashMap<>();
Index: profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java
===================================================================
--- profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java	(revision 9)
+++ profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java	(revision 10)
@@ -3,4 +3,5 @@
 import static org.junit.Assert.assertEquals;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.Arrays;
@@ -8,4 +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;
@@ -35,4 +41,7 @@
 			lowval1, low1util, highvalb, highutil);
 	private static final BigDecimal ZERO_1 = new BigDecimal("0.1");
+	private final String utilstring = "{\"numberutils\":{\"lowValue\":12.5,\"lowUtility\":0.5,\"highValue\":18.5,\"highUtility\":0.9}}";
+
+	private static final ObjectMapper jackson = new ObjectMapper();
 
 	@Override
@@ -173,3 +182,20 @@
 	}
 
+	@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);
+
+	}
+
 }
