Index: fedd/federation/experiment_control.py
===================================================================
--- fedd/federation/experiment_control.py	(revision 7888aeef779fdb33135707fc370dd03542e6ceb8)
+++ fedd/federation/experiment_control.py	(revision fd07c488ae463ae5379b6dad5fa1bd5a2838f26c)
@@ -815,5 +815,5 @@
         else: return None
 
-    def get_access(self, tb, nodes, tbparam, access_user, masters):
+    def get_access(self, tb, nodes, tbparam, access_user, masters, tbmap):
         """
         Get access to testbed through fedd and set the parameters for that tb
@@ -835,5 +835,5 @@
 			"More than one project export is not supported")
 
-        uri = self.tbmap.get(testbed_base(tb), None)
+        uri = tbmap.get(testbed_base(tb), None)
         if not uri:
             raise service_error(service_error.server_config, 
@@ -971,11 +971,11 @@
 		self.log.error("Bad attribute in response: %s" % a)
 
-    def release_access(self, tb, aid, uri=None):
+    def release_access(self, tb, aid, tbmap=None, uri=None):
         """
         Release access to testbed through fedd
         """
 
-	if not uri:
-	    uri = self.tbmap.get(tb, None)
+	if not uri and tbmap:
+	    uri = tbmap.get(tb, None)
         if not uri:
             raise service_error(service_error.server_config, 
@@ -1115,5 +1115,5 @@
     def allocate_resources(self, allocated, masters, eid, expid, 
             tbparams, top, topo, tmpdir, alloc_log=None, log_collector=None, 
-	    attrs=None, connInfo={}):
+	    attrs=None, connInfo={}, tbmap=None):
 
         started = { }           # Testbeds where a sub-experiment started 
@@ -1122,4 +1122,6 @@
         # XXX
         fail_soft = False
+
+	if tbmap is None: tbmap = { }
 
         log = alloc_log or self.log
@@ -1134,6 +1136,5 @@
 	    tb_attrs = copy.copy(attrs)
 	    thread_pool.wait_for_slot()
-	    uri = tbparams[tb].get('uri', \
-		    self.tbmap.get(testbed_base(tb), None))
+	    uri = tbparams[tb].get('uri', tbmap.get(testbed_base(tb), None))
 	    base, suffix = split_testbed(tb)
 	    if suffix:
@@ -1214,6 +1215,6 @@
                 # release the allocations
                 for tb in tbparams.keys():
-                    self.release_access(tb, tbparams[tb]['allocID'],
-			    tbparams[tb].get('uri', None))
+                    self.release_access(tb, tbparams[tb]['allocID'], 
+			    tbmap=tbmap, uri=tbparams[tb].get('uri', None))
                 # Remove the placeholder
                 self.state_lock.acquire()
@@ -1406,5 +1407,5 @@
 
     def get_access_to_testbeds(self, testbeds, access_user, allocated, 
-	    tbparams, masters):
+	    tbparams, masters, tbmap):
 	"""
 	Request access to the various testbeds required for this instantiation
@@ -1414,5 +1415,5 @@
 	"""
 	for tb in testbeds:
-	    self.get_access(tb, None, tbparams, access_user, masters)
+	    self.get_access(tb, None, tbparams, access_user, masters, tbmap)
 	    allocated[tb] = 1
 
@@ -1610,4 +1611,11 @@
         self.check_experiment_access(fid, key)
 
+	# Install the testbed map entries supplied with the request into a copy
+	# of the testbed map.
+	tbmap = dict(self.tbmap)
+	for m in req.get('testbedmap', []):
+	    if 'testbed' in m and 'uri' in m:
+		tbmap[m['testbed']] = m['uri']
+
         try:
             tmpdir = tempfile.mkdtemp(prefix="split-")
@@ -1755,5 +1763,5 @@
 
 	    self.get_access_to_testbeds(testbeds, access_user, allocated, 
-		    tbparams, masters)
+		    tbparams, masters, tbmap)
 
 	    self.split_topology(top, topo, testbeds)
@@ -1791,5 +1799,5 @@
 		    self.auth.set_attribute(asignee, "%s/%s" % (configpath, f))
 
-	    part = experiment_partition(self.auth, self.store_url, self.tbmap,
+	    part = experiment_partition(self.auth, self.store_url, tbmap,
 		    self.muxmax, self.direct_transit)
 	    part.add_portals(top, topo, eid, pmasters, tbparams, ip_allocator,
@@ -1893,5 +1901,5 @@
                 args=(allocated, masters, eid, expid, tbparams, 
                     top, topo, tmpdir, alloc_log, alloc_collector, attrs,
-		    connInfo),
+		    connInfo, tbmap),
                 name=eid)
         t.start()
