Index: fedd/federation/topdl.py
===================================================================
--- fedd/federation/topdl.py	(revision db974edc26fcf2042b9973dac0048afab98ded7e)
+++ fedd/federation/topdl.py	(revision f37e9bf901a44a31dd31968c1aafbf084a3f5c81)
@@ -113,6 +113,70 @@
 	return "<time>%f</time><kind>%s</kind>" % (self.time, self.kind)
 
+class ServiceParam(base):
+    def __init__(self, name, type):
+	self.name = self.init_string(name)
+	self.type = self.init_string(type)
+
+    def clone(self):
+	return ServiceParam(self.name. self.type)
+
+    def to_dict(self):
+	return { 'name': name, 'type': type }
+
+    def to_xml(self):
+	return "<name>%s</name><type>%s</type>" % (self.name, self.type)
+
+class Service(base):
+    def __init__(self, name, importer=[], param=[], description=None, 
+	    status=None):
+	self.name = self.init_string(name)
+	self.importer = [self.init_string(i) \
+		for i in self.make_list(importer)]
+	self.param = [ self.init_class(ServiceParam, p) \
+		for p in self.make_list(param) ]
+	self.description = self.init_string(description)
+	self.status = self.init_string(status)
+
+    def clone(self):
+	return Service(
+		name=self.name, 
+		importer=[ i for i in self.importer], 
+		param=[p.clone() for p in self.param], 
+		description=self.description,
+		status=self.status)
+
+    def to_dict(self):
+	rv = { }
+	if self.name is not None:
+	    rv['name'] = self.name
+	if self.importer:
+	    rv['importer'] = [ i for i in self.importer ]
+	if self.param:
+	    rv['param'] = [ p.to_dict() for p in self.param ]
+	if self.description is not None:
+	    rv['description'] = self.description
+	if self.status is not None:
+	    rv['status'] = self.status
+	return rv
+
+    def to_xml(self):
+	rv = '' 
+	if self.name is not None:
+	    rv += '<name>%s</name>' % self.name
+	if self.importer:
+	    rv += join(['<importer>%s</importer>' % i \
+		    for i in self.importer],'')
+	if self.param:
+	    rv += join('<param>%s</param>' % p.to_xml() \
+		    for p in self.param], '')
+	if self.description is not None:
+	    rv += '<description>%s</description>' % self.description
+	if self.status is not None:
+	    rv += '<status>%s</status>' % self.status
+	return rv
+
 class Substrate(base):
-    def __init__(self, name, capacity=None, latency=None, attribute=[]):
+    def __init__(self, name, capacity=None, latency=None, attribute=[],
+	    localname=[], status=None, service=[], operation=[]):
 	self.name = self.init_string(name)
 	self.capacity = self.init_class(Capacity, capacity)
@@ -120,4 +184,11 @@
 	self.attribute = [ self.init_class(Attribute, a) \
 		for a in self.make_list(attribute) ]
+	self.localname = [ self.init_string(ln)\
+		for ln in self.make_list(localname) ]
+	self.status = self.init_string(status)
+	self.service = [ self.init_class(Service, s) \
+		for s in self.make_list(service)]
+	self.operation = [self.init_string(op) \
+		for op in self.make_list(operation)]
 	self.interfaces = [ ]
 
@@ -132,5 +203,9 @@
 		capacity=c,
 		latency=l,
-		attribute = [a.clone() for a in self.attribute])
+		attribute = [a.clone() for a in self.attribute],
+		localname = [ ln for ln in self.localname],
+		status = self.status,
+		service = [ s.clone() for s in self.service]
+		operation=[ op for op in operation])
 
     def to_dict(self):
@@ -142,4 +217,12 @@
 	if self.attribute:
 	    rv['attribute'] = [ a.to_dict() for a in self.attribute ]
+	if self.localname:
+	    rv['localname'] = [ ln for ln in self.localname ]
+	if self.status:
+	    rv['status'] = self.status
+	if self.service:
+	    rv['service'] = [s.to_dict() for s in self.service]
+	if self.operation:
+	    rv['operation'] = [op for op in self.operation]
 	return rv
 
@@ -154,4 +237,15 @@
 	    rv += join(["<attribute>%s</attribute>" % a.to_xml() \
 		    for a in self.attribute], "")
+	if self.localname:
+	    rv += join('<localname>%s</localname>' % ln \
+		    for ln in self.localname], '')
+	if self.status is not None:
+	    rv += '<status>%s</status>' % self.status
+	if self.service:
+	    rv += join(['<service>%s</service' % s.to_xml() \
+		    for s in self.service], '')
+	if self.operation:
+	    rv += join(['<operation>%s</operation>' % op \
+		    for op in self.operation], '')
 	return rv
 
