diff --git a/static/src/instancehandler/instance_create.js b/static/src/instancehandler/instance_create.js
index 47cba12..4273f90 100644
--- a/static/src/instancehandler/instance_create.js
+++ b/static/src/instancehandler/instance_create.js
@@ -14,6 +14,31 @@
    limitations under the License.
 */
 
+function openModalCreatePDU(args) {
+    var select2_groups = $('#pdu_vim_accounts').select2({
+        placeholder: 'Select Vims',
+        width: '100%',
+        ajax: {
+            url: args.vim_list_url,
+            dataType: 'json',
+            processResults: function (data) {
+                vims = [];
+                if (data['datacenters']) {
+                    for (d in data['datacenters']) {
+                        var datacenter = data['datacenters'][d];
+                        vims.push({ id: datacenter['_id'], text: datacenter['name'] })
+                    }
+                }
+                return {
+                    results: vims
+                };
+            }
+        }
+    });
+
+    $('#modal_new_pdu').modal('show');
+}
+
 function openModalCreateNS(args) {
     // load vim account list
     select2_groups = $('#vimAccountId').select2({
@@ -27,7 +52,7 @@
                 if (data['datacenters']) {
                     for (d in data['datacenters']) {
                         var datacenter = data['datacenters'][d];
-                        vims.push({id: datacenter['_id'], text: datacenter['name']})
+                        vims.push({ id: datacenter['_id'], text: datacenter['name'] })
                     }
                 }
 
@@ -51,7 +76,7 @@
                 if (data['descriptors']) {
                     for (d in data['descriptors']) {
                         var nsd = data['descriptors'][d];
-                        nsd_list.push({id: nsd['_id'], text: nsd['name']})
+                        nsd_list.push({ id: nsd['_id'], text: nsd['name'] })
                     }
                 }
 
diff --git a/static/src/instancehandler/instance_list.js b/static/src/instancehandler/instance_list.js
index a2c2003..88a1f57 100644
--- a/static/src/instancehandler/instance_list.js
+++ b/static/src/instancehandler/instance_list.js
@@ -66,6 +66,38 @@
     })
 }
 
+function deletePDU(instance_name, instance_id) {
+    var url = '/instances/pdu/'+instance_id+'/delete';
+    bootbox.confirm("Are you sure want to delete " + instance_name + "?", function (result) {
+        if (result) {
+            var dialog = bootbox.dialog({
+                message: '<div class="text-center"><i class="fa fa-spin fa-spinner"></i> Loading...</div>',
+                closeButton: true
+            });
+            $.ajax({
+                url: url,
+                type: 'GET',
+                dataType: "json",
+                contentType: "application/json;charset=utf-8",
+                success: function (result) {
+                    if (result['error'] == true){
+                        dialog.modal('hide');
+                        bootbox.alert("An error occurred.");
+                    }
+                    else {
+                        dialog.modal('hide');
+                        location.reload();
+                    }
+                },
+                error: function (error) {
+                    dialog.modal('hide');
+                    bootbox.alert("An error occurred.");
+                }
+            });
+        }
+    })
+}
+
 var addFormGroup = function (event) {
     event.preventDefault();
 
@@ -87,6 +119,27 @@
     $formGroup.remove();
 };
 
+var addInterfaceGroup = function (event) {
+    event.preventDefault();
+
+    var $formGroup = $(this).closest('.interface-group');
+    var $formGroupClone = $formGroup.clone();
+
+    $(this)
+        .toggleClass('btn-success btn-add btn-danger btn-remove')
+        .html('–');
+
+    $formGroupClone.find('input').val('');
+    $formGroupClone.insertAfter($formGroup);
+
+};
+
+var removeInterfaceGroup = function (event) {
+    event.preventDefault();
+    var $formGroup = $(this).closest('.interface-group');
+    $formGroup.remove();
+};
+
 function showTopology(type, instance_id) {
     var url = '/instances/'+type+'/'+instance_id+'/topology';
     window.location = url;
@@ -156,8 +209,39 @@
     }, json_editor_settings);
 
 
-    $(document).on('click', '.btn-add', addFormGroup);
-    $(document).on('click', '.btn-remove', removeFormGroup);
+    $(document).on('click', '.primitive-group .btn-add', addFormGroup);
+    $(document).on('click', '.primitive-group .btn-remove', removeFormGroup);
+
+    $(document).on('click', '.interface-group .btn-add', addInterfaceGroup);
+    $(document).on('click', '.interface-group .btn-remove', removeInterfaceGroup);
+
+    $("#formCreatePDU").submit(function (event) {
+        event.preventDefault(); //prevent default action
+        var post_url = $(this).attr("action"); //get form action url
+        var request_method = $(this).attr("method"); //get form GET/POST method
+        var form_data = new FormData(this); //Encode form elements for submission
+        $.ajax({
+            url: post_url,
+            type: request_method,
+            data: form_data,
+            headers: {
+                "Accept": 'application/json'
+            },
+            contentType: false,
+            processData: false
+        }).done(function (response, textStatus, jqXHR) {
+            table.ajax.reload();
+            $('#modal_new_pdu').modal('hide');
+        }).fail(function (result) {
+            var data = result.responseJSON;
+            var title = "Error " + (data.code ? data.code : 'unknown');
+            var message = data.detail ? data.detail : 'No detail available.';
+            bootbox.alert({
+                title: title,
+                message: message
+            });
+        });
+    });
 
     $("#formActionNS").submit(function (event) {
         event.preventDefault(); //prevent default action
