Index: domaineditor/src/main/java/geniusweb/domaineditor/ProfileEditor.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/ProfileEditor.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/ProfileEditor.java	(revision 53)
@@ -15,4 +15,6 @@
 import geniusweb.domaineditor.panels.profile.ProfileEditorPanel;
 import tudelft.utilities.logging.Reporter;
+import tudelft.utilities.mvc.model.ModelTime;
+import tudelft.utilities.mvc.model.NoModelTime;
 import tudelft.utilities.mvc.panels.PopupReporter;
 
@@ -24,4 +26,6 @@
 @SuppressWarnings("serial")
 public class ProfileEditor extends JFrame {
+	public static ModelTime TIME = new NoModelTime();
+
 	private final Reporter log;
 	private final LinearAdditiveUtilitySpaceModel model;
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/BidModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/BidModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/BidModel.java	(revision 53)
@@ -7,9 +7,11 @@
 import java.util.logging.Level;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.issuevalue.Bid;
 import geniusweb.issuevalue.DiscreteValue;
 import geniusweb.issuevalue.NumberValue;
 import geniusweb.issuevalue.Value;
-import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.listener.DefaultThrowingListenable;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.BasicModel;
@@ -18,7 +20,8 @@
 import tudelft.utilities.mvc.model.MapFromKeys;
 import tudelft.utilities.mvc.model.MapModel;
+import tudelft.utilities.mvc.model.Model;
+import tudelft.utilities.mvc.model.ModelTime;
 import tudelft.utilities.mvc.model.SelectionModel;
 import tudelft.utilities.mvc.model.StringModel;
-import tudelft.utilities.mvc.model.TypedModel;
 import tudelft.utilities.mvc.model.events.Added;
 import tudelft.utilities.mvc.model.events.Changed;
@@ -38,6 +41,6 @@
  *
  */
-public class BidModel extends DefaultListenable<Event> implements
-		MapModel<StringModel, SelectionModel<BasicModel>>, TypedModel<Bid> {
+public class BidModel extends DefaultThrowingListenable<Event>
+		implements MapModel<StringModel, SelectionModel<BasicModel>>, Model {
 	private final MapModel<StringModel, ValueSetModel> issuevalues;
 	private final Map<StringModel, SelectionModel<BasicModel>> selections = new HashMap<>();
@@ -66,17 +69,17 @@
 
 	private void add(StringModel key, ListModel value) {
-		selections.put(key, new DefaultSelectionModel(value));
+		selections.put(key, new DefaultSelectionModel(value, log, true));
 	}
 
 	/**
 	 * Domain change occured. Handle it.
+	 * 
+	 * @throws Unacceptable
 	 */
-	private void handleChange(Event e) {
+	private void handleChange(Event e) throws Unacceptable {
 		// we only handle add/remove of issues. If a value is removed,
 		// this should automatically reflect into the selectionmodel.
-		if (!(e instanceof Changed)) {
-			System.out.println("Unexpected event " + e);
-			return;
-		}
+		if (!(e instanceof Changed))
+			throw new Unacceptable("Unexpected event " + e);
 		e = e.getChildEvent();
 		if (e instanceof Removed) {
@@ -101,5 +104,4 @@
 	}
 
-	@Override
 	public void remove(StringModel key) {
 		throw new UnsupportedOperationException();
@@ -121,5 +123,4 @@
 	}
 
-	@Override
 	public Bid getCurrentValue() throws IllegalStateException {
 		Map<String, Value> selectionmap = new HashMap<>();
@@ -134,5 +135,4 @@
 	}
 
-	@Override
 	public void setCurrentValue(Bid bid) throws IllegalArgumentException {
 		ListModel<StringModel> issues = issuevalues.getKeys();
@@ -186,3 +186,8 @@
 	}
 
+	@Override
+	public ModelTime getTime() {
+		return ProfileEditor.TIME;
+	}
+
 }
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/DiscreteValueSetModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/DiscreteValueSetModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/DiscreteValueSetModel.java	(revision 53)
@@ -7,4 +7,5 @@
 import java.util.logging.Level;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.issuevalue.DiscreteValue;
 import geniusweb.issuevalue.DiscreteValueSet;
@@ -25,9 +26,10 @@
 
 	public DiscreteValueSetModel(List<StringModel> values, Reporter log) {
-		super(values, log);
+		super(values, log, ProfileEditor.TIME);
 	}
 
 	public DiscreteValueSetModel(Reporter log) {
-		super(Arrays.asList(new StringModel("value", log)), log);
+		super(Arrays.asList(new StringModel("value", log, ProfileEditor.TIME)),
+				log, ProfileEditor.TIME);
 	}
 
@@ -78,5 +80,5 @@
 		// first add the new vals because minimum size.
 		for (DiscreteValue val : valset.getValues()) {
-			add(new StringModel(val.getValue(), log));
+			add(new StringModel(val.getValue(), log, ProfileEditor.TIME));
 		}
 		for (StringModel old : oldvals) {
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/DomainModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/DomainModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/DomainModel.java	(revision 53)
@@ -16,11 +16,11 @@
 import geniusweb.issuevalue.Domain;
 import geniusweb.issuevalue.ValueSet;
-import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.listener.DefaultThrowingListenable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.DefaultMapModel;
 import tudelft.utilities.mvc.model.MapModel;
 import tudelft.utilities.mvc.model.Model;
+import tudelft.utilities.mvc.model.ModelTime;
 import tudelft.utilities.mvc.model.StringModel;
-import tudelft.utilities.mvc.model.TypedModel;
 import tudelft.utilities.mvc.model.events.Changed;
 import tudelft.utilities.mvc.model.events.Event;
@@ -33,6 +33,6 @@
  *
  */
-public class DomainModel extends DefaultListenable<Event>
-		implements TypedModel<Domain> {
+public class DomainModel extends DefaultThrowingListenable<Event>
+		implements Model { // model<Domain>
 	private static final ObjectMapper jackson = new ObjectMapper();
 	private final StringModel domainname;
@@ -57,7 +57,9 @@
 		this(new SimpleStringModel("domainname", log),
 				new DefaultMapModel<StringModel, ValueSetModel>(
-						Collections.singletonMap(new StringModel("issue", log),
+						Collections.singletonMap(
+								new StringModel("issue", log,
+										ProfileEditor.TIME),
 								new DiscreteValueSetModel(log)),
-						log) {
+						log, ProfileEditor.TIME) {
 					@Override
 					public int getMinimumSize() {
@@ -88,6 +90,7 @@
 		Domain domain = jackson.readValue(file, Domain.class);
 		// FIXME
-		return new DomainModel(new StringModel(domain.getName(), log), null,
-				log);
+		return new DomainModel(
+				new StringModel(domain.getName(), log, ProfileEditor.TIME),
+				null, log);
 	}
 
@@ -112,5 +115,4 @@
 	 * @return the {@link Domain} contained in this model.
 	 */
-	@Override
 	public Domain getCurrentValue() throws IllegalStateException {
 		Map<String, ValueSet> issues = new HashMap<>();
@@ -131,5 +133,4 @@
 	 *            {@link Model}s are created where needed.
 	 */
-	@Override
 	public void setCurrentValue(Domain dom) throws IllegalArgumentException {
 		domainname.setValue(dom.getName());
@@ -145,9 +146,15 @@
 					ValueSetModelType.fromModel(dom.getValues(iss)), log);
 			valsetmodel.setCurrentValue(dom.getValues(iss));
-			issuesmodel.put(new StringModel(iss, log), valsetmodel);
+			issuesmodel.put(new StringModel(iss, log, ProfileEditor.TIME),
+					valsetmodel);
 		}
 		// remove the old issues
 		for (StringModel iss : oldissues)
-			issuesmodel.remove(iss);
+			issuesmodel.getKeys().remove(iss);
+	}
+
+	@Override
+	public ModelTime getTime() {
+		return ProfileEditor.TIME;
 	}
 }
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/NumberValueSetModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/NumberValueSetModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/NumberValueSetModel.java	(revision 53)
@@ -5,11 +5,14 @@
 import java.util.Map;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.issuevalue.NumberValueSet;
 import geniusweb.issuevalue.ValueSet;
 import tudelft.utilities.immutablelist.Range;
-import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.listener.DefaultThrowingListenable;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.BasicModel;
 import tudelft.utilities.mvc.model.ListModel;
+import tudelft.utilities.mvc.model.ModelTime;
 import tudelft.utilities.mvc.model.NumberModel;
 import tudelft.utilities.mvc.model.events.Changed;
@@ -20,5 +23,5 @@
  *
  */
-public class NumberValueSetModel extends DefaultListenable<Event>
+public class NumberValueSetModel extends DefaultThrowingListenable<Event>
 		implements ValueSetModel {
 
@@ -27,5 +30,5 @@
 
 	public NumberValueSetModel(NumberModel lowv, NumberModel highv,
-			NumberModel stepv, Reporter log) {
+			NumberModel stepv, Reporter log) throws Unacceptable {
 		this.low = lowv;
 		this.high = highv;
@@ -41,9 +44,9 @@
 	}
 
-	private void check() throws IllegalStateException {
+	private void check() throws Unacceptable {
 		if (low.getValue().compareTo(high.getValue()) > 0)
-			throw new IllegalStateException("low must be <= high");
+			throw new Unacceptable("low must be <= high");
 		if (step.getValue().compareTo(BigDecimal.ZERO) <= 0)
-			throw new IllegalStateException("step must be >0");
+			throw new Unacceptable("step must be >0");
 		notifyListeners(new Changed(this, null));
 	}
@@ -51,9 +54,11 @@
 	/*
 	 * Default, bit arbitrary values.
+	 * 
+	 * @throws something that should never happen
 	 */
-	public NumberValueSetModel(Reporter log) {
-		this(new NumberModel(BigDecimal.ZERO, log),
-				new NumberModel(BigDecimal.TEN, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+	public NumberValueSetModel(Reporter log) throws Unacceptable {
+		this(new NumberModel(BigDecimal.ZERO, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.TEN, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 	}
 
@@ -116,4 +121,9 @@
 	}
 
+	@Override
+	public ModelTime getTime() {
+		return ProfileEditor.TIME;
+	}
+
 }
 
@@ -122,5 +132,5 @@
  *
  */
-class MyListModel extends DefaultListenable<Event>
+class MyListModel extends DefaultThrowingListenable<Event>
 		implements ListModel<NumberModel> {
 
@@ -143,5 +153,6 @@
 		BigDecimal val = numvalset.getCurrentValue().getRange().get(n);
 		if (!itemsCache.containsKey(val))
-			itemsCache.put(val, new NumberModel(val, numvalset.log));
+			itemsCache.put(val,
+					new NumberModel(val, numvalset.log, ProfileEditor.TIME));
 		return itemsCache.get(val);
 	}
@@ -168,3 +179,8 @@
 	}
 
+	@Override
+	public ModelTime getTime() {
+		return ProfileEditor.TIME;
+	}
+
 }
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/SimpleStringModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/SimpleStringModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/SimpleStringModel.java	(revision 53)
@@ -1,4 +1,6 @@
 package geniusweb.domaineditor.model;
 
+import geniusweb.domaineditor.ProfileEditor;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.StringModel;
@@ -10,11 +12,11 @@
 
 	public SimpleStringModel(String val, Reporter log) {
-		super(val, log);
+		super(val, log, ProfileEditor.TIME);
 	}
 
 	@Override
-	protected void check() throws IllegalStateException {
+	protected void check() throws Unacceptable {
 		if (!(getValue().matches("[a-zA-Z0-9]+")))
-			throw new IllegalStateException(
+			throw new Unacceptable(
 					"Only lower and upper case letters and numbers are allowed");
 		super.check();
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/ValueSetModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/ValueSetModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/ValueSetModel.java	(revision 53)
@@ -4,5 +4,5 @@
 import tudelft.utilities.mvc.model.BasicModel;
 import tudelft.utilities.mvc.model.ListModel;
-import tudelft.utilities.mvc.model.TypedModel;
+import tudelft.utilities.mvc.model.Model;
 
 /**
@@ -11,5 +11,5 @@
  *
  */
-public interface ValueSetModel extends TypedModel<ValueSet> {
+public interface ValueSetModel extends Model {
 	/**
 	 * 
@@ -25,3 +25,28 @@
 	public ListModel<? extends BasicModel> getList();
 
+	/**
+	 * 
+	 * @return the currently contained value in the model. We do NOT specify the
+	 *         type of the returned object because it would have to be a type
+	 *         parameter added to Model, which leads to all kinds of issues with
+	 *         excessive parameterization and issues when a class extends eg a
+	 *         MapModel. NOTE: also derived classes like ListModel should not
+	 *         specify that they return {@link List} or so: further subclassing
+	 *         of eg a ListModel might be eg a ValueSet which would not return a
+	 *         List again.
+	 * @throws IllegalStateException if the model is not correctly filled in at
+	 *                               this moment.
+	 */
+	public ValueSet getCurrentValue() throws IllegalStateException;
+
+	/**
+	 * Sets the current value based on the proviced obj
+	 * 
+	 * @param obj the object to load the model with. Mirror of
+	 *            {@link #getCurrentValue()} and the Object is the same type.
+	 * @throws IllegalArgumentException if the object is not the expected object
+	 *                                  type
+	 */
+	public void setCurrentValue(ValueSet obj) throws IllegalArgumentException;
+
 }
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/ValueSetModelType.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/ValueSetModelType.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/ValueSetModelType.java	(revision 53)
@@ -4,4 +4,5 @@
 import geniusweb.issuevalue.NumberValueSet;
 import geniusweb.issuevalue.ValueSet;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 
@@ -57,5 +58,9 @@
 			return new DiscreteValueSetModel(log);
 		case NUMBER:
-			return new NumberValueSetModel(log);
+			try {
+				return new NumberValueSetModel(log);
+			} catch (Unacceptable e) {
+				throw new RuntimeException(e);// shouldn't happen
+			}
 		}
 		return null; // unreachable code
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/profile/DiscreteValueSetUtilitiesModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/profile/DiscreteValueSetUtilitiesModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/profile/DiscreteValueSetUtilitiesModel.java	(revision 53)
@@ -5,12 +5,15 @@
 import java.util.Map;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.domaineditor.model.DiscreteValueSetModel;
 import geniusweb.issuevalue.DiscreteValue;
 import geniusweb.profile.utilityspace.DiscreteValueSetUtilities;
 import geniusweb.profile.utilityspace.ValueSetUtilities;
-import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.listener.DefaultThrowingListenable;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.ListModel;
 import tudelft.utilities.mvc.model.MapModel;
+import tudelft.utilities.mvc.model.ModelTime;
 import tudelft.utilities.mvc.model.NumberModel;
 import tudelft.utilities.mvc.model.RestrictedNumberModel;
@@ -26,7 +29,8 @@
  *
  */
-public class DiscreteValueSetUtilitiesModel extends DefaultListenable<Event>
-		implements MapModel<StringModel, RestrictedNumberModel>,
-		ValueSetUtilitiesModel {
+public class DiscreteValueSetUtilitiesModel
+		extends DefaultThrowingListenable<Event> implements
+		MapModel<StringModel, RestrictedNumberModel>, ValueSetUtilitiesModel {
+
 	private final ListModel<StringModel> values;
 	private final Map<StringModel, RestrictedNumberModel> utilities = new HashMap<>();
@@ -37,7 +41,7 @@
 	private final static Reporter dummylog = new PopupReporter(null);
 	private final static NumberModel LOW = new NumberModel(BigDecimal.ZERO,
-			dummylog);
+			dummylog, ProfileEditor.TIME);
 	private final static NumberModel HIGH = new NumberModel(BigDecimal.ONE,
-			dummylog);
+			dummylog, ProfileEditor.TIME);
 
 	public DiscreteValueSetUtilitiesModel(DiscreteValueSetModel values,
@@ -50,6 +54,10 @@
 	public RestrictedNumberModel getValue(StringModel key) {
 		if (!utilities.containsKey(key)) {
-			utilities.put(key,
-					new RestrictedNumberModel(DEFAULT, LOW, HIGH, log));
+			try {
+				utilities.put(key, new RestrictedNumberModel(DEFAULT, LOW, HIGH,
+						log, ProfileEditor.TIME));
+			} catch (Unacceptable e) {
+				throw new RuntimeException(e);// this should not happen
+			}
 		}
 		return utilities.get(key);
@@ -61,5 +69,4 @@
 	}
 
-	@Override
 	public void remove(StringModel key) {
 		throw new UnsupportedOperationException();
@@ -113,3 +120,8 @@
 	}
 
+	@Override
+	public ModelTime getTime() {
+		return ProfileEditor.TIME;
+	}
+
 }
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/profile/LinearAdditiveUtilitySpaceModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/profile/LinearAdditiveUtilitySpaceModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/profile/LinearAdditiveUtilitySpaceModel.java	(revision 53)
@@ -8,4 +8,5 @@
 import java.util.stream.Collectors;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.domaineditor.model.BidModel;
 import geniusweb.domaineditor.model.DiscreteValueSetModel;
@@ -16,13 +17,15 @@
 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
 import geniusweb.profile.utilityspace.ValueSetUtilities;
-import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.listener.DefaultThrowingListenable;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.ListModel;
 import tudelft.utilities.mvc.model.MapFromKeys;
 import tudelft.utilities.mvc.model.MapModel;
+import tudelft.utilities.mvc.model.Model;
+import tudelft.utilities.mvc.model.ModelTime;
 import tudelft.utilities.mvc.model.NumberModel;
 import tudelft.utilities.mvc.model.RestrictedNumberModel;
 import tudelft.utilities.mvc.model.StringModel;
-import tudelft.utilities.mvc.model.TypedModel;
 import tudelft.utilities.mvc.model.events.Event;
 import tudelft.utilities.mvc.panels.PopupReporter;
@@ -31,6 +34,6 @@
  * Model containing a {@link LinearAdditiveUtilitySpace}
  */
-public class LinearAdditiveUtilitySpaceModel extends DefaultListenable<Event>
-		implements ProfileModel, TypedModel<LinearAdditiveUtilitySpace> {
+public class LinearAdditiveUtilitySpaceModel extends
+		DefaultThrowingListenable<Event> implements ProfileModel, Model { // Model<<LinearAdditiveUtilitySpace>>
 	private final SimpleStringModel name;
 	/**
@@ -87,7 +90,7 @@
 	// we should never allow editing of these constants.
 	protected static final NumberModel CONSTANT0 = new NumberModel(
-			BigDecimal.ZERO, dummylog);
+			BigDecimal.ZERO, dummylog, ProfileEditor.TIME);
 	protected static final NumberModel CONSTANT1 = new NumberModel(
-			BigDecimal.ONE, dummylog);
+			BigDecimal.ONE, dummylog, ProfileEditor.TIME);
 
 	public LinearAdditiveUtilitySpaceModel(DomainModel domain,
@@ -108,10 +111,14 @@
 			final DomainModel domain2, final Reporter log) {
 		return new MapFromKeys<StringModel, RestrictedNumberModel>(
-				domain2.getIssues().getKeys(), log, true) {
+				domain2.getIssues().getKeys(), log, true, ProfileEditor.TIME) {
 
 			@Override
 			public RestrictedNumberModel create(StringModel key) {
-				return new RestrictedNumberModel(N05, CONSTANT0, CONSTANT1,
-						log);
+				try {
+					return new RestrictedNumberModel(N05, CONSTANT0, CONSTANT1,
+							log, ProfileEditor.TIME);
+				} catch (Unacceptable e) {
+					throw new RuntimeException(e); // shouldn't happen
+				}
 			}
 
@@ -129,5 +136,5 @@
 		// different type
 		return new MapFromKeys<StringModel, ValueSetUtilitiesModel>(
-				domain2.getIssues().getKeys(), log, false) {
+				domain2.getIssues().getKeys(), log, false, ProfileEditor.TIME) {
 			@Override
 			public ValueSetUtilitiesModel create(StringModel key) {
@@ -137,6 +144,10 @@
 							(DiscreteValueSetModel) val, log);
 				if (val instanceof NumberValueSetModel)
-					return new NumberValueSetUtilitiesModel(
-							(NumberValueSetModel) val, log);
+					try {
+						return new NumberValueSetUtilitiesModel(
+								(NumberValueSetModel) val, log);
+					} catch (Unacceptable e) {
+						throw new RuntimeException(e); // shouldn't happen
+					}
 				throw new RuntimeException(
 						"Unsupported type " + val + "for key" + key);
@@ -190,5 +201,4 @@
 	}
 
-	@Override
 	public LinearAdditiveUtilitySpace getCurrentValue()
 			throws IllegalStateException {
@@ -212,5 +222,4 @@
 	}
 
-	@Override
 	public void setCurrentValue(LinearAdditiveUtilitySpace obj)
 			throws IllegalArgumentException {
@@ -258,3 +267,8 @@
 	}
 
+	@Override
+	public ModelTime getTime() {
+		return ProfileEditor.TIME;
+	}
+
 }
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/profile/NumberValueSetUtilitiesModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/profile/NumberValueSetUtilitiesModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/profile/NumberValueSetUtilitiesModel.java	(revision 53)
@@ -3,9 +3,12 @@
 import java.math.BigDecimal;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.domaineditor.model.NumberValueSetModel;
 import geniusweb.profile.utilityspace.NumberValueSetUtilities;
 import geniusweb.profile.utilityspace.ValueSetUtilities;
-import tudelft.utilities.listener.DefaultListenable;
+import tudelft.utilities.listener.DefaultThrowingListenable;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
+import tudelft.utilities.mvc.model.ModelTime;
 import tudelft.utilities.mvc.model.NumberModel;
 import tudelft.utilities.mvc.model.RestrictedNumberModel;
@@ -17,6 +20,6 @@
  *
  */
-public class NumberValueSetUtilitiesModel extends DefaultListenable<Event>
-		implements ValueSetUtilitiesModel {
+public class NumberValueSetUtilitiesModel extends
+		DefaultThrowingListenable<Event> implements ValueSetUtilitiesModel {
 
 	private static final BigDecimal DEFAULT = new BigDecimal("0.5");
@@ -25,7 +28,7 @@
 	private final static Reporter dummylog = new PopupReporter(null);
 	private final static NumberModel LOW = new NumberModel(BigDecimal.ZERO,
-			dummylog);
+			dummylog, ProfileEditor.TIME);
 	private final static NumberModel HIGH = new NumberModel(BigDecimal.ONE,
-			dummylog);
+			dummylog, ProfileEditor.TIME);
 	private final NumberModel lowValue;
 	private final RestrictedNumberModel lowUtility;
@@ -49,10 +52,11 @@
 	}
 
-	NumberValueSetUtilitiesModel(NumberValueSetModel valuesmodel,
-			Reporter log) {
+	NumberValueSetUtilitiesModel(NumberValueSetModel valuesmodel, Reporter log)
+			throws Unacceptable {
 		this(valuesmodel.getLow(),
-				new RestrictedNumberModel(DEFAULT, LOW, HIGH, log),
-				valuesmodel.getHigh(),
-				new RestrictedNumberModel(DEFAULT, LOW, HIGH, log));
+				new RestrictedNumberModel(DEFAULT, LOW, HIGH, log,
+						ProfileEditor.TIME),
+				valuesmodel.getHigh(), new RestrictedNumberModel(DEFAULT, LOW,
+						HIGH, log, ProfileEditor.TIME));
 	}
 
@@ -95,3 +99,8 @@
 		highUtility.setValue(utils.getHighUtility());
 	}
+
+	@Override
+	public ModelTime getTime() {
+		return ProfileEditor.TIME;
+	}
 };
Index: domaineditor/src/main/java/geniusweb/domaineditor/model/profile/ValueSetUtilitiesModel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/model/profile/ValueSetUtilitiesModel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/model/profile/ValueSetUtilitiesModel.java	(revision 53)
@@ -2,5 +2,5 @@
 
 import geniusweb.profile.utilityspace.ValueSetUtilities;
-import tudelft.utilities.mvc.model.TypedModel;
+import tudelft.utilities.mvc.model.Model;
 
 /**
@@ -8,5 +8,9 @@
  *
  */
-public interface ValueSetUtilitiesModel extends TypedModel<ValueSetUtilities> {
+public interface ValueSetUtilitiesModel extends Model {
+
+	void setCurrentValue(ValueSetUtilities valueSetUtilities);
+
+	ValueSetUtilities getCurrentValue();
 
 }
Index: domaineditor/src/main/java/geniusweb/domaineditor/panels/DiscreteValueSetPanel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/panels/DiscreteValueSetPanel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/panels/DiscreteValueSetPanel.java	(revision 53)
@@ -5,4 +5,5 @@
 import javax.swing.JPanel;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.domaineditor.model.DiscreteValueSetModel;
 import tudelft.utilities.logging.Reporter;
@@ -24,7 +25,9 @@
 		setLayout(new BorderLayout());
 		add(new EditableListViewPanel(model.getList()) {
+
 			@Override
 			protected void addItem() {
-				model.add(new StringModel("value " + (n++), log));
+				model.add(new StringModel("value " + (n++), log,
+						ProfileEditor.TIME));
 
 			}
Index: domaineditor/src/main/java/geniusweb/domaineditor/panels/DomainEditorPanel.java
===================================================================
--- domaineditor/src/main/java/geniusweb/domaineditor/panels/DomainEditorPanel.java	(revision 52)
+++ domaineditor/src/main/java/geniusweb/domaineditor/panels/DomainEditorPanel.java	(revision 53)
@@ -9,8 +9,10 @@
 import javax.swing.JPanel;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.domaineditor.model.DiscreteValueSetModel;
 import geniusweb.domaineditor.model.DomainModel;
 import geniusweb.domaineditor.model.NumberValueSetModel;
 import geniusweb.domaineditor.model.ValueSetModel;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.MapModel;
@@ -39,6 +41,5 @@
 
 		add(new LabeledPanel("domain name ",
-				new StringPanel(domainmodel.getName())),
-				BorderLayout.NORTH);
+				new StringPanel(domainmodel.getName())), BorderLayout.NORTH);
 		add(new IssuesMapEditor(domainmodel.getIssues(), log),
 				BorderLayout.CENTER);
@@ -82,10 +83,15 @@
 		panel.add(combo, BorderLayout.CENTER);
 		JOptionPane.showMessageDialog(this, panel);
-		StringModel issuename = new StringModel("issue " + (n++), logger);
+		StringModel issuename = new StringModel("issue " + (n++), logger,
+				ProfileEditor.TIME);
 		ValueSetModel valuesetmodel;
 		if (combo.getSelectedItem().equals("discrete"))
 			valuesetmodel = new DiscreteValueSetModel(logger);
 		else
-			valuesetmodel = new NumberValueSetModel(logger);
+			try {
+				valuesetmodel = new NumberValueSetModel(logger);
+			} catch (Unacceptable e) {
+				throw new RuntimeException(e);// shouldn't happen
+			}
 		getModel().put(issuename, valuesetmodel);
 
Index: domaineditor/src/test/java/geniusweb/domaineditor/DomainEditorPanelTest.java
===================================================================
--- domaineditor/src/test/java/geniusweb/domaineditor/DomainEditorPanelTest.java	(revision 52)
+++ domaineditor/src/test/java/geniusweb/domaineditor/DomainEditorPanelTest.java	(revision 53)
@@ -12,5 +12,5 @@
 import geniusweb.domaineditor.model.ValueSetModel;
 import geniusweb.domaineditor.panels.DomainEditorPanel;
-import tudelft.utilities.listener.Listener;
+import tudelft.utilities.listener.ThrowingListener;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.DefaultMapModel;
@@ -28,8 +28,10 @@
 		f.setLayout(new BorderLayout());
 
-		StringModel namemodel = new StringModel("issue1", log);
+		StringModel namemodel = new StringModel("issue1", log,
+				ProfileEditor.TIME);
 		ValueSetModel valuesmmodel = new DiscreteValueSetModel(log);
 		DefaultMapModel<StringModel, ValueSetModel> issuesmodel = new DefaultMapModel<StringModel, ValueSetModel>(
-				Collections.singletonMap(namemodel, valuesmmodel), log) {
+				Collections.singletonMap(namemodel, valuesmmodel), log,
+				ProfileEditor.TIME) {
 
 			@Override
@@ -50,7 +52,8 @@
 
 		};
-		DomainModel model = new DomainModel(new StringModel("testdomain", log),
+		DomainModel model = new DomainModel(
+				new StringModel("testdomain", log, ProfileEditor.TIME),
 				issuesmodel, log);
-		model.addListener(new Listener<Event>() {
+		model.addListener(new ThrowingListener<Event>() {
 
 			@Override
Index: domaineditor/src/test/java/geniusweb/model/NumberValueSetModelTest.java
===================================================================
--- domaineditor/src/test/java/geniusweb/model/NumberValueSetModelTest.java	(revision 52)
+++ domaineditor/src/test/java/geniusweb/model/NumberValueSetModelTest.java	(revision 53)
@@ -11,8 +11,10 @@
 import org.junit.Test;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.domaineditor.model.NumberValueSetModel;
 import geniusweb.issuevalue.NumberValueSet;
 import geniusweb.issuevalue.ValueSet;
 import tudelft.utilities.immutablelist.Range;
+import tudelft.utilities.listener.Unacceptable;
 import tudelft.utilities.logging.Reporter;
 import tudelft.utilities.mvc.model.NumberModel;
@@ -22,10 +24,10 @@
 
 	@Test
-	public void smoke() {
+	public void smoke() throws Unacceptable {
 		new NumberValueSetModel(log);
 	}
 
 	@Test
-	public void testSomeGoodValues() {
+	public void testSomeGoodValues() throws Unacceptable {
 		NumberValueSetModel model = new NumberValueSetModel(log);
 		assertEquals(11, model.getList().getSize()); // default is 0...10
@@ -33,4 +35,6 @@
 		assertEquals(9, model.getList().getSize()); // 2..10
 		model.getHigh().setValue(new BigDecimal("3"));
+		assertEquals(2, model.getLow().getValue().intValue());
+		assertEquals(3, model.getHigh().getValue().intValue());
 		assertEquals(2, model.getList().getSize()); // 2..3
 		model.getStep().setValue(new BigDecimal("0.1"));
@@ -38,13 +42,14 @@
 	}
 
-	@Test(expected = IllegalStateException.class)
-	public void testIllegal1() {
-		new NumberValueSetModel(new NumberModel(BigDecimal.TEN, log),
-				new NumberModel(BigDecimal.ONE, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+	@Test(expected = Unacceptable.class)
+	public void testIllegal1() throws Unacceptable {
+		new NumberValueSetModel(
+				new NumberModel(BigDecimal.TEN, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 	}
 
 	@Test
-	public void testIllegal12() {
+	public void testIllegal12() throws Unacceptable {
 		NumberValueSetModel n = new NumberValueSetModel(log);
 		// change low above high must log problem
@@ -53,19 +58,19 @@
 	}
 
-	@Test(expected = IllegalStateException.class)
-	public void testIllegal3() {
+	@Test(expected = Unacceptable.class)
+	public void testIllegal3() throws Unacceptable {
 		NumberValueSetModel model = new NumberValueSetModel(
-				new NumberModel(BigDecimal.TEN, log),
-				new NumberModel(BigDecimal.ONE, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+				new NumberModel(BigDecimal.TEN, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 		model.getLow().setValue(BigDecimal.valueOf(20));
 	}
 
 	@Test
-	public void testLowIncrease() {
+	public void testLowIncrease() throws Unacceptable {
 		NumberValueSetModel set = new NumberValueSetModel(
-				new NumberModel(BigDecimal.ZERO, log),
-				new NumberModel(BigDecimal.TEN, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+				new NumberModel(BigDecimal.ZERO, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.TEN, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 		ValueSet v = new NumberValueSet(
 				new Range(BigDecimal.ONE, BigDecimal.TEN, BigDecimal.ONE));
@@ -75,9 +80,9 @@
 
 	@Test
-	public void testHighDecrease() {
+	public void testHighDecrease() throws Unacceptable {
 		NumberValueSetModel set = new NumberValueSetModel(
-				new NumberModel(BigDecimal.ZERO, log),
-				new NumberModel(BigDecimal.TEN, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+				new NumberModel(BigDecimal.ZERO, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.TEN, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 		ValueSet v = new NumberValueSet(
 				new Range(BigDecimal.ZERO, BigDecimal.ONE, BigDecimal.ONE));
@@ -87,9 +92,9 @@
 
 	@Test
-	public void testIncreaseBoth() {
+	public void testIncreaseBoth() throws Unacceptable {
 		NumberValueSetModel set = new NumberValueSetModel(
-				new NumberModel(BigDecimal.ZERO, log),
-				new NumberModel(BigDecimal.ONE, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+				new NumberModel(BigDecimal.ZERO, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 		ValueSet v = new NumberValueSet(
 				new Range(BigDecimal.ONE, BigDecimal.TEN, BigDecimal.ONE));
@@ -98,9 +103,9 @@
 
 	@Test
-	public void testIncreaseBothMuch() {
+	public void testIncreaseBothMuch() throws Unacceptable {
 		NumberValueSetModel set = new NumberValueSetModel(
-				new NumberModel(BigDecimal.ZERO, log),
-				new NumberModel(BigDecimal.ONE, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+				new NumberModel(BigDecimal.ZERO, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 		ValueSet v = new NumberValueSet(new Range(new BigDecimal("20"),
 				new BigDecimal("80"), BigDecimal.ONE));
@@ -109,9 +114,9 @@
 
 	@Test
-	public void testDecreaseBoth() {
+	public void testDecreaseBoth() throws Unacceptable {
 		NumberValueSetModel set = new NumberValueSetModel(
-				new NumberModel(BigDecimal.ONE, log),
-				new NumberModel(BigDecimal.TEN, log),
-				new NumberModel(BigDecimal.ONE, log), log);
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.TEN, log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 		ValueSet v = new NumberValueSet(
 				new Range(BigDecimal.ZERO, BigDecimal.ONE, BigDecimal.ONE));
@@ -120,9 +125,9 @@
 
 	@Test
-	public void testDecreaseBothMuch() {
+	public void testDecreaseBothMuch() throws Unacceptable {
 		NumberValueSetModel set = new NumberValueSetModel(
-				new NumberModel(new BigDecimal("20"), log),
-				new NumberModel(new BigDecimal("80"), log),
-				new NumberModel(BigDecimal.ONE, log), log);
+				new NumberModel(new BigDecimal("20"), log, ProfileEditor.TIME),
+				new NumberModel(new BigDecimal("80"), log, ProfileEditor.TIME),
+				new NumberModel(BigDecimal.ONE, log, ProfileEditor.TIME), log);
 		ValueSet v = new NumberValueSet(
 				new Range(BigDecimal.ZERO, BigDecimal.ONE, BigDecimal.ONE));
Index: domaineditor/src/test/java/geniusweb/panels/ComboBoxTest.java
===================================================================
--- domaineditor/src/test/java/geniusweb/panels/ComboBoxTest.java	(revision 52)
+++ domaineditor/src/test/java/geniusweb/panels/ComboBoxTest.java	(revision 53)
@@ -14,4 +14,5 @@
 import org.junit.Test;
 
+import geniusweb.domaineditor.ProfileEditor;
 import geniusweb.domaineditor.model.DiscreteValueSetModel;
 import geniusweb.domaineditor.model.DomainModel;
@@ -32,7 +33,7 @@
 	public void GuiTest() throws InterruptedException {
 
-		StringModel a = new StringModel("apples", log);
-		StringModel b = new StringModel("bears", log);
-		StringModel c = new StringModel("carrots", log);
+		StringModel a = new StringModel("apples", log, ProfileEditor.TIME);
+		StringModel b = new StringModel("bears", log, ProfileEditor.TIME);
+		StringModel c = new StringModel("carrots", log, ProfileEditor.TIME);
 
 		JFrame f = new JFrame();
@@ -40,9 +41,7 @@
 		f.getContentPane().add(panel);
 		DefaultListModel<StringModel> model = new DefaultListModel(
-				Arrays.asList(a, b, c), log) {
-
-		};
+				Arrays.asList(a, b, c), log, ProfileEditor.TIME);
 		DefaultSelectionModel<StringModel> selectionmodel1 = new DefaultSelectionModel(
-				model);
+				model, log, true);
 		panel.add(new ComboBox<StringModel>(selectionmodel1),
 				BorderLayout.NORTH);
@@ -60,17 +59,18 @@
 	public void testEqualsDeep() {
 
-		StringModel redvalue = new StringModel("red", log);
-		StringModel greenvalue = new StringModel("green", log);
+		StringModel redvalue = new StringModel("red", log, ProfileEditor.TIME);
+		StringModel greenvalue = new StringModel("green", log,
+				ProfileEditor.TIME);
 		DiscreteValueSetModel issue1values = new DiscreteValueSetModel(
 				Arrays.asList(redvalue, greenvalue), log);
 
-		StringModel issue1 = new StringModel("issue", log);
+		StringModel issue1 = new StringModel("issue", log, ProfileEditor.TIME);
 
-		SelectionModel issue1valuessel = new DefaultSelectionModel(
-				issue1values);
+		SelectionModel issue1valuessel = new DefaultSelectionModel(issue1values,
+				log, true);
 		Map<StringModel, SelectionModel> a = Collections.singletonMap(issue1,
 				issue1valuessel);
 		DefaultMapModel<StringModel, SelectionModel> issuevalues = new DefaultMapModel<StringModel, SelectionModel>(
-				a, log) {
+				a, log, ProfileEditor.TIME) {
 
 			@Override
@@ -92,5 +92,6 @@
 
 		MapModel<StringModel, ValueSetModel> issuevaluesmodel = new DefaultMapModel<StringModel, ValueSetModel>(
-				Collections.singletonMap(issue1, issue1values), log) {
+				Collections.singletonMap(issue1, issue1values), log,
+				ProfileEditor.TIME) {
 
 			@Override
@@ -110,5 +111,6 @@
 
 		};
-		DomainModel domain = new DomainModel(new StringModel("testdomain", log),
+		DomainModel domain = new DomainModel(
+				new StringModel("testdomain", log, ProfileEditor.TIME),
 				issuevaluesmodel, log);
 
