Index: /bidspace/pom.xml
===================================================================
--- /bidspace/pom.xml	(revision 24)
+++ /bidspace/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>bidspace</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /boa/pom.xml
===================================================================
--- /boa/pom.xml	(revision 24)
+++ /boa/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>boa</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /collectparties.sh
===================================================================
--- /collectparties.sh	(revision 24)
+++ /collectparties.sh	(revision 25)
@@ -7,5 +7,5 @@
 rm -rf collectedparties
 mkdir collectedparties
-VERSION=1.5.3
+VERSION=1.5.4
 
 cp "exampleparties/anac2019/agentgg/target/agentgg-${VERSION}-jar-with-dependencies.jar" collectedparties
Index: /events/pom.xml
===================================================================
--- /events/pom.xml	(revision 24)
+++ /events/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>events</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/anac2019/agentgg/pom.xml
===================================================================
--- /exampleparties/anac2019/agentgg/pom.xml	(revision 24)
+++ /exampleparties/anac2019/agentgg/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties.anac2019</groupId>
 	<artifactId>agentgg</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.6</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/anac2019/winkyagent/pom.xml
===================================================================
--- /exampleparties/anac2019/winkyagent/pom.xml	(revision 24)
+++ /exampleparties/anac2019/winkyagent/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties.anac2019</groupId>
 	<artifactId>winkyagent</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.6</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/boulware/pom.xml
===================================================================
--- /exampleparties/boulware/pom.xml	(revision 24)
+++ /exampleparties/boulware/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>boulware</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/boulware/src/main/java/geniusweb/exampleparties/boulware/Boulware.java
===================================================================
--- /exampleparties/boulware/src/main/java/geniusweb/exampleparties/boulware/Boulware.java	(revision 24)
+++ /exampleparties/boulware/src/main/java/geniusweb/exampleparties/boulware/Boulware.java	(revision 25)
@@ -20,5 +20,6 @@
 	@Override
 	public String getDescription() {
-		return "Boulware: reluctant to concede";
+		return "Boulware: reluctant to concede. Parameters minPower (default 1) "
+				+ "and maxPower (default infinity) are used when voting";
 	}
 
Index: /exampleparties/comparebids/pom.xml
===================================================================
--- /exampleparties/comparebids/pom.xml	(revision 24)
+++ /exampleparties/comparebids/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>comparebids</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.6</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/conceder/pom.xml
===================================================================
--- /exampleparties/conceder/pom.xml	(revision 24)
+++ /exampleparties/conceder/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>conceder</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/conceder/src/main/java/geniusweb/exampleparties/conceder/Conceder.java
===================================================================
--- /exampleparties/conceder/src/main/java/geniusweb/exampleparties/conceder/Conceder.java	(revision 24)
+++ /exampleparties/conceder/src/main/java/geniusweb/exampleparties/conceder/Conceder.java	(revision 25)
@@ -20,5 +20,6 @@
 	@Override
 	public String getDescription() {
-		return "Conceder: going to the reservation value very quickly";
+		return "Conceder: going to the reservation value very quickly. "
+				+ "Parameters minPower (default 1) and maxPower (default infinity) are used when voting";
 	}
 
Index: /exampleparties/hardliner/pom.xml
===================================================================
--- /exampleparties/hardliner/pom.xml	(revision 24)
+++ /exampleparties/hardliner/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>hardliner</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/hardliner/src/main/java/geniusweb/exampleparties/hardliner/Hardliner.java
===================================================================
--- /exampleparties/hardliner/src/main/java/geniusweb/exampleparties/hardliner/Hardliner.java	(revision 24)
+++ /exampleparties/hardliner/src/main/java/geniusweb/exampleparties/hardliner/Hardliner.java	(revision 25)
@@ -20,5 +20,6 @@
 	@Override
 	public String getDescription() {
-		return "Hardliner: does not concede";
+		return "Hardliner: does not concede. "
+				+ "Parameters minPower (default 1) and maxPower (default infinity) are used when voting";
 	}
 
