Index: fedd/fedd.py
===================================================================
--- fedd/fedd.py	(revision 0d830de89964db8478df25aee7ba6b1bfc782163)
+++ fedd/fedd.py	(revision b234bb9a2329e14d8715cfee7de634cc212843b9)
@@ -162,5 +162,7 @@
 	impl = new_feddservice(opts.configfile)
     except RuntimeError, e:
-	sys.exit("Error configuring fedd: %s" % e.message)
+	str = getattr(e, 'desc', None) or getattr(e,'message', None) or \
+		"No message"
+	sys.exit("Error configuring fedd: %s" % str)
 else: 
     sys.exit("--configfile is required")
Index: fedd/fedd_bindings.wsdl
===================================================================
--- fedd/fedd_bindings.wsdl	(revision 0d830de89964db8478df25aee7ba6b1bfc782163)
+++ fedd/fedd_bindings.wsdl	(revision b234bb9a2329e14d8715cfee7de634cc212843b9)
@@ -37,4 +37,25 @@
 	</fault>
       </operation>
+      <operation name="Create">
+	<documentation>
+	  The bindings of this operation are straightforward SOAP RPC 1.1.
+	</documentation>
+	<soap:operation soapAction="Create"/> 
+	<input>
+	  <soap:body use="encoded" parts="tns:CreateRequestBody"
+	    namespace="http://www.isi.edu/faber/fedd.wsdl"
+	    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+	</input>
+	<output>
+	  <soap:body use="encoded" parts="tns:CreateResponseBody"
+	    namespace="http://www.isi.edu/faber/fedd.wsdl"
+	    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+	</output>
+	<fault>
+	  <soap:fault use="encoded"  name="tns:CreateFault"
+	    namespace="http://www.isi.edu/faber/fedd.wsdl"
+	    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+	</fault>
+      </operation>
     </binding>
 
Index: fedd/fedd_create_experiment.py
===================================================================
--- fedd/fedd_create_experiment.py	(revision 0d830de89964db8478df25aee7ba6b1bfc782163)
+++ fedd/fedd_create_experiment.py	(revision b234bb9a2329e14d8715cfee7de634cc212843b9)
@@ -1089,7 +1089,11 @@
 		    "Can't make temporary dir")
 
+	req = req.get('CreateRequestBody', None)
+	if not req:
+	    raise service_error(service_error.request,
+		    "Bad request format (no CreateRequestBody)")
 	# The tcl parser needs to read a file so put the content into that file
 	file_content=req.get('experimentdescription', None)
-	if file_content != None:
+	if file_content:
 	    try:
 		f = open(tclfile, 'w')
Index: fedd/fedd_messages.wsdl
===================================================================
--- fedd/fedd_messages.wsdl	(revision 0d830de89964db8478df25aee7ba6b1bfc782163)
+++ fedd/fedd_messages.wsdl	(revision b234bb9a2329e14d8715cfee7de634cc212843b9)
@@ -15,4 +15,12 @@
   </message>
 
+  <message name="CreateRequestMessage">
+    <part name="CreateRequestBody" type="xsd1:createRequestType"/>
+  </message>
+
+  <message name="CreateResponseMessage">
+    <part name="CreateResponseBody" type="xsd1:createResponseType"/>
+  </message>
+
   <message name="FaultMessage">
     <part name="FaultBody" type="xsd1:faultType"/>
@@ -29,4 +37,12 @@
 	message="tns:FaultMessage"/>
     </operation>
+    <operation name="Create">
+      <documentation>
+	Fill this in 
+      </documentation>
+      <input message="tns:CreateRequestMessage"/>
+      <output message="tns:CreateResponseMessage"/>
+      <fault name="CreateFault" message="tns:FaultMessage"/>
+    </operation>
   </portType>
 </definitions>
Index: fedd/fedd_proj.py
===================================================================
--- fedd/fedd_proj.py	(revision 0d830de89964db8478df25aee7ba6b1bfc782163)
+++ fedd/fedd_proj.py	(revision b234bb9a2329e14d8715cfee7de634cc212843b9)
@@ -20,4 +20,5 @@
 from fedd_util import *
 from fedd_allocate_project import *
