Index: fedd/fedd_bindings.wsdl
===================================================================
--- fedd/fedd_bindings.wsdl	(revision 27b6aea0e832c3f3056bb6123d69c22b5d2f0bae)
+++ fedd/fedd_bindings.wsdl	(revision c52c48d3f75f80dcee9581481e934a8718f8107f)
@@ -101,4 +101,25 @@
 	</fault>
       </operation>
+      <operation name="Info">
+	<documentation>
+	  The bindings of this operation are straightforward SOAP RPC 1.1.
+	</documentation>
+	<soap:operation soapAction="Info"/> 
+	<input>
+	  <soap:body use="encoded" parts="tns:InfoRequestBody"
+	    namespace="http://www.isi.edu/faber/fedd.wsdl"
+	    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+	</input>
+	<output>
+	  <soap:body use="encoded" parts="tns:InfoResponseBody"
+	    namespace="http://www.isi.edu/faber/fedd.wsdl"
+	    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+	</output>
+	<fault>
+	  <soap:fault use="encoded"  name="tns:FeddFault"
+	    namespace="http://www.isi.edu/faber/fedd.wsdl"
+	    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+	</fault>
+      </operation>
     </binding>
 
Index: fedd/fedd_client.py
===================================================================
--- fedd/fedd_client.py	(revision 27b6aea0e832c3f3056bb6123d69c22b5d2f0bae)
+++ fedd/fedd_client.py	(revision c52c48d3f75f80dcee9581481e934a8718f8107f)
@@ -346,4 +346,5 @@
 	    self.key="vis"
 	    self.xml='vis'
+	elif op == 'Info': pass
 	else:
 	    raise TypeError("Bad op: %s" % op)
@@ -415,9 +416,12 @@
 	    sys.exit("Error processing RPC: %s" % e)
 
-	try:
-	    if resp_dict.has_key(self.key):
-		self.print_xml(resp_dict[self.key])
-	except RuntimeError, e:
-	    sys.exit("Bad response. %s" % e.message)
+	if getattr(self, 'key', None):
+	    try:
+		if resp_dict.has_key(self.key):
+		    self.print_xml(resp_dict[self.key])
+	    except RuntimeError, e:
+		sys.exit("Bad response. %s" % e.message)
+	else:
+	    print resp_dict
 
 class create(fedd_rpc):
@@ -632,4 +636,5 @@
 	'vtopo': exp_data('Vtopo'),\
 	'vis': exp_data('Vis'),\
+	'info': exp_data('Info'),\
     }
 
Index: fedd/fedd_create_experiment.py
===================================================================
--- fedd/fedd_create_experiment.py	(revision 27b6aea0e832c3f3056bb6123d69c22b5d2f0bae)
+++ fedd/fedd_create_experiment.py	(revision c52c48d3f75f80dcee9581481e934a8718f8107f)
@@ -1278,21 +1278,22 @@
 		for tb in tbparams.keys() \
 		    if tbparams[tb].has_key('federant') ],\
-		    'experiment': vtopo,\
+		    'vtopo': vtopo,\
+		    'vis' : vis,
+		    'experimentID' : [\
+			    { 'fedid': copy.copy(expid) }, \
+			    { 'localname': eid },\
+			],\
+		    'experimentAccess': { 'X509' : expcert },\
+		}
+	
+	self.state[expid] = { 'federant' : [ tbparams[tb]['federant'] \
+		for tb in tbparams.keys() \
+		    if tbparams[tb].has_key('federant') ],\
+		    'vtopo': vtopo,\
 		    'vis' : vis,
 		    'experimentID' : [\
 			    { 'fedid': expid }, { 'localname': eid },\
 			],\
-		    'experimentAccess': { 'X509' : expcert },\
 		}
-	
-	self.state[expid] = {\
-		'fedid': expid,
-		'localname': eid,
-		'federant': [ tbparams[tb]['federant'] \
-		    for tb in tbparams.keys() \
-			if tbparams[tb].has_key('federant') ],\
-		'vis': vis,\
-		'vtopo': vtopo,\
-	    }
 	self.state[eid] = self.state[expid]
 	return resp
@@ -1350,4 +1351,30 @@
 	    raise service_error(service_error.req, "No such experiment")
 
+    def get_info(self, req, fid):
+
+	req = req.get('InfoRequestBody', None)
+	if not req:
+	    raise service_error(service_error.req,
+		    "Bad request format (no VisRequestBody)")
+	exp = req.get('experiment', None)
+	if exp:
+	    if exp.has_key('fedid'):
+		key = fedid(bits=exp['fedid'])
+		keytype = "fedid"
+	    elif exp.has_key('localname'):
+		key = exp['localname']
+		keytype = "localname"
+	    else:
+		raise service_error(service_error.req, "Unknown lookup type")
+	else:
+	    raise service_error(service_error.req, "No request?")
+
+	# The state may be massaged by the service function that called
+	# get_info (e.g., encoded for XMLRPC transport) so send a copy of the
+	# state.
+	if self.state.has_key(key):
+	    return copy.deepcopy(self.state[key])
+	else:
+	    raise service_error(service_error.req, "No such experiment")
 
 if __name__ == '__main__':
