diff --git a/projecthandler/template/project/projectlist.html b/projecthandler/template/project/projectlist.html
index e8cc77a..28888fc 100644
--- a/projecthandler/template/project/projectlist.html
+++ b/projecthandler/template/project/projectlist.html
@@ -28,7 +28,6 @@
  {% csrf_token %}
 <div class="row">
 <div class="col-md-12">
-
     <div class="box">
         <div class="box-header with-border">
                   <h3 class="box-title">Projects</h3>
@@ -43,9 +42,7 @@
 			<table id="projects_table" class="table table-bordered table-striped">
 				<thead>
 					<tr>
-
 						<th>Name</th>
-
 						<th>Modification Date</th>
 						<th>Creation Date</th>
 						<th>Actions</th>
@@ -151,73 +148,72 @@
 
     function deleteProject(project_id) {
         var url = "/projects/" + project_id+"/delete";
-    bootbox.confirm("Are you sure want to delete?", function (result) {
-        if (result) {
-            $.ajax({
-            url: url,
-            type: 'GET',
-            headers: {
-                "Accept": 'application/json'
-            },
-            contentType: false,
-            processData: false
-        }).done(function (response,textStatus, jqXHR) {
-
-            bootbox.alert({
-                title: "Result",
-                message: "Project deleted.",
-                callback: function () {
-                    location.reload();
-                }
-            });
-        }).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
+        bootbox.confirm("Are you sure want to delete?", function (result) {
+            if (result) {
+                $.ajax({
+                    url: url,
+                    type: 'GET',
+                    headers: {
+                        "Accept": 'application/json'
+                    },
+                    contentType: false,
+                    processData: false
+                }).done(function (response,textStatus, jqXHR) {
+                    bootbox.alert({
+                        title: "Result",
+                        message: "Project deleted.",
+                        callback: function () {
+                            location.reload();
+                        }
+                    });
+                }).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
+                    });
                 });
-        });
-        }
-    })
+            }
+        })
     }
 
     $(document).ready(function () {
-    $("#formNewProject").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
-        console.log(post_url);
-        $.ajax({
-            url: post_url,
-            type: request_method,
-            data: form_data,
-            headers: {
-                "Accept": 'application/json'
-            },
-            contentType: false,
-            processData: false
-        }).done(function (response,textStatus, jqXHR) {
-            bootbox.alert({
-                    title: "Result",
-                    message: "Project created.",
-                callback: function () {
-                    location.reload();
-                }
-                });
-        }).fail(function(result){
-            var data  = result.responseJSON;
-            var title = "Error " + (data.code ? data.code: 'unknown');
-                var message = data.detail ? data.detail: 'No detail available.';
+        $("#formNewProject").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
+            console.log(post_url);
+            $.ajax({
+                url: post_url,
+                type: request_method,
+                data: form_data,
+                headers: {
+                    "Accept": 'application/json'
+                },
+                contentType: false,
+                processData: false
+            }).done(function (response,textStatus, jqXHR) {
                 bootbox.alert({
-                    title: title,
-                    message: message
-                });
+                        title: "Result",
+                        message: "Project created.",
+                    callback: function () {
+                        location.reload();
+                    }
+                    });
+            }).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
+                    });
+            });
         });
     });
-    });
 
 
 
