Index: events/src/main/java/geniusweb/actions/Vote.java
===================================================================
--- events/src/main/java/geniusweb/actions/Vote.java	(revision 21)
+++ events/src/main/java/geniusweb/actions/Vote.java	(revision 22)
@@ -14,4 +14,5 @@
 public class Vote extends ActionWithBid {
 	private final Integer minPower;
+	private final Integer maxPower;
 
 	/**
@@ -19,15 +20,22 @@
 	 * @param bid      the bid that is voted on
 	 * @param minPower the minimum power this bid must get in order for the vote
-	 *                 to be valid. If power=1 for all participants (usually the
-	 *                 default) power can be interpreted as number of votes
+	 *                 to be valid. Power is the sum of the powers of the
+	 *                 parties that are in the deal. If power=1 for all
+	 *                 participants (usually the default) power can be
+	 *                 interpreted as number of votes
+	 * @param maxPower the maximum power this bid must get in order for the vote
+	 *                 to be valid. See {@link #minPower}
 	 */
 	@JsonCreator
 	public Vote(@JsonProperty("actor") PartyId id, @JsonProperty("bid") Bid bid,
-			@JsonProperty("minPower") Integer minPower) {
+			@JsonProperty("minPower") Integer minPower,
+			@JsonProperty("maxPower") Integer maxPower) {
 		super(id, bid);
 		this.minPower = minPower;
-		if (bid == null || minPower == null || minPower < 1) {
+		this.maxPower = maxPower;
+		if (bid == null || minPower == null || minPower < 1 || maxPower == null
+				|| maxPower < minPower) {
 			throw new IllegalArgumentException(
-					"Vote must have non-null bid and minVotes, and minVotes must be >=1");
+					"Vote must have non-null bid and minVotes, and minPower must be >=1 and maxPower must be >=minPower");
 		}
 	}
@@ -35,6 +43,6 @@
 	/**
 	 * 
-	 * @return the minimum number of votes this bid must get in order for the
-	 *         vote to be valid.
+	 * @return the minimum power this bid must get in order for the vote to be
+	 *         valid.
 	 */
 	public Integer getMinPower() {
@@ -42,7 +50,18 @@
 	}
 
+	/**
+	 * 
+	 * @return the max power this bid must get in order for the vote to be
+	 *         valid.
+	 */
+
+	public Integer getMaxPower() {
+		return maxPower;
+	}
+
 	@Override
 	public String toString() {
-		return "Vote[" + getActor() + "," + getBid() + "," + minPower + "]";
+		return "Vote[" + getActor() + "," + getBid() + "," + minPower + ","
+				+ maxPower + "]";
 	}
 
@@ -51,4 +70,6 @@
 		final int prime = 31;
 		int result = super.hashCode();
+		result = prime * result
+				+ ((maxPower == null) ? 0 : maxPower.hashCode());
 		result = prime * result
 				+ ((minPower == null) ? 0 : minPower.hashCode());
@@ -65,4 +86,9 @@
 			return false;
 		Vote other = (Vote) obj;
+		if (maxPower == null) {
+			if (other.maxPower != null)
+				return false;
+		} else if (!maxPower.equals(other.maxPower))
+			return false;
 		if (minPower == null) {
 			if (other.minPower != null)
Index: events/src/test/java/actions/PartyIdTest.java
===================================================================
--- events/src/test/java/actions/PartyIdTest.java	(revision 21)
+++ events/src/test/java/actions/PartyIdTest.java	(revision 22)
@@ -26,4 +26,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testRestrictions() {
@@ -31,4 +32,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testRestrictions2() {
@@ -36,4 +38,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testRestrictions3() {
@@ -41,4 +44,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testRestrictions4() {
@@ -46,4 +50,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void testRestrictions5() {
@@ -56,4 +61,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test
 	public void testRestrictions6() {
@@ -61,4 +67,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test
 	public void testRestrictions7() {
Index: events/src/test/java/actions/PartyIdTest1.java
===================================================================
--- events/src/test/java/actions/PartyIdTest1.java	(revision 21)
+++ events/src/test/java/actions/PartyIdTest1.java	(revision 22)
@@ -43,4 +43,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void smokeTest() throws URISyntaxException {
@@ -48,4 +49,5 @@
 	}
 
+	@SuppressWarnings("unused")
 	@Test(expected = IllegalArgumentException.class)
 	public void nullTest() throws URISyntaxException {
Index: events/src/test/java/actions/VoteTest.java
===================================================================
--- events/src/test/java/actions/VoteTest.java	(revision 21)
+++ events/src/test/java/actions/VoteTest.java	(revision 22)
@@ -6,5 +6,4 @@
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -39,7 +38,7 @@
 	private final static Value VALUE2 = new NumberValue("10");
 	// issue 2 is NUMBER and thus serializes with leading '='
-	private final String votestring = "{\"vote\":{\"actor\":\"party1\",\"bid\":{\"issuevalues\":{\"issue2\":10,\"issue1\":\"value1\"}},\"minPower\":1}}";
+	private final String votestring = "{\"vote\":{\"actor\":\"party1\",\"bid\":{\"issuevalues\":{\"issue2\":10,\"issue1\":\"value1\"}},\"minPower\":1,\"maxPower\":2}}";
 
-	private static Vote vote1, vote1a, vote2, vote3, vote4;
+	private static Vote vote1, vote1a, vote2, vote3, vote4, vote5;
 
 	static {
@@ -47,8 +46,8 @@
 		issuevalues.put(ISSUE2, VALUE2);
 		bid = new Bid(issuevalues);
-		vote1 = new Vote(id, bid, 1);
-		vote1a = new Vote(id, bid, 1);
+		vote1 = new Vote(id, bid, 1, 2);
+		vote1a = new Vote(id, bid, 1, 2);
 
-		vote2 = new Vote(id2, bid, 1);
+		vote2 = new Vote(id2, bid, 1, 2);
 
 		// values swapped, so different issuevalues.
@@ -56,7 +55,8 @@
 		issuevaluesb.put(ISSUE2, VALUE2);
 		bidb = new Bid(issuevaluesb);
-		vote3 = new Vote(id, bidb, 1);
+		vote3 = new Vote(id, bidb, 1, 2);
 
-		vote4 = new Vote(id, bid, 2);
+		vote4 = new Vote(id, bid, 2, 2);
+		vote5 = new Vote(id, bid, 1, 3);
 
 	}
@@ -64,18 +64,16 @@
 	@Override
 	public List<List<Vote>> getGeneralTestData() {
-		List<List<Vote>> list = new LinkedList<>();
-		list.add(Arrays.asList(vote1, vote1a));
-		list.add(Arrays.asList(vote2));
-		list.add(Arrays.asList(vote3));
-		list.add(Arrays.asList(vote4));
-		return list;
+		return Arrays.asList(Arrays.asList(vote1, vote1a), Arrays.asList(vote2),
+				Arrays.asList(vote3), Arrays.asList(vote4),
+				Arrays.asList(vote5));
 	}
 
 	@Override
 	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("Vote.*party1.*issue2=10.*issue1=.value1.*1.*",
-				"Vote.*party2.*issue2=10.*issue1=.value1.*1.*",
-				"Vote.*party1.*issue2=10.*issue1=10.*1.*",
-				"Vote.*party1.*issue2=10.*issue1=.value1.*2.*");
+		return Arrays.asList("Vote.*party1.*issue2=10.*issue1=.value1.*1.*2.*",
+				"Vote.*party2.*issue2=10.*issue1=.value1.*1.*2.*",
+				"Vote.*party1.*issue2=10.*issue1=10.*1.*2.*",
+				"Vote.*party1.*issue2=10.*issue1=.value1.*2.*2.*",
+				"Vote.*party1.*issue2=10.*issue1=.value1.*1.*3.*");
 	}
 
Index: events/src/test/java/actions/VotesTest.java
===================================================================
--- events/src/test/java/actions/VotesTest.java	(revision 21)
+++ events/src/test/java/actions/VotesTest.java	(revision 22)
@@ -24,5 +24,5 @@
 public class VotesTest extends GeneralTests<Votes> {
 	private final ObjectMapper jackson = new ObjectMapper();
-	private final String votestring = "{\"Votes\":{\"actor\":\"partyA\",\"votes\":[{\"vote\":{\"actor\":\"partyA\",\"bid\":{\"issuevalues\":{\"is1\":\"val1\"}},\"minPower\":2}},{\"vote\":{\"actor\":\"partyA\",\"bid\":{\"issuevalues\":{\"is1\":\"val2\"}},\"minPower\":2}}]}}";
+	private final String votestring = "{\"Votes\":{\"actor\":\"partyA\",\"votes\":[{\"vote\":{\"actor\":\"partyA\",\"bid\":{\"issuevalues\":{\"is1\":\"val1\"}},\"minPower\":2,\"maxPower\":9}},{\"vote\":{\"actor\":\"partyA\",\"bid\":{\"issuevalues\":{\"is1\":\"val2\"}},\"minPower\":2,\"maxPower\":9}}]}}";
 
 	private PartyId partyA = new PartyId("partyA");
@@ -30,8 +30,8 @@
 	private Bid bid1 = new Bid("is1", new DiscreteValue("val1")),
 			bid2 = new Bid("is1", new DiscreteValue("val2"));
-	private Vote voteA1 = new Vote(partyA, bid1, 2);
-	private Vote voteA2 = new Vote(partyA, bid2, 2);
-	private Vote voteB1 = new Vote(partyB, bid1, 2);
-	private Vote voteB2 = new Vote(partyB, bid2, 2);
+	private Vote voteA1 = new Vote(partyA, bid1, 2, 9);
+	private Vote voteA2 = new Vote(partyA, bid2, 2, 9);
+	private Vote voteB1 = new Vote(partyB, bid1, 2, 9);
+	private Vote voteB2 = new Vote(partyB, bid2, 2, 9);
 
 	private Votes votes1 = new Votes(partyA, Arrays.asList(voteA1, voteA2));
@@ -95,5 +95,5 @@
 	@Test
 	public void isExtendingTestLessPower() {
-		Vote powervoteA1 = new Vote(partyA, bid1, 3);
+		Vote powervoteA1 = new Vote(partyA, bid1, 3, 9);
 		Votes powerVotes = new Votes(partyA, Arrays.asList(powervoteA1));
 		assertFalse(powerVotes.isExtending(votes1));
@@ -103,5 +103,5 @@
 	@Test(expected = IllegalArgumentException.class)
 	public void testDuplicateBidsNotAllowed() {
-		Vote voteA1similar = new Vote(partyA, bid1, 3);
+		Vote voteA1similar = new Vote(partyA, bid1, 3, 9);
 		Votes votes = new Votes(partyA, Arrays.asList(voteA1, voteA1similar));
 	}
