diff --git a/lib/rapi/rlib1.py b/lib/rapi/rlib1.py
index e73fc47f438ac5cd8412c821e72cf656d4e2edcc..57b428282a7db31194cf8f98fbd236b9a35975f2 100644
--- a/lib/rapi/rlib1.py
+++ b/lib/rapi/rlib1.py
@@ -33,10 +33,9 @@ from ganeti import http
 from ganeti.rapi import baserlib
 
 
-I_FIELDS = ["name", "os", "pnode", "snodes",
-            "admin_state", "admin_ram",
-            "disk_template", "ip", "mac", "bridge",
-            "sda_size", "sdb_size", "vcpus",
+I_FIELDS = ["name", "os", "pnode", "snodes", "admin_state", "disk_template",
+            "ip", "mac", "bridge", "sda_size", "sdb_size", "be/vcpus",
+            "be/memory", "be/auto_balance",
             "oper_state", "status", "tags"]
 
 N_FIELDS = ["name", "dtotal", "dfree",
@@ -276,6 +275,17 @@ class R_instances_name(baserlib.R_Generic):
 
     return baserlib.MapFields(I_FIELDS, result[0])
 
+  def DELETE(self):
+    """Removes an instance.
+
+    """
+    instance_name = self.items[0]
+    op = ganeti.opcodes.OpRemoveInstance(instance_name=instance_name,
+                                         ignore_failures=True)
+    job_id = ganeti.cli.SendJob([op])
+
+    return job_id
+
 
 class R_instances_name_tags(baserlib.R_Generic):
   """/instances/[instance_name]/tags resource.
diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index 790839a700398c7818820284795b1bfa156b3c8d..479786e9809ddd948295c4a6e25ebb9a13c9f429 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -139,7 +139,6 @@ class R_2_instances(baserlib.R_Generic):
   """
   DOC_URI = "/2/instances"
 
-
   def GET(self):
     """Returns a list of all available instances.
 
@@ -197,6 +196,54 @@ class R_2_instances(baserlib.R_Generic):
       return baserlib.BuildUriList(instanceslist, "/2/instances/%s",
                                    uri_fields=("id", "uri"))
 
+  def PUT(self):
+    """Create an instance.
+
+    Returns:
+      A job id.
+
+    """
+    opts = self.post_data
+
+    # beparams
+    mem = opts.get('mem', None)
+    vcpus = opts.get('vcpus', None)
+    auto_balance = opts.get('auto_balance', None)
+
+    beparams = {}
+
+    for key, const in [(mem, constants.BE_MEMORY),
+                       (vcpus, constants.BE_VCPUS),
+                       (auto_balance, constants.BE_AUTO_BALANCE)]:
+      if key is not None:
+        beparams[const] = key
+
+    op = ganeti.opcodes.OpCreateInstance(
+        instance_name=opts.get('name'),
+        disk_size=opts.get('size', 20 * 1024),
+        swap_size=opts.get('swap', 4 * 1024),
+        disk_template=opts.get('disk_template', None),
+        mode=constants.INSTANCE_CREATE,
+        os_type=opts.get('os'),
+        pnode=opts.get('pnode'),
+        snode=opts.get('snode'),
+        ip=opts.get('ip', 'none'),
+        bridge=opts.get('bridge', None),
+        start=opts.get('start', True),
+        ip_check=opts.get('ip_check', True),
+        wait_for_sync=opts.get('wait_for_sync', True),
+        mac=opts.get('mac', 'auto'),
+        hypervisor=opts.get('hypervisor', None),
+        hvparams=opts.get('hvparams', {}),
+        beparams=beparams,
+        iallocator=opts.get('iallocator', None),
+        file_storage_dir=opts.get('file_storage_dir', None),
+        file_driver=opts.get('file_driver', 'loop'),
+        )
+
+    job_id = ganeti.cli.SendJob([op])
+    return job_id
+
 
 class R_2_instances_name_tags(baserlib.R_Generic):
   """/2/instances/[instance_name]/tags resource.