Index: geniuswebcore/geniusweb/references/Parameters.py
===================================================================
--- geniuswebcore/geniusweb/references/Parameters.py	(revision 66)
+++ geniuswebcore/geniusweb/references/Parameters.py	(revision 67)
@@ -2,8 +2,10 @@
 
 from copy import deepcopy
-from typing import Dict, Any
+from email._header_value_parser import Parameter
+from typing import Dict, Any, List, Optional
 
 from pyson.JsonGetter import JsonGetter
 from pyson.JsonValue import JsonValue
+from geniusweb.utils import toStr
 
 
@@ -27,10 +29,12 @@
 		'''
 		@param key the key to get the value for.
-		@return the raw value
+		@return the raw value, or none if key not in parameters.
 		'''
+		if not key in self._params:
+			return None
 		return self._params[key]
 	
 	@JsonValue()
-	def getParameters(self):
+	def getParameters(self) -> Dict[str, Any]:
 		return deepcopy(self._params)
 
@@ -51,5 +55,5 @@
 
 
-	def With(self, key:str, val:object) -> Parameters :
+	def With(self, key:str, val:object) -> "Parameters" :
 		'''
 		@param key the key. Key may already in params.
@@ -62,5 +66,50 @@
 		return Parameters(newparams)
 
+	def WithParameters(self, parameters:"Parameters"):
+		'''
+		@param parameters the parameters to be added/overridden
+		@return new Parameters, with new parameters ADDED to existing. The new
+			 parameters override existing ones.
+		'''
+		newparams = dict(self._params)
+		newparams.update(parameters._params)
+		return Parameters(newparams)
 
+	def getType(self, paramname:str, classType):
+		'''
+		Getter with type-check
+		
+		@param <T>       the expected type
+		@param paramname the parameter name that must be in the map
+		@param classType the expected value type for this parameter
+		@return object of requested type.
+		@throws IllegalArgumentException if the object is not available.
+	'''
+		if not paramname in self._params \
+				or not type(self._params[paramname])==classType: 
+			raise ValueError(" Missing a parameter "+ paramname + " with a " + str(classType) + " value");
+		return self._params[paramname]
+	
+	def getDouble(self, name:str, defaultval:Optional[float], minv:Optional[float],
+			 maxv:Optional[float]) -> Optional[float]: 
+		'''
+		@param name       the parameter name
+		@param defaultval the default value to return if parameter is not
+		                  available or not inside the given range. Can be null
+		@param minv        the minimum value, or null if not applicable
+		@param maxv        the maximum value, or null if not applicable
+		@return the double value contained inside the parameter with the given
+		        name, or defaultval if the parameter does not exist, does not
+		        contain a double, or is outside [min, max].
+		'''
+		if  not name in self._params or not type(self._params[name])==float:
+			return defaultval;
+		val:float = self._params[name]
+		if minv  and val < minv:
+			return defaultval;
+		if maxv  and val > maxv:
+			return defaultval;
+		return val;
+	
 	def __hash__(self):
 		return sum( [ hash(k) + 31 * hash(v) for (k,v) in self._params.items()])
@@ -71,4 +120,4 @@
 
 	def __repr__(self):
-		return str(self._params)
+		return toStr(self._params)
 
Index: geniuswebcore/geniusweb/references/PartyRef.py
===================================================================
--- geniuswebcore/geniusweb/references/PartyRef.py	(revision 67)
+++ geniuswebcore/geniusweb/references/PartyRef.py	(revision 67)
@@ -0,0 +1,32 @@
+from pyson.JsonValue import JsonValue
+from uri.uri import URI
+
+from geniusweb import party
+from geniusweb.references.Reference import Reference
+
+
+class PartyRef (Reference):
+	'''
+	A URI reference to create a new instance of a party on a party factory
+	server. These are used to describe sesion and tournament settings.
+	'''
+
+
+	def __init__(self, party:URI ):
+		if not isinstance(party, URI):
+			raise ValueError("expected URI, but got "+repr(party))
+		self._party = party
+
+	@JsonValue()
+	def getURI(self)-> URI :
+		return self._party;
+
+	def __repr__(self) ->str:
+		return "PartyRef[" + str(self._party) + "]"
+
+
+	def __eq__(self, other):
+		return isinstance(other, self.__class__) and self._party==other._party
+
+	def __hash__(self):
+		return hash(self._party)
Index: geniuswebcore/geniusweb/references/PartyWithParameters.py
===================================================================
--- geniuswebcore/geniusweb/references/PartyWithParameters.py	(revision 67)
+++ geniuswebcore/geniusweb/references/PartyWithParameters.py	(revision 67)
@@ -0,0 +1,38 @@
+from __future__ import annotations
+from geniusweb.references.Parameters import Parameters
+from geniusweb.references.PartyRef import PartyRef
+
+class PartyWithParameters:
+	'''
+	Container holding a partyref with parameters
+	'''
+
+	def __init__(self, partyref:PartyRef , parameters:Parameters):
+		self._partyref = partyref
+		self._parameters = parameters
+
+	def getPartyRef(self) -> PartyRef :
+		return self._partyref
+
+	def getParameters(self) ->Parameters :
+		return self._parameters;
+
+
+	def With(self, parameters2:Parameters) ->"PartyWithParameters":
+		'''
+		@param parameters2 the additional parameters
+		@return this party but with the given parameters added to our parameters
+		'''
+		return PartyWithParameters(self._partyref, self._parameters.WithParameters(parameters2));
+
+	def __repr__(self)->str:
+		if self._parameters.isEmpty():
+			return str(self._partyref)
+		return str(self._partyref) + str(self._parameters)
+
+	def __eq__(self, other):
+		return isinstance(other, self.__class__) and \
+			self._partyref==other._partyref and self._parameters==other._parameters
+
+	def __hash__(self):
+		return hash((self._parameters, self._partyref))
Index: geniuswebcore/geniusweb/references/PartyWithProfile.py
===================================================================
--- geniuswebcore/geniusweb/references/PartyWithProfile.py	(revision 67)
+++ geniuswebcore/geniusweb/references/PartyWithProfile.py	(revision 67)
@@ -0,0 +1,37 @@
+from geniusweb.references.PartyWithParameters import PartyWithParameters
+from geniusweb.references.ProfileRef import ProfileRef
+
+
+class PartyWithProfile:
+
+	def __init__(self,   party:PartyWithParameters, profile:ProfileRef ) :
+		if party == None or profile == None:
+			raise ValueError("party and profile must be not None")
+
+		self._party = party
+		self._profile = profile
+
+	def getParty(self)->PartyWithParameters :
+		'''
+		@return the {@link PartyWithParameters}. never null.
+		'''
+		return self._party
+
+	def getProfile(self)-> ProfileRef:
+		'''
+		@return the profile setting for this party. Never null.
+		'''
+		return self._profile
+
+	def __hash__(self):
+		'''
+		support for using this in dict etc
+		'''
+		return hash((self._party, self._profile))
+
+	def __repr__(self)->str:
+		return "PartyWithProfile[" + str(self._party) + "," + str(self._profile) + "]"
+
+	def __eq__(self, other):
+		return isinstance(other, self.__class__) and \
+			self._party==other._party and self._profile==other._profile
Index: geniuswebcore/geniusweb/references/ProfileRef.py
===================================================================
--- geniuswebcore/geniusweb/references/ProfileRef.py	(revision 66)
+++ geniuswebcore/geniusweb/references/ProfileRef.py	(revision 67)
@@ -1,5 +1,5 @@
 from pyson.JsonGetter import JsonGetter
 from pyson.JsonValue import JsonValue
-from uri import URI # type: ignore
+from uri.uri import URI # type: ignore
 
 from geniusweb.references.Reference import Reference
Index: geniuswebcore/geniusweb/references/ProtocolRef.py
===================================================================
--- geniuswebcore/geniusweb/references/ProtocolRef.py	(revision 66)
+++ geniuswebcore/geniusweb/references/ProtocolRef.py	(revision 67)
@@ -1,5 +1,5 @@
 from pyson.JsonGetter import JsonGetter
 from pyson.JsonValue import JsonValue
-from uri import URI # type: ignore
+from uri.uri import URI # type: ignore
 
 from geniusweb.references.Reference import Reference
Index: geniuswebcore/geniusweb/references/Reference.py
===================================================================
--- geniuswebcore/geniusweb/references/Reference.py	(revision 66)
+++ geniuswebcore/geniusweb/references/Reference.py	(revision 67)
@@ -3,5 +3,5 @@
 from typing import TypeVar, Generic, List
 from pyson.JsonValue import JsonValue
-from uri import URI          # type: ignore
+from uri.uri import URI          # type: ignore
 
 class Reference (ABC):
