diff --git a/plstackapi/openstack/driver.py b/plstackapi/openstack/driver.py
index 44a8cb3..1ff99cf 100644
--- a/plstackapi/openstack/driver.py
+++ b/plstackapi/openstack/driver.py
@@ -10,8 +10,29 @@
             self.config = Config() 
         self.shell = OpenStackShell()
 
+    def create_tenant(self, **kwds):
+       """Create keystone tenant. Suggested fields: name, description, enabled"""  
+        required_fields = ['name', 'enabled', 'description']
+        for field in required_fields:
+            if field not in **kwds:
+                raise Exception, "Must specify %s" % field
 
-    def spawn_instances(self, name, key_name, hostnames=[], flavor=None, image=None, security_group=None, pubkeys=[]):
+        tenants = self.shell.keystone.tenants.findall(name=kwds['name'])
+        if not tenants:
+            tenant = self.shell.keystone.tenants.create(**kwds)
+        else:
+            tenant = tenants[0]
+        return tenant
+
+    def update_tenant(self, id, **kwds):
+        return self.shell.keystone.tenants.update(self.id, **kwds)
+
+    def delete_tenant(self, id):
+        tenant = self.shell.keystone.tenants.find(id=id)
+        return self.shell.keystone.tenants.delete(tenant)
+         
+
+    def spawn_instance(self, name, key_name=None, hostname=None, flavor=None, image=None, security_group=None, pubkeys=[]):
         if not flavor:
             flavor = self.config.nova_default_flavor
         if not image:
@@ -22,25 +43,30 @@
         authorized_keys = "\n".join(pubkeys)
         files = {'/root/.ssh/authorized_keys': authorized_keys}
        
-        for hostname in hostnames:
-            flavor_id = self.shell.nova.flavors.find(name=flavor)
-            images = self.shell.glance.get_images(name=image)
-            if not images:
-                raise Exception, "Image not found: " + image  
-            image_id = images[0]['id']
-            hints = {'force_hosts': hostname}
-            server = self.shell.nova.servers.create(
-                                                name=name,
-                                                key_name = key_name,
-                                                flavor=flavor_id,
-                                                image=image_id,
-                                                security_group = security_group,
-                                                files=files,
-                                                scheduler_hints=hints)
+        flavor_id = self.shell.nova.flavors.find(name=flavor)
+        images = self.shell.glance.get_images(name=image)
+        if not images:
+            raise Exception, "Image not found: " + image  
+        image_id = images[0]['id']
+        hints = {}
+        if hostname:
+            hints['force_hosts']= hostname
+        server = self.shell.nova.servers.create(
+                                            name=name,
+                                            key_name = key_name,
+                                            flavor=flavor_id,
+                                            image=image_id,
+                                            security_group = security_group,
+                                            files=files,
+                                            scheduler_hints=hints)
+        return server
           
-    def destroy_instances(self, name, hostnames=[]):
-        servers = self.shell.nova.servers.list()
+    def destroy_instance(self, name, id=None):
+        args = {'name': name}
+        if id:
+            args['id'] = id
+        servers = self.shell.nova.servers.findall(**args)
         for server in servers:
-            hostname = server._info['OS-EXT-SRV-ATTR:host']
-            if name == server.name and hostname in hostnames:
-                self.shell.nova.servers.delete(server)
+            if name == server.name:
+                if not id or id = server.id:
+                    self.shell.nova.servers.delete(server)