Index: fedd/fedd_messages.wsdl
===================================================================
--- fedd/fedd_messages.wsdl	(revision 27b6aea0e832c3f3056bb6123d69c22b5d2f0bae)
+++ fedd/fedd_messages.wsdl	(revision c52c48d3f75f80dcee9581481e934a8718f8107f)
@@ -39,4 +39,12 @@
   </message>
 
+  <message name="InfoRequestMessage">
+    <part name="InfoRequestBody" type="xsd1:infoRequestType"/>
+  </message>
+
+  <message name="InfoResponseMessage">
+    <part name="InfoResponseBody" type="xsd1:infoResponseType"/>
+  </message>
+
   <message name="FaultMessage">
     <part name="FaultBody" type="xsd1:faultType"/>
@@ -76,4 +84,12 @@
       <fault name="FeddFault" message="tns:FaultMessage"/>
     </operation>
+    <operation name="Info">
+      <documentation>
+	Fill this in 
+      </documentation>
+      <input message="tns:InfoRequestMessage"/>
+      <output message="tns:InfoResponseMessage"/>
+      <fault name="FeddFault" message="tns:FaultMessage"/>
+    </operation>
   </portType>
 </definitions>
Index: fedd/fedd_proj.py
===================================================================
--- fedd/fedd_proj.py	(revision 27b6aea0e832c3f3056bb6123d69c22b5d2f0bae)
+++ fedd/fedd_proj.py	(revision c52c48d3f75f80dcee9581481e934a8718f8107f)
@@ -50,4 +50,5 @@
 	    'Vtopo' : 'soap_Vtopo',\
 	    'Vis' : 'soap_Vis',\
+	    'Info' : 'soap_Info',\
 	    }
     xmlrpc_methods = { \
@@ -56,4 +57,5 @@
 	    'Vtopo' : 'xmlrpc_Vtopo',\
 	    'Vis' : 'xmlrpc_Vis',\
+	    'Info' : 'xmlrpc_Info',\
 	    }
 
@@ -600,4 +602,15 @@
 	return resp
 
+    def soap_Info(self, ps, fid):
+	req = ps.Parse(InfoRequestMessage.typecode)
+
+	msg = self.create_experiment.get_info(unpack_soap(req), fedid)
+
+	resp = InfoResponseMessage()
+	resp.set_element_InfoResponseBody(
+		pack_soap(resp, "InfoResponseBody", msg))
+
+	return resp
+
     def xmlrpc_RequestAccess(self, params, fid):
 	msg = self.RequestAccess(params[0], fedid)
@@ -618,5 +631,5 @@
 	else:
 	    raise service_error(service_error.internal,
-		    "No response generated?!");
+		    "No response generated?!")
 
     def xmlrpc_Vtopo(self, params, fid):
@@ -629,5 +642,5 @@
 	else:
 	    raise service_error(service_error.internal,
-		    "No response generated?!");
+		    "No response generated?!")
 
     def xmlrpc_Vis(self, params, fid):
@@ -640,5 +653,15 @@
 	else:
 	    raise service_error(service_error.internal,
-		    "No response generated?!");
+		    "No response generated?!")
+
+    def xmlrpc_Info(self, params, fid):
+	p = decapsulate_binaries(params[0], ('fedid',))
+	msg = self.create_experiment.get_info(p, fedid)
+	if msg != None:
+	    return encapsulate_binaries({ "InfoResponseBody" : msg },
+		    ('fedid',))
+	else:
+	    raise service_error(service_error.internal,
+		    "No response generated?!")
 
     def read_trust(self, trust):
Index: fedd/fedd_types.xsd
===================================================================
--- fedd/fedd_types.xsd	(revision 27b6aea0e832c3f3056bb6123d69c22b5d2f0bae)
+++ fedd/fedd_types.xsd	(revision c52c48d3f75f80dcee9581481e934a8718f8107f)
@@ -333,5 +333,5 @@
       <xsd:element name="federant" type="tns:federatedExperimentType" 
         minOccurs="1" maxOccurs="unbounded"/>
-      <xsd:element name="experiment" type="tns:vtopoType" minOccurs="0"
+      <xsd:element name="vtopo" type="tns:vtopoType" minOccurs="0"
 	maxOccurs="1"/>
       <xsd:element name="vis" type="tns:visType" minOccurs="0"
@@ -388,4 +388,34 @@
       <xsd:element name="experiment" type="tns:IDType"/>
       <xsd:element name="vis" type="tns:visType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="infoRequestType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Request for an existing experiment's topology
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="experiment" type="tns:IDType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="infoResponseType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Information on an instantiated experiment.  The createResponse without
+	the secret information
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="federant" type="tns:federatedExperimentType" 
+        minOccurs="1" maxOccurs="unbounded"/>
+      <xsd:element name="vtopo" type="tns:vtopoType" minOccurs="0"
+	maxOccurs="1"/>
+      <xsd:element name="vis" type="tns:visType" minOccurs="0"
+	maxOccurs="1"/>
+      <xsd:element name="experimentID" type="tns:IDType" minOccurs="1"
+	maxOccurs="unbounded"/>
     </xsd:sequence>
   </xsd:complexType>