@@ -360,5 +454,6 @@
 class Computer(base):
     def __init__(self, name, cpu=[], os=[], software=[], storage=[],
-	    interface=[], attribute=[]):
+	    interface=[], attribute=[], localname=[], status=None, service=[],
+	    operation=[]):
 	def assign_element(i):
 	    i.element = self
@@ -376,4 +471,11 @@
 	self.attribute = [ self.init_class(Attribute, a) \
 		for a in self.make_list(attribute) ]
+	self.localname = [ self.init_string(ln)\
+		for ln in self.make_list(localname) ]
+	self.status = self.init_string(status)
+	self.service = [ self.init_class(Service, s) \
+		for s in self.make_list(service)]
+	self.operation = [self.init_string(op) \
+		for op in self.make_list(operation)]
 	map(assign_element, self.interface)
 
@@ -386,5 +488,9 @@
 		storage=[x.clone() for x in self.storage],
 		interface=[x.clone() for x in self.interface],
-		attribute=[x.clone() for x in self.attribute])
+		attribute=[x.clone() for x in self.attribute],
+		localname =[ ln for for ln in self.localname],
+		status = self.status,
+		service = [s.clone() for s in self.service],
+		operation = [op for op in self.operation])
 
     def to_dict(self):
@@ -404,4 +510,12 @@
 	if self.attribute:
 	    rv['attribute'] = [ i.to_dict() for i in self.attribute ]
+	if self.localname:
+	    rv['localname'] = [ ln for ln in self.localname ]
+	if self.status:
+	    rv['status'] = self.status
+	if self.service:
+	    rv['service'] = [s.to_dict() for s in self.service]
+	if self.operation:
+	    rv['operation'] = [op for op in self.operation]
 	return { 'computer': rv }
 
@@ -424,4 +538,15 @@
 	    rv += join(["<attribute>%s</attribute>" % a.to_xml() \
 		    for a in self.attribute], "")
+	if self.localname:
+	    rv += join('<localname>%s</localname>' % ln \
+		    for ln in self.localname], '')
+	if self.status is not None:
+	    rv += '<status>%s</status>' % self.status
+	if self.service:
+	    rv += join(['<service>%s</service' % s.to_xml() \
+		    for s in self.service], '')
+	if self.operation:
+	    rv += join(['<operation>%s</operation>' % op \
+		    for op in self.operation], '')
 	return "<computer>%s</computer>" % rv
 
@@ -429,5 +554,6 @@
 
 class Testbed(base):
-    def __init__(self, uri, type, interface=[], attribute=[]):
+    def __init__(self, uri, type, interface=[], attribute=[], localname=[],
+	    status=None, service=[], operation=[]):
 	self.uri = self.init_string(uri)
 	self.type = self.init_string(type)
@@ -436,9 +562,20 @@
 	self.attribute = [ self.init_class(Attribute, c) \
 		for c in self.make_list(attribute) ]
+	self.localname = [ self.init_string(ln)\
+		for ln in self.make_list(localname) ]
+	self.status = self.init_string(status)
+	self.service = [ self.init_class(Service, s) \
+		for s in self.make_list(service)]
+	self.operation = [self.init_string(op) \
+		for op in self.make_list(operation)]
 
     def clone(self):
 	return Testbed(self.uri, self.type,
 		interface=[i.clone() for i in self.interface],
-		attribute=[a.cone() for a in self.attribute])
+		attribute=[a.cone() for a in self.attribute],
+		localname = [ ln for ln in self.localname ],
+		status=self.status,
+		service=[s.clone() for s in self.service ],
+		operation = [ op for op in self.operation ])
 
     def to_dict(self):
@@ -450,4 +587,12 @@
 	if self.attribute:
 	    rv['attribute'] = [ a.to_dict() for a in self.attribute]
+	if self.localname:
+	    rv['localname'] = [ ln for ln in self.localname ]
+	if self.status:
+	    rv['status'] = self.status
+	if self.service:
+	    rv['service'] = [s.to_dict() for s in self.service]
+	if self.operation:
+	    rv['operation'] = [op for op in self.operation]
 	return { 'testbed': rv }
 
@@ -461,4 +606,15 @@
 	    rv += join(["<attribute>%s</attribute>" % a.to_xml() \
 		    for a in self.attribute], "")
+	if self.localname:
+	    rv += join('<localname>%s</localname>' % ln \
+		    for ln in self.localname], '')
+	if self.status is not None:
+	    rv += '<status>%s</status>' % self.status
+	if self.service:
+	    rv += join(['<service>%s</service' % s.to_xml() \
+		    for s in self.service], '')
+	if self.operation:
+	    rv += join(['<operation>%s</operation>' % op \
+		    for op in self.operation], '')
 	return "<testbed>%s</testbed>" % rv
 