Index: /exampleparties/humangui/pom.xml
===================================================================
--- /exampleparties/humangui/pom.xml	(revision 24)
+++ /exampleparties/humangui/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>humangui</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.6</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/linear/pom.xml
===================================================================
--- /exampleparties/linear/pom.xml	(revision 24)
+++ /exampleparties/linear/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>linear</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/linear/src/main/java/geniusweb/exampleparties/linear/Linear.java
===================================================================
--- /exampleparties/linear/src/main/java/geniusweb/exampleparties/linear/Linear.java	(revision 24)
+++ /exampleparties/linear/src/main/java/geniusweb/exampleparties/linear/Linear.java	(revision 25)
@@ -20,5 +20,6 @@
 	@Override
 	public String getDescription() {
-		return "Linear: concedes linearly with time";
+		return "Linear: concedes linearly with time. "
+				+ "Parameters minPower (default 1) and maxPower (default infinity) are used when voting";
 	}
 
Index: /exampleparties/randomparty/pom.xml
===================================================================
--- /exampleparties/randomparty/pom.xml	(revision 24)
+++ /exampleparties/randomparty/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>randomparty</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.6</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java
===================================================================
--- /exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java	(revision 24)
+++ /exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java	(revision 25)
@@ -63,4 +63,5 @@
 	private Settings settings;
 	private Votes lastvotes;
+	private String protocol;
 
 	public RandomParty() {
@@ -81,4 +82,6 @@
 				this.progress = settings.getProgress();
 				this.settings = settings;
+				this.protocol = settings.getProtocol().getURI().getPath();
+
 			} else if (info instanceof ActionDone) {
 				Action otheract = ((ActionDone) info).getAction();
@@ -88,5 +91,4 @@
 			} else if (info instanceof YourTurn) {
 				makeOffer();
-				nextRound();
 			} else if (info instanceof Finished) {
 				getReporter().log(Level.INFO, "Final ourcome:" + info);
@@ -94,20 +96,12 @@
 				lastvotes = vote((Voting) info);
 				getConnection().send(lastvotes);
-				nextRound();
 			} else if (info instanceof OptIn) {
 				// just repeat our last vote.
 				getConnection().send(lastvotes);
-				nextRound();
 			}
 		} catch (Exception e) {
 			throw new RuntimeException("Failed to handle info", e);
 		}
-	}
-
-	private void nextRound() {
-		if (progress instanceof ProgressRounds) {
-			progress = ((ProgressRounds) progress).advance();
-		}
-
+		updateRound(info);
 	}
 
@@ -125,9 +119,37 @@
 
 	/**
+	 * Update {@link #progress}
+	 * 
+	 * @param info the received info. Used to determine if this is the last info
+	 *             of the round
+	 */
+	private void updateRound(Inform info) {
+		if (protocol == null)
+			return;
+		switch (protocol) {
+		case "SAOP":
+		case "SHAOP":
+			if (!(info instanceof YourTurn))
+				return;
+			break;
+		case "MOPAC":
+			if (!(info instanceof OptIn))
+				return;
+			break;
+		default:
+			return;
+		}
+		// if we get here, round must be increased.
+		if (progress instanceof ProgressRounds) {
+			progress = ((ProgressRounds) progress).advance();
+		}
+
+	}
+
+	/**
 	 * send our next offer
 	 */
 	private void makeOffer() throws IOException {
 		Action action;
-		String protocol = settings.getProtocol().getURI().getPath();
 		if ((protocol.equals("SAOP") || protocol.equals("SHAOP"))
 				&& isGood(lastReceivedBid)) {
Index: /exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java
===================================================================
--- /exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java	(revision 24)
+++ /exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java	(revision 25)
@@ -7,4 +7,5 @@
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -42,4 +43,5 @@
 import geniusweb.inform.Finished;
 import geniusweb.inform.Inform;
+import geniusweb.inform.OptIn;
 import geniusweb.inform.Settings;
 import geniusweb.inform.Voting;
@@ -68,6 +70,7 @@
 	private final TestConnection connection = new TestConnection();
 	private final ProtocolRef protocol = new ProtocolRef(SAOP);
+	private final ProtocolRef mopacProtocol = new ProtocolRef("MOPAC");
 	private final ProgressRounds progress = mock(ProgressRounds.class);
-	private Settings settings;
+	private Settings settings, mopacSettings;
 	private LinearAdditive profile;
 	private final Parameters parameters = new Parameters();
@@ -80,4 +83,7 @@
 				new ProfileRef(new URI("file:" + PROFILE)), protocol, progress,
 				parameters);
+		mopacSettings = new Settings(PARTY1,
+				new ProfileRef(new URI("file:" + PROFILE)), mopacProtocol,
+				progress, parameters);
 
 		String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)),
