diff --git a/plstackapi/openstack/manager.py b/plstackapi/openstack/manager.py
new file mode 100644
index 0000000..4bd4aae
--- /dev/null
+++ b/plstackapi/openstack/manager.py
@@ -0,0 +1,46 @@
+from plstackapi.planetstack.config import Config
+from plstackapi.openstack.shell import OpenStackShell
+
+class Manager:
+
+    def __init__(self, config = None): 
+        if config:
+            self.config = Config(config)
+        else:
+            self.config = Config() 
+        self.shell = OpenStackShell()
+
+
+    def spawn_instances(self, name, key_name, hostnames=[], flavor=None, image=None, security_group=None, pubkeys=[]):
+        if not flavor:
+            flavor = self.config.nova_default_flavor
+        if not image:
+            image = self.config.nova_default_imave
+        if not security_group:
+            security_group = self.config.nova_default_security_group 
+
+        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)
+          
+    def destroy_instances(self, name, hostnames=[]):
+        servers = self.shell.nova.servers.list()
+        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)