+from fedd_create_experiment import *
 import parse_detail
 from service_error import *
@@ -31,15 +32,21 @@
     """
     # Attributes that can be parsed from the configuration file
-    bool_attrs = ("dynamic_projects", "project_priority")
+    bool_attrs = ("dynamic_projects", "project_priority", "create_debug")
     emulab_attrs = ("boss", "ops", "domain", "fileserver", "eventserver")
     id_attrs = ("testbed", "cert_file", "cert_pwd", "trusted_certs", "proxy",
 	    "proxy_cert_file", "proxy_cert_pwd", "proxy_trusted_certs",
 	    "dynamic_projects_url", "dynamic_projects_cert_file", 
-	    "dynamic_projects_cert_pwd", "dynamic_projects_trusted_certs")
+	    "dynamic_projects_cert_pwd", "dynamic_projects_trusted_certs",
+	    "create_experiment_cert_file", "create_experiment_cert_pwd",
+	    "create_experiment_trusted_certs", "federation_script_dir",
+	    "ssh_pubkey_file")
 
     # Used by the SOAP caller
     soap_namespaces = ('http://www.isi.edu/faber/fedd.wsdl',
 	    'http://www.isi.edu/faber/fedd_internal.wsdl')
-    soap_methods = { 'RequestAccess': 'soap_RequestAccess' }
+    soap_methods = {\
+	    'RequestAccess': 'soap_RequestAccess',\
+	    'Create' : 'soap_Create',\
+	    }
     xmlrpc_methods = { 'RequestAccess': 'xmlrpc_RequestAccess' }
 
@@ -85,10 +92,5 @@
 	self.fedid_default = "user"
 	self.restricted = []
-
-	# Delete these
-	self.wap = '/usr/testbed/sbin/wap'
-	self.newproj = '/usr/testbed/sbin/newproj'
-	self.mkproj = '/usr/testbed/sbin/mkproj'
-	self.grantnodetype = '/usr/testbed/sbin/grantnodetype'
+	self.create_debug = False
 
 	# Read the configuration
@@ -120,4 +122,12 @@
 		self.dynamic_projects_trusted_certs,
 		self.dynamic_projects_cert_pwd)
+
+	# Initialize create experiment certs
+	if not self.create_experiment_cert_file:
+	    self.create_experiment_cert_file = self.proxy_cert_file
+	    self.create_experiment_cert_pwd = self.proxy_cert_pwd
+
+	if self.create_experiment_trusted_certs == None:
+	    self.create_experiment_trusted_certs = self.proxy_trusted_certs
 
 	if self.dynamic_projects_url == None:
@@ -130,4 +140,28 @@
 		fedd_allocate_project_remote(self.dynamic_projects, 
 			self.dynamic_projects_url, proj_certs)
+
+	create_kwargs = { }
+	if self.federation_script_dir:
+	    create_kwargs['scripts_dir'] = self.federation_script_dir
+	if self.ssh_pubkey_file:
+	    create_kwargs['ssh_pubkey_file'] = self.ssh_pubkey_file
+	if self.create_experiment_cert_file:
+	    create_kwargs['cert_file'] = self.create_experiment_cert_file
+	if self.create_experiment_cert_pwd:
+	    create_kwargs['cert_pwd'] = self.create_experiment_cert_pwd
+	if self.create_experiment_trusted_certs:
+	    create_kwargs['trusted_certs'] = \
+		    self.create_experiment_trusted_certs
+
+	self.create_experiment = fedd_create_experiment_local(
+	    tbmap = { 
+		'deter':'https://users.isi.deterlab.net:23235',
+		'emulab':'https://users.isi.deterlab.net:23236',
+		'ucb':'https://users.isi.deterlab.net:23237',
+		},
+	    trace_file=sys.stderr,
+	    debug=self.create_debug,
+	    **create_kwargs
+	) 
 
     def dump_state(self):
@@ -525,4 +559,15 @@
 	return resp
 
+    def soap_Create(self, ps, fid):
+	req = ps.Parse(CreateRequestMessage.typecode)
+
+	msg = self.create_experiment.create_experiment(unpack_soap(req), fedid)
+
+	resp = CreateResponseMessage()
+	resp.set_element_CreateResponseBody(
+		pack_soap(resp, "CreateResponseBody", msg))
+
+	return resp
+
     def xmlrpc_RequestAccess(self, params, fid):
 	msg = self.RequestAccess(params[0], fedid)
Index: fedd/fedd_types.xsd
===================================================================
--- fedd/fedd_types.xsd	(revision 0d830de89964db8478df25aee7ba6b1bfc782163)
+++ fedd/fedd_types.xsd	(revision b234bb9a2329e14d8715cfee7de634cc212843b9)
@@ -154,4 +154,94 @@
       <xsd:element name="eventServer" type="xsd:string"/>
       <xsd:element name="fedAttr" type="tns:fedAttrType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="vtoponodeType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Node in the virtual topology of a federated experiment (emulab legacy)
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="vname" type="xsd:string"/>
+      <xsd:element name="ips" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="vtoponodesType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Collection of nodes in the virtual topology of a federated experiment (emulab legacy)
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="node" type="tns:vtoponodeType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="vtopolanType">
+    <xsd:annotation>
+      <xsd:documentation>
+	LAN in the virtual topology of a federated experiment (emulab legacy)
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="vname" type="xsd:string"/>
+      <xsd:element name="vnode" type="xsd:string"/>
+      <xsd:element name="ip" type="xsd:string"/>
+      <xsd:element name="bandwidth" type="xsd:int"/>
+      <xsd:element name="delay" type="xsd:float"/>
+      <xsd:element name="member" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="vtopolansType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Collection of LAN in the virtual topology of a federated experiment (emulab legacy)
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="lan" type="tns:vtopolanType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="vtopoType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The virtual topology of a federated experiment (emulab legacy)
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="nodes" type="tns:vtoponodesType"/>
+      <xsd:element name="lans" type="tns:vtopolansType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="visnodeType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Node in the visualization of a federated experiment (emulab legacy)
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="name" type="xsd:string"/>
+      <xsd:element name="x" type="xsd:int"/>
+      <xsd:element name="y" type="xsd:int"/>
+      <xsd:element name="type" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="visType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The visualization of a federated experiment (emulab legacy)
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="node" type="tns:visnodeType" minOccurs="0"
 	maxOccurs="unbounded"/>
     </xsd:sequence>
@@ -246,6 +336,10 @@
     </xsd:annotation>
     <xsd:sequence>
-      <xsd:element name="emulab" type="emulabType" minOccurs="1" 
-	maxOccurs="unbounded"/>
+      <xsd:element name="emulab" type="tns:emulabType" minOccurs="1" 
+	maxOccurs="unbounded"/>
+      <xsd:element name="experiment" type="tns:vtopoType" minOccurs="0"
+	maxOccurs="1"/>
+      <xsd:element name="vis" type="tns:visType" minOccurs="0"
+	maxOccurs="1"/>
     </xsd:sequence>
   </xsd:complexType>
Index: fedd/fedd_util.py
===================================================================
--- fedd/fedd_util.py	(revision 0d830de89964db8478df25aee7ba6b1bfc782163)
+++ fedd/fedd_util.py	(revision b234bb9a2329e14d8715cfee7de634cc212843b9)
@@ -181,5 +181,10 @@
     """
     if getattr(contents, "__iter__", None) != None:
-	obj = getattr(container, "new_%s" % name, None)()
+	attr =getattr(container, "new_%s" % name, None)
+	if attr: obj = attr()
+	else:
+	    print dir(container)
+	    raise TypeError("%s does not have a new_%s attribute" % \
+		    (container, name))
 	for e, v in contents.iteritems():
 	    assign = getattr(obj, "set_element_%s" % e, None) or \