@@ -174,5 +180,5 @@
 
 	@Test
-	public void testAgentsUpdatesProgress() {
+	public void testAgentsUpdatesSAOPProgress() {
 		party.connect(connection);
 		party.notifyChange(settings);
@@ -180,4 +186,18 @@
 		party.notifyChange(new YourTurn());
 		verify(progress).advance();
+	}
+
+	@Test
+	public void testAgentsUpdatesMOPACProgress() {
+		party.connect(connection);
+		party.notifyChange(mopacSettings);
+		// in mopac, progress happens only after optin phase
+		party.notifyChange(new YourTurn());
+		verify(progress, times(0)).advance();
+		party.notifyChange(
+				new Voting(Collections.emptyList(), Collections.emptyMap()));
+		verify(progress, times(0)).advance();
+		party.notifyChange(new OptIn(Collections.emptyList()));
+		verify(progress, times(1)).advance();
 	}
 
@@ -199,7 +219,7 @@
 
 	@Test
-	public void testVoting() {
-		party.connect(connection);
-		party.notifyChange(settings);
+	public void testVoting() throws URISyntaxException {
+		party.connect(connection);
+		party.notifyChange(mopacSettings);
 
 		Bid bid = findGoodBid();
Index: /exampleparties/randompartypy/pom.xml
===================================================================
--- /exampleparties/randompartypy/pom.xml	(revision 24)
+++ /exampleparties/randompartypy/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>randompyparty</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/simpleboa/pom.xml
===================================================================
--- /exampleparties/simpleboa/pom.xml	(revision 24)
+++ /exampleparties/simpleboa/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>simpleboaparty</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.6</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/simpleshaop/pom.xml
===================================================================
--- /exampleparties/simpleshaop/pom.xml	(revision 24)
+++ /exampleparties/simpleshaop/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>simpleshaop</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.6</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/timedependentparty/pom.xml
===================================================================
--- /exampleparties/timedependentparty/pom.xml	(revision 24)
+++ /exampleparties/timedependentparty/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb.exampleparties</groupId>
 	<artifactId>timedependentparty</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java
===================================================================
--- /exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java	(revision 24)
+++ /exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java	(revision 25)
@@ -4,8 +4,11 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.RoundingMode;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Random;
 import java.util.logging.Level;
+import java.util.stream.Collectors;
 
 import geniusweb.actions.Accept;
@@ -13,8 +16,12 @@
 import geniusweb.actions.Offer;
 import geniusweb.actions.PartyId;
+import geniusweb.actions.Vote;
+import geniusweb.actions.Votes;
 import geniusweb.inform.ActionDone;
 import geniusweb.inform.Finished;
 import geniusweb.inform.Inform;
+import geniusweb.inform.OptIn;
 import geniusweb.inform.Settings;
+import geniusweb.inform.Voting;
 import geniusweb.inform.YourTurn;
 import geniusweb.issuevalue.Bid;
@@ -23,4 +30,5 @@
 import geniusweb.profile.Profile;
 import geniusweb.profile.utilityspace.LinearAdditive;
+import geniusweb.profile.utilityspace.UtilitySpace;
 import geniusweb.profileconnection.ProfileConnectionFactory;
 import geniusweb.profileconnection.ProfileInterface;
@@ -35,9 +43,33 @@
  * 2^31 (approx 1 billion bids). It may take excessive time and run out of time
  * on bidspaces &gt; 10000 bids. In special cases it may even run out of memory,
+ * 
+ * <p>
+ * Supports parameters as follows
+ * <table summary="parameters">
+ * <tr>
+ * <td>e</td>
+ * <td>e determines how fast the party makes concessions with time. Typically
+ * around 1. 0 means no concession, 1 linear concession, &gt;1 faster than
+ * linear concession.</td>
+ * </tr>
+ * 
+ * <tr>
+ * <td>minPower</td>
+ * <td>This value is used as minPower for placed {@link Vote}s. Default value is
+ * 1.</td>
+ * </tr>
+ * 
+ * <tr>
+ * <td>maxPower</td>
+ * <td>This value is used as maxPower for placed {@link Vote}s. Default value is
+ * infinity.</td>
+ * </tr>
+ * 
+ * </table>
+ * <p>
+ * TimeDependentParty requires a {@link UtilitySpace}
  */
 public class TimeDependentParty extends DefaultParty {
 
-	private static final BigDecimal DEC0001 = new BigDecimal("0.0001");
-	private static final BigDecimal DEC100 = new BigDecimal("100");
 	private ProfileInterface profileint;
 	private LinearAdditive utilspace = null; // last received space
@@ -47,4 +79,6 @@
 	private ExtendedUtilSpace extendedspace;
 	private double e = 1.2;
+	private Votes lastvotes;
+	private Settings settings;
 
 	public TimeDependentParty() {
@@ -58,5 +92,5 @@
 	@Override
 	public Capabilities getCapabilities() {
-		return new Capabilities(new HashSet<>(Arrays.asList("SAOP")));
+		return new Capabilities(new HashSet<>(Arrays.asList("SAOP", "MOPAC")));
 	}
 
@@ -65,5 +99,5 @@
 		try {
 			if (info instanceof Settings) {
-				Settings settings = (Settings) info;
+				settings = (Settings) info;
 				this.profileint = ProfileConnectionFactory
 						.create(settings.getProfile().getURI(), getReporter());
@@ -80,5 +114,4 @@
 					}
 				}
-
 			} else if (info instanceof ActionDone) {
 				Action otheract = ((ActionDone) info).getAction();
@@ -88,13 +121,16 @@
 			} else if (info instanceof YourTurn) {
 				myTurn();
-				if (progress instanceof ProgressRounds) {
-					progress = ((ProgressRounds) progress).advance();
-				}
 			} else if (info instanceof Finished) {
 				getReporter().log(Level.INFO, "Final ourcome:" + info);
+			} else if (info instanceof Voting) {
+				lastvotes = vote((Voting) info);
+				getConnection().send(lastvotes);
+			} else if (info instanceof OptIn) {
+				getConnection().send(lastvotes);
 			}
-		} catch (Exception e) {
-			getReporter().log(Level.SEVERE, "Failed to handle info", e);
-		}
+		} catch (Exception ex) {
+			getReporter().log(Level.SEVERE, "Failed to handle info", ex);
+		}
+		updateRound(info);
 	}
 
@@ -119,5 +155,44 @@
 	}
 
