Index: src/main/webapp/newsession.xhtml
===================================================================
--- src/main/webapp/newsession.xhtml	(revision 28)
+++ src/main/webapp/newsession.xhtml	(revision 29)
@@ -50,5 +50,5 @@
 	<br /> Domain/Profile Server:
 	<input type="url" name="url" id="profilesserverurl"
-		value="localhost:8080/profilesserver-1.6.1"
+		value="localhost:8080/profilesserver-2.0.0"
 		pattern=".*:[0-9]+/profilesserver.*" size="30"
 		onchange="connectDomain()"> </input>
@@ -65,5 +65,5 @@
 		<br /> <b>Participants</b> <br /> Parties Server: <input type="url"
 			name="url" id="partiesserverurl"
-			value="localhost:8080/partiesserver-1.6.1"
+			value="localhost:8080/partiesserver-2.0.0"
 			pattern=".*:[0-9]+/partiesserver.*" size="30"
 			onchange="connectParties()"> </input> <br /> <br /> <b>Party
@@ -160,5 +160,5 @@
         
         var domainwebsocket = null;
-        var partieswebsocket=null;
+        var partieslistlistener=null;
         // current setting of parameters
         var parameters = {};
@@ -297,4 +297,46 @@
     	selectDomain();
     }
+    
+    /**
+    Connects to partieslist service on partiesserver and 
+    forwards reported parties into the updateParties() call.
+    */
+    class PartiesListWebsocket {
+    	constructor(target) {
+    		this.isopen=false
+    		var that=this
+            if ('WebSocket' in window) {
+            	this.partieswebsocket = new WebSocket(target);
+            } else if ('MozWebSocket' in window) {
+            	this.partieswebsocket = new MozWebSocket(target);
+            } else {
+                alert('WebSocket is not supported by this browser. Please use a newer browser');
+                return;
+            }
+            this.partieswebsocket.onopen = function () {
+            	console.log("new websocket conn made")
+            	that.isopen=true
+            };
+            this.partieswebsocket.onmessage = function (event) {
+            	console.log("new parties data came in")
+            	updateParties(JSON.parse(event.data));
+            };
+            this.partieswebsocket.onclose = function (event) {
+                if (that.isopen) {
+                    alert('Info: Server closed connection. Code: ' + event.code + 
+                    		(event.reason == "" ? "" : ", Reason: " + event.reason));
+                	that.isopen=false;
+                	updateParties({});
+                }
+            };
+    	}
+    	close() {
+    		if (this.isopen)
+    			console.log("closing parties listener")
+	    		this.isopen=false;
+				this.partieswebsocket.close()
+    	}
+    }
+    
 	/**
 	Refresh known parties using given partiesserver URL. 
@@ -302,30 +344,10 @@
 	*/
     function connectParties() {
-    	if (partieswebsocket!=null) {
-    		partieswebsocket.close();
-    		partieswebsocket=null;
+    	if (partieslistlistener!=null) {
+    		partieslistlistener.close();
     	}
 		var url=document.getElementById("partiesserverurl").value;
         var target = "ws://"+url+"/available";
-        if ('WebSocket' in window) {
-        	partieswebsocket = new WebSocket(target);
-        } else if ('MozWebSocket' in window) {
-        	partieswebsocket = new MozWebSocket(target);
-        } else {
-            alert('WebSocket is not supported by this browser. Please use a newer browser');
-            return;
-        }
-        partieswebsocket.onopen = function () {
-        	// whatever.
-        };
-        partieswebsocket.onmessage = function (event) {
-        	updateParties(JSON.parse(event.data));
-        };
-        partieswebsocket.onclose = function (event) {
-            alert('Info: Server closed connection. Code: ' + event.code + 
-            		(event.reason == "" ? "" : ", Reason: " + event.reason));
-            partieswebsocket=null;
-        	updateParties({});
-        };
+        partieslistlistener = new PartiesListWebsocket(target)
     }
 
@@ -334,12 +356,13 @@
 	 refresh table: copy all parties elements in there.
 	 Typically parties is something like
-	 [{"uri":"http:130.161.180.1:8080/partiesserver/run/randomparty-1.6.1",
+	 [{"uri":"http:130.161.180.1:8080/partiesserver/run/randomparty-2.0.0",
 		 "capabilities":{"protocols":["SAOP"]},
 		 "description":"places random bids until it can accept an offer with utility >0.6",
-		 "id":"randomparty-1.6.1",
+		 "id":"randomparty-2.0.0",
 		 "partyClass":"geniusweb.exampleparties.randomparty.RandomParty"},
 		 		 ...]
 	 */
 	function updateParties(parties) {
+		 console.log("new parties set to "+parties)
 		 updatePartiesCombobox(parties, document.getElementById("partyselection"),['SAOP','AMOP','SHAOP','MOPAC', 'MOPAC2']);
 		 updatePartiesCombobox(parties, document.getElementById("cobpartyselection"),['COB']);
@@ -659,8 +682,8 @@
 		var dtypecombo  = document.getElementById("deadlinetype");
 		if (dtypecombo.options[dtypecombo.selectedIndex].value=="TIME") {
-			deadline["deadlinetime"] = { "durationms": 1000*value};
+			deadline["DeadlineTime"] = { "durationms": 1000*value};
 		} else {
 			// ROUNDS
-			deadline["deadlinerounds"] = {"rounds": value, "durationms":10000};
+			deadline["DeadlineRounds"] = {"rounds": value, "durationms":10000};
 		}
 		var parties=[];
@@ -713,6 +736,6 @@
 	function init() {
 		selectProtocol();
-		document.getElementById("partiesserverurl").value =window.location.hostname+":8080/partiesserver-1.6.1"
-		document.getElementById("profilesserverurl").value =window.location.hostname+":8080/profilesserver-1.6.1"
+		document.getElementById("partiesserverurl").value =window.location.hostname+":8080/partiesserver-2.0.0"
+		document.getElementById("profilesserverurl").value =window.location.hostname+":8080/profilesserver-2.0.0"
 		connectDomain();
 		connectParties();
Index: src/main/webapp/newtournament.xhtml
===================================================================
--- src/main/webapp/newtournament.xhtml	(revision 28)
+++ src/main/webapp/newtournament.xhtml	(revision 29)
@@ -200,5 +200,5 @@
         
         var domainwebsocket = null;
-        var partieswebsocket=null;
+        var partieslistlistener=null;
         // currently known domains (and profiles) as coming from domainwebsocket.
         // keys are domain names, values are list of profile names
@@ -317,36 +317,59 @@
     	selectDomain();
     }
-	/**
-	Refresh known parties using given partiesserver URL. 
-	Called when user enters URL for parties server.
-	*/
-    function connectParties() {
-    	if (partieswebsocket!=null) {
-    		partieswebsocket.close();
-    		partieswebsocket=null;
-    	}
-		var url=document.getElementById("partiesserverurl").value;
-        var target = "ws://"+url+"/available";
-        if ('WebSocket' in window) {
-        	partieswebsocket = new WebSocket(target);
-        } else if ('MozWebSocket' in window) {
-        	partieswebsocket = new MozWebSocket(target);
-        } else {
-            alert('WebSocket is not supported by this browser. Please use a newer browser');
-            return;
-        }
-        partieswebsocket.onopen = function () {
-        	// whatever.
-        };
-        partieswebsocket.onmessage = function (event) {
-        	updateParties(JSON.parse(event.data));
-        };
-        partieswebsocket.onclose = function (event) {
-            alert('Info: Server closed connection. Code: ' + event.code + 
-            		(event.reason == "" ? "" : ", Reason: " + event.reason));
-            partieswebsocket=null;
-        	updateParties({});
-        };
-    }
+        
+	/**
+	Connects to partieslist service on partiesserver and 
+	forwards reported parties into the updateParties() call.
+	*/
+	class PartiesListWebsocket {
+		constructor(target) {
+			this.isopen=false
+			var that=this
+	        if ('WebSocket' in window) {
+	        	this.partieswebsocket = new WebSocket(target);
+	        } else if ('MozWebSocket' in window) {
+	        	this.partieswebsocket = new MozWebSocket(target);
+	        } else {
+	            alert('WebSocket is not supported by this browser. Please use a newer browser');
+	            return;
+	        }
+	        this.partieswebsocket.onopen = function () {
+	        	console.log("new websocket conn made")
+	        	that.isopen=true
+	        };
+	        this.partieswebsocket.onmessage = function (event) {
+	        	console.log("new parties data came in")
+	        	updateParties(JSON.parse(event.data));
+	        };
+	        this.partieswebsocket.onclose = function (event) {
+	            if (that.isopen) {
+	                alert('Info: Server closed connection. Code: ' + event.code + 
+	                		(event.reason == "" ? "" : ", Reason: " + event.reason));
+	            	that.isopen=false;
+	            	updateParties({});
+	            }
+	        };
+		}
+		close() {
+			if (this.isopen)
+				console.log("closing parties listener")
+	 		this.isopen=false;
+			this.partieswebsocket.close()
+		}
+	}   
+	
+   	/**
+   	Refresh known parties using given partiesserver URL. 
+   	Called when user enters URL for parties server.
+   	*/
+       function connectParties() {
+       	if (partieslistlistener!=null) {
+       		partieslistlistener.close();
+       	}
+   		var url=document.getElementById("partiesserverurl").value;
+           var target = "ws://"+url+"/available";
+           partieslistlistener = new PartiesListWebsocket(target)
+       }
+
 
 	/**
@@ -586,8 +609,8 @@
 		const dtypecombo  = document.getElementById("deadlinetype");
 		if (dtypecombo.options[dtypecombo.selectedIndex].value=="TIME") {
-			deadline["deadlinetime"] = { "durationms": 1000*value};
+			deadline["DeadlineTime"] = { "durationms": 1000*value};
 		} else {
 			// ROUNDS
-			deadline["deadlinerounds"] = {"rounds": value, "durationms": 10000};
+			deadline["DeadlineRounds"] = {"rounds": value, "durationms": 10000};
 		}
 		
@@ -660,6 +683,6 @@
 	*/
 	function init() {
-		document.getElementById("partiesserverurl").value =window.location.hostname+":8080/partiesserver-1.6.1";
-		document.getElementById("profilesserverurl").value =window.location.hostname+":8080/profilesserver-1.6.1";
+		document.getElementById("partiesserverurl").value =window.location.hostname+":8080/partiesserver-2.0.0";
+		document.getElementById("profilesserverurl").value =window.location.hostname+":8080/profilesserver-2.0.0";
 
 		selectSessionProtocol();
Index: src/main/webapp/plotlog.xhtml
===================================================================
--- src/main/webapp/plotlog.xhtml	(revision 28)
+++ src/main/webapp/plotlog.xhtml	(revision 29)
@@ -204,5 +204,5 @@
 					var actions=logfile['actions'];
 					var lastact = actions[actions.length -1];
-					return 'accept' in lastact ? 'Yes':'No';
+					return 'Accept' in lastact ? 'Yes':'No';
 				case "MOPAC":
 					var finalstate=logfile['phase'][Object.keys(logfile['phase'])[0]]['partyStates'];
@@ -235,8 +235,8 @@
         		var action = actions[n];
         		var item;
-        		if ('offer' in action) 
-        			action= action['offer'];
-        		else if ('accept' in action)
-        			action= action['accept'];
+        		if ('Offer' in action) 
+        			action= action['Offer'];
+        		else if ('Accept' in action)
+        			action= action['Accept'];
         		else 
         			continue;
@@ -407,10 +407,10 @@
 	 			return 0;
 	 		}
-			if (utilfunc['numberutils']!=undefined) {
+			if (utilfunc['NumberValueSetUtilities']!=undefined) {
 				// it's numeric issue. Compute
-				var minval = utilfunc['numberutils']['lowValue'];
-				var minutil = utilfunc['numberutils']['lowUtility'];
-				var maxval = utilfunc['numberutils']['highValue'];
-				var maxutil = utilfunc['numberutils']['highUtility'];
+				var minval = utilfunc['NumberValueSetUtilities']['lowValue'];
+				var minutil = utilfunc['NumberValueSetUtilities']['lowUtility'];
+				var maxval = utilfunc['NumberValueSetUtilities']['highValue'];
+				var maxutil = utilfunc['NumberValueSetUtilities']['highUtility'];
 				
 				var alfa = (value-minval) / (maxval - minval) ;
@@ -418,7 +418,7 @@
 				return alfa * maxutil + (1-alfa) * minutil;   
 			}
-			if (utilfunc['discreteutils']!=undefined) {
+			if (utilfunc['DiscreteValueSetUtilities']!=undefined) {
 				// it's discrete issue. Compute
-				return utilfunc['discreteutils']['valueUtilities'][value];
+				return utilfunc['DiscreteValueSetUtilities']['valueUtilities'][value];
 			}
 	    	setStatus("Unknown utility function type "+Object.keys(utilfunc));
Index: src/main/webapp/utilstable.xhtml
===================================================================
--- src/main/webapp/utilstable.xhtml	(revision 28)
+++ src/main/webapp/utilstable.xhtml	(revision 29)
@@ -387,10 +387,10 @@
 	 			return 0;
 	 		}
-			if (utilfunc['numberutils']!=undefined) {
+			if (utilfunc['NumberValueSetUtilities']!=undefined) {
 				// it's numeric issue. Compute
-				var minval = utilfunc['numberutils']['lowValue'];
-				var minutil = utilfunc['numberutils']['lowUtility'];
-				var maxval = utilfunc['numberutils']['highValue'];
-				var maxutil = utilfunc['numberutils']['highUtility'];
+				var minval = utilfunc['NumberValueSetUtilities']['lowValue'];
+				var minutil = utilfunc['NumberValueSetUtilities']['lowUtility'];
+				var maxval = utilfunc['NumberValueSetUtilities']['highValue'];
+				var maxutil = utilfunc['NumberValueSetUtilities']['highUtility'];
 				
 				var alfa = (value-minval) / (maxval - minval) ;
@@ -398,8 +398,8 @@
 				return alfa * maxutil + (1-alfa) * minutil;   
 			}
-			if (utilfunc['discreteutils']!=undefined) {
+			if (utilfunc['DiscreteValueSetUtilities']!=undefined) {
 				// it's discrete issue. Compute
-				if (value in utilfunc['discreteutils']['valueUtilities']) 
-					return utilfunc['discreteutils']['valueUtilities'][value];
+				if (value in utilfunc['DiscreteValueSetUtilities']['valueUtilities']) 
+					return utilfunc['DiscreteValueSetUtilities']['valueUtilities'][value];
 				return 0;
 			}
