Index: timeline/src/main/java/geniusweb/deadline/DeadlineRounds.java
===================================================================
--- timeline/src/main/java/geniusweb/deadline/DeadlineRounds.java	(revision 52)
+++ timeline/src/main/java/geniusweb/deadline/DeadlineRounds.java	(revision 1)
@@ -3,4 +3,5 @@
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
 
 /**
@@ -10,4 +11,5 @@
  * the protocol.
  */
+@JsonTypeName("deadlinerounds")
 public class DeadlineRounds extends DeadlineTime {
 	private final Integer rounds;
Index: timeline/src/main/java/geniusweb/deadline/DeadlineTime.java
===================================================================
--- timeline/src/main/java/geniusweb/deadline/DeadlineTime.java	(revision 52)
+++ timeline/src/main/java/geniusweb/deadline/DeadlineTime.java	(revision 1)
@@ -3,8 +3,10 @@
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
 
 /**
  * How long a session will be allowed to run
  */
+@JsonTypeName("deadlinetime")
 public class DeadlineTime implements Deadline {
 
Index: timeline/src/main/java/geniusweb/progress/Progress.java
===================================================================
--- timeline/src/main/java/geniusweb/progress/Progress.java	(revision 52)
+++ timeline/src/main/java/geniusweb/progress/Progress.java	(revision 1)
@@ -34,5 +34,5 @@
 	 *         eye on {@link #getTerminationTime()}.
 	 */
-	Double get(Long currentTimeMs);
+	Double get(long currentTimeMs);
 
 	/**
@@ -51,4 +51,4 @@
 	 * @return true iff the progress has passed the deadline.
 	 */
-	boolean isPastDeadline(Long currentTimeMs);
+	boolean isPastDeadline(long currentTimeMs);
 }
Index: timeline/src/main/java/geniusweb/progress/ProgressRounds.java
===================================================================
--- timeline/src/main/java/geniusweb/progress/ProgressRounds.java	(revision 52)
+++ timeline/src/main/java/geniusweb/progress/ProgressRounds.java	(revision 1)
@@ -5,9 +5,11 @@
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
 
 /**
  * progress in terms of number of rounds. The round has to be updated by the
- * user of this class, calling {@link #advance()}. immutable.
+ * user of this class, calling {@link #advance()}.
  */
+@JsonTypeName("rounds")
 public class ProgressRounds implements Progress {
 
@@ -45,28 +47,6 @@
 	}
 
-	/**
-	 * 
-	 * @return the current round. First round is 0. It is recommended that you
-	 *         use the functions in {@link Progress} instead of this, to ensure
-	 *         your code works with all implementations of Progress including
-	 *         future developments.
-	 */
-	public Integer getCurrentRound() {
-		return currentRound;
-	}
-
-	/**
-	 * 
-	 * @return total number of rounds. It is recommended that you use the
-	 *         functions in {@link Progress} instead of this, to ensure your
-	 *         code works with all implementations of Progress including future
-	 *         developments.
-	 */
-	public Integer getTotalRounds() {
-		return duration;
-	}
-
 	@Override
-	public Double get(Long currentTimeMs) {
+	public Double get(long currentTimeMs) {
 		// deadline and current both are limited to MAXINT is 32 bits; double
 		// fits 52
@@ -81,5 +61,5 @@
 
 	@Override
-	public boolean isPastDeadline(Long currentTimeMs) {
+	public boolean isPastDeadline(long currentTimeMs) {
 		return currentRound >= duration || currentTimeMs > endtime.getTime();
 	}
Index: timeline/src/main/java/geniusweb/progress/ProgressTime.java
===================================================================
--- timeline/src/main/java/geniusweb/progress/ProgressTime.java	(revision 52)
+++ timeline/src/main/java/geniusweb/progress/ProgressTime.java	(revision 1)
@@ -5,4 +5,5 @@
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
 
 import geniusweb.deadline.DeadlineTime;
@@ -14,4 +15,5 @@
  *
  */
+@JsonTypeName("time")
 public class ProgressTime implements Progress {
 
@@ -28,10 +30,16 @@
 	private final Long duration;
 
+	@SuppressWarnings("unused") // for deserializer
+	private ProgressTime() {
+		start = null;
+		duration = null;
+	}
+
 	/**
 	 * 
-	 * @param d     the duration, eg {@link DeadlineTime#getDuration()}. Must be
-	 *              &gt; 0.
-	 * @param start the start Date (unix time in millisecs since 1970). See
-	 *              {@link System#currentTimeMillis()}.
+	 * @param duration the duration, eg {@link DeadlineTime#getDuration()}. Must
+	 *                 be >0.
+	 * @param start    the start Date (unix time in millisecs since 1970). See
+	 *                 {@link System#currentTimeMillis()}.
 	 */
 	@JsonCreator
@@ -43,5 +51,5 @@
 
 	@Override
-	public Double get(Long currentTimeMs) {
+	public Double get(long currentTimeMs) {
 		long delta = currentTimeMs - start.getTime();
 		// double should have ~53 digits of precision, and we're computing
@@ -58,5 +66,5 @@
 
 	@Override
-	public boolean isPastDeadline(Long currentTimeMs) {
+	public boolean isPastDeadline(long currentTimeMs) {
 		return currentTimeMs > start.getTime() + duration;
 	}
Index: timeline/src/test/java/geniusweb/deadline/DeadlineTest.java
===================================================================
--- timeline/src/test/java/geniusweb/deadline/DeadlineTest.java	(revision 52)
+++ timeline/src/test/java/geniusweb/deadline/DeadlineTest.java	(revision 1)
@@ -14,14 +14,17 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import geniusweb.deadline.Deadline;
+import geniusweb.deadline.DeadlineRounds;
+import geniusweb.deadline.DeadlineTime;
 import tudelft.utilities.junit.GeneralTests;
 
 public class DeadlineTest extends GeneralTests<Deadline> {
 	private final ObjectMapper jackson = new ObjectMapper();
-	private final String deadlinestring = "{\"DeadlineRounds\":{\"rounds\":100,\"durationms\":999}}";
+	private final String deadlinestring = "{\"deadlinerounds\":{\"rounds\":100,\"durationms\":999}}";
 	private final DeadlineRounds deadlineRounds = new DeadlineRounds(100, 999);
 	private final DeadlineRounds deadlineRounds1 = new DeadlineRounds(100, 999);
 	private final DeadlineRounds deadlineRounds2 = new DeadlineRounds(100,
 			9999);
-	private final String deadlinetimestring = "{\"DeadlineTime\":{\"durationms\":2000}}";
+	private final String deadlinetimestring = "{\"deadlinetime\":{\"durationms\":2000}}";
 	private final DeadlineTime deadlineTime = new DeadlineTime(2000);
 
@@ -68,5 +71,4 @@
 	}
 
-	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testIllegalArg() {
@@ -74,5 +76,4 @@
 	}
 
-	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testIllegalArg2() {
@@ -80,8 +81,3 @@
 	}
 
-	@Test
-	public void getRounds() {
-		assertEquals((Integer) 11, new DeadlineRounds(11, 20).getRounds());
-	}
-
 }
Index: timeline/src/test/java/geniusweb/progress/ProgressRoundsTest.java
===================================================================
--- timeline/src/test/java/geniusweb/progress/ProgressRoundsTest.java	(revision 52)
+++ timeline/src/test/java/geniusweb/progress/ProgressRoundsTest.java	(revision 1)
@@ -2,6 +2,4 @@
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -22,13 +20,14 @@
 
 import geniusweb.deadline.DeadlineRounds;
+import geniusweb.progress.Progress;
+import geniusweb.progress.ProgressRounds;
+import geniusweb.progress.ProgressTime;
 import tudelft.utilities.junit.GeneralTests;
 
 public class ProgressRoundsTest extends GeneralTests<Progress> {
 	private DeadlineRounds deadline = mock(DeadlineRounds.class);
-	private final static Integer TESTROUNDS = 10;
-	private final static long TESTTIME = 10; // milliseconds!
 
-	private final Date date = new Date(98765l);
-	private final Date date0 = new Date(100000l);
+	private final Date date = new Date(999l);
+	private final Date date0 = new Date(0l);
 
 	private final Progress deadline1 = new ProgressRounds(20, 0, date);
@@ -38,10 +37,7 @@
 	private final Progress deadline5 = new ProgressTime(20l, date);
 	private ProgressRounds progress;
+	private final static Integer TESTROUNDS = 10;
 	private final ObjectMapper jackson = new ObjectMapper();
-	private final String progressstring = "{\"ProgressRounds\":{\"duration\":10,\"currentRound\":0,\"endtime\":98765}}";
-
-	private final long start = 1234;
-	private final Date end = new Date(start + TESTTIME);
-	private final ProgressRounds pr = new ProgressRounds(TESTROUNDS, 4, end);
+	private final String progressstring = "{\"rounds\":{\"duration\":10,\"currentRound\":0,\"endtime\":999}}";
 
 	@Before
@@ -65,6 +61,6 @@
 	public List<String> getGeneralTestStrings() {
 		return Arrays.asList("ProgressRounds\\[0.*20\\]",
-				"ProgressRounds\\[0.*30\\]", "ProgressTime\\[100000.*20ms\\]",
-				"ProgressTime\\[98765.*20ms\\]");
+				"ProgressRounds\\[0.*30\\]", "ProgressTime\\[0.*20ms\\]",
+				"ProgressTime\\[999.*20ms\\]");
 	}
 
@@ -72,9 +68,4 @@
 	public void testInit() {
 		assertEquals((Double) 0d, progress.get(1l));
-	}
-
-	@Test
-	public void testCurrentRound() {
-		assertEquals((Integer) 0, progress.getCurrentRound());
 	}
 
@@ -112,5 +103,4 @@
 	}
 
-	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testIllegalArg1() {
@@ -118,5 +108,4 @@
 	}
 
-	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testIllegalArg2() {
@@ -124,37 +113,3 @@
 	}
 
-	@Test
-	public void pastDeadline() {
-		assertFalse(pr.isPastDeadline(start));
-		assertTrue(pr.isPastDeadline(start + TESTTIME + 1));
-		assertFalse(pr.isPastDeadline(start + TESTTIME - 1));
-		assertTrue(new ProgressRounds(TESTROUNDS, TESTROUNDS, end)
-				.isPastDeadline(start + TESTTIME + 1));
-	}
-
-	@Test
-	public void terminationTime() {
-		assertEquals(start + TESTTIME, pr.getTerminationTime().getTime());
-	}
-
-	@Test
-	public void get() {
-		// time does not matter for rounds-based deadline
-		assertEquals((Double) 0.4d, pr.get(start));
-		assertEquals((Double) 0.4d, pr.get(start + TESTTIME + 1));
-		assertEquals((Double) 0.4d, pr.get(start + TESTTIME));
-		assertEquals((Double) 0.4d, pr.get(start + TESTTIME / 2));
-		assertEquals((Double) 0.4d, pr.get(start - 10));
-		assertEquals((Double) 0.4d, pr.get(start + TESTTIME + 10));
-
-		assertEquals((Double) 0.1d,
-				new ProgressRounds(TESTROUNDS, 1, end).get(start));
-		assertEquals((Double) 1d,
-				new ProgressRounds(TESTROUNDS, TESTROUNDS, end).get(start));
-	}
-
-	@Test
-	public void totalRounds() {
-		assertEquals((Integer) 10, pr.getTotalRounds());
-	}
 }
Index: timeline/src/test/java/geniusweb/progress/ProgressTimeTest.java
===================================================================
--- timeline/src/test/java/geniusweb/progress/ProgressTimeTest.java	(revision 52)
+++ timeline/src/test/java/geniusweb/progress/ProgressTimeTest.java	(revision 1)
@@ -2,6 +2,4 @@
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -18,10 +16,10 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import geniusweb.progress.Progress;
+import geniusweb.progress.ProgressTime;
 import tudelft.utilities.junit.GeneralTests;
 
 public class ProgressTimeTest extends GeneralTests<Progress> {
-	// we set T0 quite high because Python has trouble handling small datetime
-	private static final long T0 = 100000l;
-	private static final Date TIMEZERO = new Date(T0);
+	private static final Date TIMEZERO = new Date(0l);
 	private final static long TESTTIME = 10; // milliseconds!
 	private final ProgressTime progress1 = new ProgressTime(TESTTIME, TIMEZERO);
@@ -31,8 +29,5 @@
 
 	private final ObjectMapper jackson = new ObjectMapper();
-	private final String progressstring = "{\"ProgressTime\":{\"duration\":10,\"start\":100000}}";
-
-	private final long start = 1234;
-	private final ProgressTime pr = new ProgressTime(TESTTIME, new Date(start));
+	private final String progressstring = "{\"time\":{\"duration\":10,\"start\":0}}";
 
 	@Override
@@ -46,6 +41,6 @@
 	@Override
 	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("ProgressTime\\[100000.*10ms\\]",
-				"ProgressTime\\[100000.*200ms\\]");
+		return Arrays.asList("ProgressTime\\[0.*10ms\\]",
+				"ProgressTime\\[0.*200ms\\]");
 	}
 
@@ -58,6 +53,5 @@
 	public void testAdvancingTime() throws InterruptedException {
 		for (long n = 0; n <= TESTTIME; n++) {
-			assertEquals((Double) ((double) n / TESTTIME),
-					progress1.get(T0 + n));
+			assertEquals((Double) ((double) n / TESTTIME), progress1.get(n));
 		}
 	}
@@ -66,5 +60,5 @@
 	public void testAdvanceWhenDeadlineReached() throws InterruptedException {
 		ProgressTime progress = new ProgressTime(TESTTIME, TIMEZERO);
-		assertEquals((Double) 1d, progress1.get(T0 + TESTTIME));
+		assertEquals((Double) 1d, progress1.get(TESTTIME));
 	}
 
@@ -85,27 +79,5 @@
 		// object...
 		assertEquals(TESTTIME, newprog.getDuration().intValue());
-		assertEquals(T0, newprog.getStart().getTime());
-
-	}
-
-	@Test
-	public void pastDeadline() {
-		assertTrue(pr.isPastDeadline(start + TESTTIME + 1));
-		assertFalse(pr.isPastDeadline(start + TESTTIME - 1));
-
-	}
-
-	@Test
-	public void terminationTime() {
-		assertEquals(start + TESTTIME, pr.getTerminationTime().getTime());
-	}
-
-	@Test
-	public void get() {
-		assertEquals((Double) 0d, pr.get(start));
-		assertEquals((Double) 1d, pr.get(start + TESTTIME));
-		assertEquals((Double) 0.5d, pr.get(start + TESTTIME / 2));
-		assertEquals((Double) 0d, pr.get(start - 10));
-		assertEquals((Double) 1d, pr.get(start + TESTTIME + 10));
+		assertEquals(0, newprog.getStart().getTime());
 
 	}