+	@Override
+	public String getDescription() {
+		return "Time-dependent conceder. Aims at utility u(t) = scale * t^(1/e) "
+				+ "where t is the time (0=start, 1=end), e is the concession speed parameter (default 1.1), and scale such that u(0)=minimum and "
+				+ "u(1) = maximum possible utility. Parameters minPower (default 1) and maxPower (default infinity) are used "
+				+ "when voting";
+	}
+
 	/******************* private support funcs ************************/
+
+	/**
+	 * Update {@link #progress}, depending on the protocol and last received
+	 * {@link Inform}
+	 * 
+	 * @param info the received info.
+	 */
+	private void updateRound(Inform info) {
+		if (settings == null) // not yet initialized
+			return;
+		String protocol = settings.getProtocol().getURI().getPath();
+
+		switch (protocol) {
+		case "SAOP":
+		case "SHAOP":
+			if (!(info instanceof YourTurn))
+				return;
+			break;
+		case "MOPAC":
+			if (!(info instanceof OptIn))
+				return;
+			break;
+		default:
+			return;
+		}
+		// if we get here, round must be increased.
+		if (progress instanceof ProgressRounds) {
+			progress = ((ProgressRounds) progress).advance();
+		}
+
+	}
 
 	private void myTurn() throws IOException {
@@ -153,5 +228,7 @@
 	private Bid makeBid() {
 		double time = progress.get(System.currentTimeMillis());
-		BigDecimal utilityGoal = utilityGoal(time, getE());
+
+		BigDecimal utilityGoal = getUtilityGoal(time, getE(),
+				extendedspace.getMin(), extendedspace.getMax());
 		ImmutableList<Bid> options = extendedspace.getBids(utilityGoal);
 		if (options.size() == BigInteger.ZERO) {
@@ -166,27 +243,64 @@
 	/**
 	 * 
-	 * @param t the time in [0,1] where 0 means start of nego and 1 the end of
-	 *          nego (absolute time/round limit)
-	 * @param e the e value
+	 * @param t       the time in [0,1] where 0 means start of nego and 1 the
+	 *                end of nego (absolute time/round limit)
+	 * @param e       the e value that determinses how fast the party makes
+	 *                concessions with time. Typically around 1. 0 means no
+	 *                concession, 1 linear concession, &gt;1 faster than linear
+	 *                concession.
+	 * @param minUtil the minimum utility possible in our profile
+	 * @param maxUtil the maximum utility possible in our profile
 	 * @return the utility goal for this time and e value
 	 */
-	private BigDecimal utilityGoal(double t, double e) {
-		BigDecimal minUtil = extendedspace.getMin();
-		BigDecimal maxUtil = extendedspace.getMax();
-
-		double ft = 0;
+	protected BigDecimal getUtilityGoal(double t, double e, BigDecimal minUtil,
+			BigDecimal maxUtil) {
+
+		BigDecimal ft1 = BigDecimal.ONE;
 		if (e != 0)
-			ft = Math.pow(t, 1 / e);
-		// we subtract epsilon to correct possibly small round-up errors
-		return new BigDecimal(minUtil.doubleValue()
-				+ (maxUtil.doubleValue() - minUtil.doubleValue()) * (1 - ft))
-						.min(maxUtil).max(minUtil);
-	}
-
-	@Override
-	public String getDescription() {
-		return "Time-dependent conceder. Aims at utility u(t) = scale * t^(1/e) "
-				+ "where t is the time (0=start, 1=end), e is a parameter (default 1.1), and scale such that u(0)=minimum and "
-				+ "u(1) = maximum possible utility. ";
+			ft1 = BigDecimal.valueOf(1 - Math.pow(t, 1 / e)).setScale(6,
+					RoundingMode.HALF_UP);
+		return minUtil.add((maxUtil.subtract(minUtil).multiply(ft1)))
+				.min(maxUtil).max(minUtil);
+	}
+
+	/**
+	 * @param voting the {@link Voting} object containing the options
+	 * 
+	 * @return our next Votes.
+	 */
+	private Votes vote(Voting voting) throws IOException {
+		Object val = settings.getParameters().get("minPower");
+		// max utility requires smallest possible group/power
+		Integer minpower = (val instanceof Integer) ? (Integer) val : 1;
+		val = settings.getParameters().get("maxPower");
+		Integer maxpower = (val instanceof Integer) ? (Integer) val
+				: Integer.MAX_VALUE;
+
+		List<Vote> votes = voting.getBids().stream().distinct()
+				.filter(bid -> isGood(bid))
+				.map(bid -> new Vote(me, bid, minpower, maxpower))
+				.collect(Collectors.toList());
+		return new Votes(me, votes);
+	}
+
+	/**
+	 * @param bid the bid to check
+	 * @return true iff bid is good for us.
+	 */
+	private boolean isGood(Bid bid) {
+		if (bid == null || profileint == null)
+			return false;
+		Profile profile;
+		try {
+			profile = profileint.getProfile();
+		} catch (IOException ex) {
+			throw new IllegalStateException(ex);
+		}
+		// the profile MUST contain UtilitySpace
+		double time = progress.get(System.currentTimeMillis());
+		return ((UtilitySpace) profile).getUtility(bid)
+				.compareTo(getUtilityGoal(time, getE(), extendedspace.getMin(),
+						extendedspace.getMax())) >= 0;
+
 	}
 }
Index: /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TestConnection.java
===================================================================
--- /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TestConnection.java	(revision 25)
+++ /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TestConnection.java	(revision 25)
@@ -0,0 +1,53 @@
+package geniusweb.exampleparties.timedependentparty;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.LinkedList;
+import java.util.List;
+
+import geniusweb.actions.Action;
+import geniusweb.connection.ConnectionEnd;
+import geniusweb.inform.Inform;
+import geniusweb.references.Reference;
+import tudelft.utilities.listener.DefaultListenable;
+
+/**
+ * A "real" connection object, because the party is going to subscribe etc, and
+ * without a real connection we would have to do a lot of mocks that would make
+ * the test very hard to read.
+ *
+ */
+class TestConnection extends DefaultListenable<Inform>
+		implements ConnectionEnd<Inform, Action> {
+	private List<Action> actions = new LinkedList<>();
+
+	@Override
+	public void send(Action action) throws IOException {
+		actions.add(action);
+	}
+
+	@Override
+	public Reference getReference() {
+		return null;
+	}
+
+	@Override
+	public URI getRemoteURI() {
+		return null;
+	}
+
+	@Override
+	public void close() {
+
+	}
+
+	@Override
+	public Error getError() {
+		return null;
+	}
+
+	public List<Action> getActions() {
+		return actions;
+	}
+
+}
Index: /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyMOPACTest.java
===================================================================
--- /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyMOPACTest.java	(revision 25)
+++ /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyMOPACTest.java	(revision 25)
@@ -0,0 +1,193 @@
+package geniusweb.exampleparties.timedependentparty;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import geniusweb.actions.Action;
+import geniusweb.actions.Offer;
+import geniusweb.actions.PartyId;
+import geniusweb.actions.Vote;
+import geniusweb.actions.Votes;
+import geniusweb.inform.OptIn;
+import geniusweb.inform.Settings;
+import geniusweb.inform.Voting;
+import geniusweb.inform.YourTurn;
+import geniusweb.issuevalue.Bid;
+import geniusweb.issuevalue.DiscreteValue;
+import geniusweb.issuevalue.NumberValue;
+import geniusweb.issuevalue.Value;
+import geniusweb.profile.Profile;
+import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
+import geniusweb.progress.ProgressRounds;
+import geniusweb.references.Parameters;
+import geniusweb.references.ProfileRef;
+import geniusweb.references.ProtocolRef;
+
+public class TimeDependentPartyMOPACTest {
+
+	private static final PartyId me = new PartyId("me");
+	private static final PartyId otherparty = new PartyId("other");
+	private static final String MOPAC = "MOPAC";
+	private static final String PROFILE = "src/test/resources/testprofile.json";
+	private final static ObjectMapper jackson = new ObjectMapper();
+
+	private TimeDependentParty party;
+	private TestConnection connection = new TestConnection();
+	private ProtocolRef protocol = new ProtocolRef("MOPAC");
+	private ProgressRounds progress = mock(ProgressRounds.class);
+	private Parameters parameters = new Parameters();
+	private Settings settings;
+	private LinearAdditiveUtilitySpace profile;
+	private Map<PartyId, Integer> powers = new HashMap<>();
+	private Bid bestBid;
+
+	@Before
+	public void before() throws JsonParseException, JsonMappingException,
+			IOException, URISyntaxException {
+		powers.put(me, 1);
+		powers.put(otherparty, 1);
+
+		party = new TimeDependentParty() {
+
+			@Override
+			public String getDescription() {
+				return "test";
+			}
+
+			@Override
+			public double getE() {
+				return 2; // conceder-like
+			}
+		};
+		settings = new Settings(me, new ProfileRef(new URI("file:" + PROFILE)),
+				protocol, progress, parameters);
+
+		String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)),
+				StandardCharsets.UTF_8);
+		profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized,
+				Profile.class);
+
+		// hard coded best bid for this domain
+		Map<String, Value> vals = new HashMap<>();
+		vals.put("issue2", new NumberValue(new BigDecimal("18")));
+		vals.put("issue1", new DiscreteValue("issue1value2"));
+		bestBid = new Bid(vals);
+
+	}
+
+	@Test
+	public void testPartyFirstOffers() {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		party.notifyChange(new YourTurn());
+		assertEquals(1, connection.getActions().size());
+		assertTrue(connection.getActions().get(0) instanceof Offer);
+	}
+
+	@Test
+	public void checkPartyFirstBid() {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		// let party make an offer and go to the voting phase
+		party.notifyChange(new YourTurn());
+		Offer offer = (Offer) connection.getActions().get(0);
+
+		// it's either the best or one-but-best bid,
+		// because we set up the tolerance like that.
+		Bid bid = offer.getBid();
+		assertEquals("issue1value2",
+				((DiscreteValue) bid.getValue("issue1")).getValue());
+		assertTrue(((NumberValue) bid.getValue("issue2")).getValue()
+				.compareTo(new BigDecimal("17")) >= 0);
+	}
+
+	@Test
+	public void testPartyVotesForBest() {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		// let party make an offer and go to the voting phase
+		party.notifyChange(new YourTurn());
+		assertEquals(1, connection.getActions().size());
+
+		// send bestBid bid as the voting option
+		// this is better than party's firstBid
+
+		party.notifyChange(new Voting(Arrays.asList(bestBid), powers));
+		assertEquals(2, connection.getActions().size());
+
+		Action lastAction = connection.getActions().get(1);
+		assertTrue(lastAction instanceof Votes);
+		assertEquals(
+				new Votes(me,
+						Arrays.asList(
+								new Vote(me, bestBid, 1, Integer.MAX_VALUE))),
+				lastAction);
+	}
+
+	@Test
+	public void testPartyOptsInBest() {
+		party.connect(connection);
+		party.notifyChange(settings);
+
+		// let party make an offer and go to the voting phase
+		party.notifyChange(new YourTurn());
+		assertEquals(1, connection.getActions().size());
+
+		// send bestBid bid as the voting option
+		// this is better than party's firstBid
+
+		party.notifyChange(new Voting(Arrays.asList(bestBid, bestBid), powers));
+		assertEquals(2, connection.getActions().size());
+
+		// we already checked the party votes for bestBid
+		Votes votes = (Votes) connection.getActions().get(1);
+
+		party.notifyChange(new OptIn(Arrays.asList(votes)));
+		assertEquals(3, connection.getActions().size());
+
+		Action lastAction = connection.getActions().get(2);
+		assertTrue(lastAction instanceof Votes);
+		assertTrue(((Votes) lastAction).isExtending(votes));
+	}
+
+	@Test
+	public void testGetCapabilities() {
+		assertTrue(party.getCapabilities().getBehaviours().contains(MOPAC));
+	}
+
+//	private Bid findBestBid() {
+//		BigDecimal bestvalue = BigDecimal.ZERO;
+//		Bid best = null;
+//		for (Bid bid : new AllBidsList(profile.getDomain())) {
+//			BigDecimal util = profile.getUtility(bid);
+//			if (util.compareTo(bestvalue) > 0) {
+//				best = bid;
+//				bestvalue = util;
+//			}
+//		}
+//		return best;
+//	}
+
+}
Index: /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java
===================================================================
--- /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java	(revision 24)
+++ /exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java	(revision 25)
@@ -17,6 +17,4 @@
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.logging.Level;
 
@@ -29,14 +27,11 @@
 
 import geniusweb.actions.Accept;
-import geniusweb.actions.Action;
 import geniusweb.actions.EndNegotiation;
 import geniusweb.actions.Offer;
 import geniusweb.actions.PartyId;
 import geniusweb.bidspace.AllBidsList;
-import geniusweb.connection.ConnectionEnd;
 import geniusweb.inform.ActionDone;
 import geniusweb.inform.Agreements;
 import geniusweb.inform.Finished;
-import geniusweb.inform.Inform;
 import geniusweb.inform.Settings;
 import geniusweb.inform.YourTurn;
@@ -49,6 +44,4 @@
 import geniusweb.references.ProfileRef;
 import geniusweb.references.ProtocolRef;
-import geniusweb.references.Reference;
-import tudelft.utilities.listener.DefaultListenable;
 import tudelft.utilities.logging.Reporter;
 
@@ -62,5 +55,5 @@
 	private TimeDependentParty party;
 	private TestConnection connection = new TestConnection();
-	private ProtocolRef protocol = mock(ProtocolRef.class);
+	private ProtocolRef protocol = new ProtocolRef("SAOP");
 	private ProgressRounds progress = mock(ProgressRounds.class);
 	private Parameters parameters = new Parameters();
@@ -113,5 +106,5 @@
 	public void testInformConnection() {
 		party.connect(connection);
-		// agent should not start acting just after an inform
+		// Party should not start acting just after an inform
 		assertEquals(0, connection.getActions().size());
 	}
@@ -143,5 +136,5 @@
 
 	@Test
-	public void testAgentHasFirstTurn() {
+	public void testPartyHasFirstTurn() {
 		party.connect(connection);
 		party.notifyChange(settings);
@@ -153,5 +146,5 @@
 
 	@Test
-	public void testAgentAccepts() {
+	public void testPartyAccepts() {
 		party.connect(connection);
 		party.notifyChange(settings);
@@ -166,5 +159,5 @@
 
 	@Test
-	public void testAgentLogsFinal() {
+	public void testPartyLogsFinal() {
 		// this log output is optional, this is to show how to check log
 		Reporter reporter = mock(Reporter.class);
@@ -193,5 +186,5 @@
 
 	@Test
-	public void testAgentsUpdatesProgress() {
+	public void testPartysUpdatesProgress() {
 		party.connect(connection);
 		party.notifyChange(settings);
@@ -204,4 +197,14 @@
 	public void testGetCapabilities() {
 		assertTrue(party.getCapabilities().getBehaviours().contains(SAOP));
+	}
+
+	@Test
+	public void testUtilityTarget() {
+		TimeDependentParty tdp = new TimeDependentParty();
+		BigDecimal N02 = new BigDecimal("0.2");
+		BigDecimal N043 = new BigDecimal("0.42521212");
+		BigDecimal goal = tdp.getUtilityGoal(0.1, 1.2, N02, N043);
+		assertTrue(goal.compareTo(N02) > 0);
+		assertTrue(goal.compareTo(N043) < 0);
 	}
 
@@ -220,43 +223,2 @@
 
 }
-
-/**
- * A "real" connection object, because the party is going to subscribe etc, and
- * without a real connection we would have to do a lot of mocks that would make
- * the test very hard to read.
- *
- */
-class TestConnection extends DefaultListenable<Inform>
-		implements ConnectionEnd<Inform, Action> {
-	private List<Action> actions = new LinkedList<>();
-
-	@Override
-	public void send(Action action) throws IOException {
-		actions.add(action);
-	}
-
-	@Override
-	public Reference getReference() {
-		return null;
-	}
-
-	@Override
-	public URI getRemoteURI() {
-		return null;
-	}
-
-	@Override
-	public void close() {
-
-	}
-
-	@Override
-	public Error getError() {
-		return null;
-	}
-
-	public List<Action> getActions() {
-		return actions;
-	}
-
-}
Index: /issuevalue/pom.xml
===================================================================
--- /issuevalue/pom.xml	(revision 24)
+++ /issuevalue/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>issuevalue</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /opponentmodel/pom.xml
===================================================================
--- /opponentmodel/pom.xml	(revision 24)
+++ /opponentmodel/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>opponentmodel</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /party/pom.xml
===================================================================
--- /party/pom.xml	(revision 24)
+++ /party/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>party</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /profile/pom.xml
===================================================================
--- /profile/pom.xml	(revision 24)
+++ /profile/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>profile</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /profileconnection/pom.xml
===================================================================
--- /profileconnection/pom.xml	(revision 24)
+++ /profileconnection/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>profileconnection</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /protocol/pom.xml
===================================================================
--- /protocol/pom.xml	(revision 24)
+++ /protocol/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>protocol</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /pythonadapter/pom.xml
===================================================================
--- /pythonadapter/pom.xml	(revision 24)
+++ /pythonadapter/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>pythonadapter</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /references/pom.xml
===================================================================
--- /references/pom.xml	(revision 24)
+++ /references/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>references</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /simplerunner/pom.xml
===================================================================
--- /simplerunner/pom.xml	(revision 24)
+++ /simplerunner/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>simplerunner</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /timeline/pom.xml
===================================================================
--- /timeline/pom.xml	(revision 24)
+++ /timeline/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>timeline</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -16,5 +16,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
Index: /voting/pom.xml
===================================================================
--- /voting/pom.xml	(revision 24)
+++ /voting/pom.xml	(revision 25)
@@ -6,5 +6,5 @@
 	<groupId>geniusweb</groupId>
 	<artifactId>voting</artifactId>
-	<version>1.5.3</version> <!-- must equal ${geniusweb.version} -->
+	<version>1.5.4</version> <!-- must equal ${geniusweb.version} -->
 	<packaging>jar</packaging>
 
@@ -17,5 +17,5 @@
 		<passwd>${env.ARTIFACTORY_PASS}</passwd>
 		<jackson-2-version>2.9.10</jackson-2-version>
-		<geniusweb.version>1.5.3</geniusweb.version>
+		<geniusweb.version>1.5.4</geniusweb.version>
 	</properties>
 
