diff --git a/netslicehandler/template/modal/nst_details.html b/netslicehandler/template/modal/nst_details.html
new file mode 100644
index 0000000..6537008
--- /dev/null
+++ b/netslicehandler/template/modal/nst_details.html
@@ -0,0 +1,23 @@
+<div class="modal" id="modal_show_nst" xmlns="http://www.w3.org/1999/html">
+    <div   class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">×</span></button>
+                <h4 class="modal-title" >Network Slices Template details</h4>
+            </div>
+
+            <div class="modal-body" id="modal_show_nst_body" >
+                <textarea id="nst_view_json">
+                </textarea>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+
+            </div>
+
+        </div>
+        <!-- /.modal-content -->
+    </div>
+    <!-- /.modal-dialog -->
+</div>
diff --git a/netslicehandler/template/nst_edit.html b/netslicehandler/template/nst_edit.html
new file mode 100644
index 0000000..3cce0a8
--- /dev/null
+++ b/netslicehandler/template/nst_edit.html
@@ -0,0 +1,177 @@
+{% extends "base.html" %}
+{% load get %}
+{% load staticfiles %}
+
+
+{% block head_block %}
+{{ block.super }}
+<link rel="stylesheet" href="/static/bower_components/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="/static/bower_components/codemirror/addon/fold/foldgutter.css" />
+<link rel="stylesheet" href="/static/bower_components/codemirror/theme/neat.css">
+<link rel="stylesheet" href="/static/bower_components/codemirror/addon/dialog/dialog.css">
+<link rel="stylesheet" href="/static/bower_components/codemirror/addon/display/fullscreen.css">
+{% endblock %}
+{% block title_header_big %}
+{{ block.super }}
+Network Slices Templates
+{% endblock %}
+{% block left_sidebar %}
+
+{% include 'osm/osm_project_left_sidebar.html' %}
+
+{% endblock %}
+
+
+{% block breadcrumb_body %}
+{{ block.super }}
+<li><a href="{% url "netslices:list_templates" %}">NetSlice Templates</a></li>
+{% endblock %}
+
+{% block content_body %}
+{{ block.super }}
+
+{% csrf_token %}
+<div class="row">
+    <div class="col-md-12">
+        <div class="nav-tabs-custom" style="position: relative;">
+            <ul class="nav nav-tabs" >
+                <li class="active" id="yaml_li"><a href="#yaml" data-toggle="tab"><i class="fa fa-file-code-o"></i> YAML</a></li>
+                <li class="pull-right"><button id="save" type="button" class="btn btn-block btn-primary btn-sm"  onclick="update()" ><i class="fa fa-save"></i> Update</button></li>
+
+            </ul>
+            <div class="alert alert-success" id="success-alert" style="position: absolute; z-index: 100; top: 44px; left: 0; width: 100%;
+            border-radius: 1px;
+            background-color: rgba(0, 166, 90, 0.8) !important;
+            text-align: center;
+            border-color: rgba(0, 141, 76, 0.4);" hidden>
+            <button type="button" class="close" onclick="$('#success-alert').toggle()">x</button>
+            <strong>Success! </strong>
+            Template updated!
+            </div>
+            <div class="tab-content">
+                    <div class="active tab-pane" id="yaml">
+                            <textarea id="code_editor_yaml">
+                            </textarea>
+                        </div>
+            </div>
+        </div>
+        
+        <!-- <div class="box">
+            <div class="box-header with-border">
+                <h3 class="box-title"></h3>
+                <div class="box-tools"></div>
+            </div>
+            <div class="box-body">
+                <textarea id="code_editor_yaml">
+                </textarea>
+            </div>
+        </div> -->
+    </div>
+</div>
+
+{% endblock %}
+
+{% block resource_block %}
+{{ block.super }}
+<script src="/static/bower_components/codemirror/lib/codemirror.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/fold/foldcode.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/fold/foldgutter.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/fold/brace-fold.js" ></script>
+    <script src="/static/bower_components/codemirror/mode/javascript/javascript.js" ></script>
+    <script src="/static/bower_components/codemirror/mode/yaml/yaml.js" ></script>
+    <script src="/static/bower_components/codemirror/mode/markdown/markdown.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/search/searchcursor.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/search/search.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/dialog/dialog.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/display/autorefresh.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/edit/matchbrackets.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/edit/closebrackets.js" ></script>
+    <script src="/static/bower_components/codemirror/addon/display/fullscreen.js" ></script>
+    <script src="/static/bower_components/codemirror/keymap/sublime.js" ></script>
+<script>
+    var csrf_token = '{{csrf_token}}';
+    
+    var table;
+    var yaml_editor_settings = {
+            mode: "yaml",
+            showCursorWhenSelecting: true,
+            autofocus: true,
+            autoRefresh: true,
+            lineNumbers: true,
+            lineWrapping: true,
+            foldGutter: true,
+            gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
+            autoCloseBrackets: true,
+            matchBrackets: true,
+            extraKeys: {
+                "F11": function (cm) {
+                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+                },
+                "Esc": function (cm) {
+                    if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
+                },
+                "Ctrl-Q": function (cm) {
+                    cm.foldCode(cm.getCursor());
+                }
+            },
+            theme: "neat",
+            keyMap: "sublime"
+        };
+
+    
+        var myYamlTextArea = document.getElementById("code_editor_yaml");
+        var editorYaml = CodeMirror(function (elt) {
+                myYamlTextArea.parentNode.replaceChild(elt, myYamlTextArea);
+            }, yaml_editor_settings);
+
+    var template = {{ template | safe}};
+
+    $(document).ready(function () {
+        
+        editorYaml.setValue(template.data);
+        editorYaml.setSize("auto", "auto");
+       
+    });
+
+    function update() {
+        var dialog = bootbox.dialog({
+            message: '<div class="text-center"><i class="fa fa-spin fa-spinner"></i> Loading...</div>',
+            closeButton: false
+        });
+
+        
+        text = editorYaml.getValue();
+       
+        $.ajax({
+            url: window.location.href,
+            type: 'POST',
+            dataType: 'json',
+            data: {
+                'csrfmiddlewaretoken': '{{csrf_token}}',
+                'text': text
+            },
+            success: function (result) {
+                
+                dialog.modal('hide');
+                $("#success-alert").fadeTo(2000, 500).slideDown(500, function(){
+                    setTimeout(function () {
+                        $("#success-alert").slideUp(500);
+                    }, 2000);
+
+                });
+            },
+            error: function (result) {
+                dialog.modal('hide');
+                var data = result.responseJSON;
+                var title = "Error " + (data && data.code ? data.code : 'unknown');
+                var message = data && data.detail ? data.detail : 'No detail available.';
+                bootbox.alert({
+                    title: title,
+                    message: message
+                });
+            }
+        });
+    }
+</script>
+
+{% endblock %}
\ No newline at end of file
diff --git a/netslicehandler/template/nst_list.html b/netslicehandler/template/nst_list.html
new file mode 100644
index 0000000..41525ef
--- /dev/null
+++ b/netslicehandler/template/nst_list.html
@@ -0,0 +1,211 @@
+{% extends "base.html" %}
+{% load get %}
+{% load staticfiles %}
+
+
+{% block head_block %}
+{{ block.super }}
+<link rel="stylesheet" href="/static/bower_components/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="/static/bower_components/codemirror/addon/fold/foldgutter.css" />
+<link rel="stylesheet" href="/static/bower_components/codemirror/theme/neat.css">
+<link rel="stylesheet" href="/static/bower_components/codemirror/addon/dialog/dialog.css">
+<link rel="stylesheet" href="/static/bower_components/codemirror/addon/display/fullscreen.css">
+<link rel="stylesheet" href="/static/bower_components/select2/dist/css/select2.min.css">
+<link rel="stylesheet" href="/static/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
+{% endblock %}
+{% block title_header_big %}
+{{ block.super }}
+Network Slices Templates
+{% endblock %}
+{% block left_sidebar %}
+
+{% include 'osm/osm_project_left_sidebar.html' %}
+
+{% endblock %}
+
+
+{% block breadcrumb_body %}
+{{ block.super }}
+<li><a href="{% url "netslices:list_templates" %}">NetSlice Templates</a></li>
+{% endblock %}
+
+{% block content_body %}
+{{ block.super }}
+{% include 'modal/nst_details.html' %}
+{% csrf_token %}
+<div class="row">
+    <div class="col-md-12">
+
+        <div class="box">
+            <div class="box-header with-border">
+                <h3 class="box-title"></h3>
+                <div class="box-tools"></div>
+            </div>
+            <div class="box-body">
+                <table id="templates_table" class="table table-bordered table-striped dataTable" role="grid">
+                    <thead>
+                        <tr role="row">
+                            <th>Name</th>
+                            <th>Identifier</th>
+                            <th>Usage State</th>
+                            <th>Actions</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+
+                    </tbody>
+
+                </table>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="row">
+    <div class="col-sm-12">
+        <div class="box box-solid">
+            <div class="box-body">
+
+                <div class="upload-drop-zone" id="drop-zone">
+                    <i class="fa fa-upload"></i> Just drag and drop files here
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+{% endblock %}
+
+{% block resource_block %}
+{{ block.super }}
+<script src="/static/bower_components/select2/dist/js/select2.js"></script>
+<script src="/static/bower_components/codemirror/lib/codemirror.js"></script>
+<script src="/static/bower_components/codemirror/addon/fold/foldcode.js"></script>
+<script src="/static/bower_components/codemirror/addon/fold/foldgutter.js"></script>
+<script src="/static/bower_components/codemirror/addon/fold/brace-fold.js"></script>
+<script src="/static/bower_components/codemirror/mode/javascript/javascript.js"></script>
+<script src="/static/bower_components/codemirror/addon/search/searchcursor.js"></script>
+<script src="/static/bower_components/codemirror/addon/search/search.js"></script>
+<script src="/static/bower_components/codemirror/addon/dialog/dialog.js"></script>
+<script src="/static/bower_components/codemirror/addon/display/autorefresh.js"></script>
+<script src="/static/bower_components/codemirror/addon/edit/matchbrackets.js"></script>
+<script src="/static/bower_components/codemirror/addon/edit/closebrackets.js"></script>
+<script src="/static/bower_components/codemirror/addon/display/fullscreen.js"></script>
+<script src="/static/bower_components/codemirror/keymap/sublime.js"></script>
+<script src="/static/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+<script src="/static/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+<script src="/static/src/drop_zone.js"></script>
+<script src="/static/src/netslicehandler/onboard_template.js"></script>
+<script src="/static/src/netslicehandler/templates_list.js"></script>
+<script>
+    var csrf_token = '{{csrf_token}}';
+    var table;
+
+    var editorJSON;
+
+
+
+    $(document).ready(function () {
+        table = $('#templates_table').DataTable({
+            responsive: true,
+            "ajax": {
+                "url": "netslices/templates/list",
+                "dataSrc": function (json) {
+                    return json['templates'];
+                },
+                statusCode: {
+                    401: function () {
+                        console.log("no auth");
+                        moveToLogin(window.location.pathname);
+                    }
+                },
+                "error": function (hxr, error, thrown) {
+                    console.log(hxr)
+                    console.log(thrown)
+                    console.log(error);
+                }
+
+            },
+            "columns": [
+                {
+                    "render": function (data, type, row) {
+                        return row['name'] || '';
+                    },
+                    "targets": 0
+                },
+                {
+                    "render": function (data, type, row) {
+                        return row['_id'];
+                    },
+                    "targets": 1
+                },
+                {
+                    "render": function (data, type, row) {
+                        return row['_admin']['usageState'];
+                    },
+                    "targets": 2
+                },
+                {
+                    "render": function (data, type, row) {
+                        return '<div class="btn-group">' +
+                            '     <button type="button" class="btn btn-default"' +
+                            '             onclick="javascript:showNstDetails(\'' + row["_id"] + '\')"' +
+                            '             data-toggle="tooltip" data-placement="top" data-container="body" title="Open">' +
+                            '         <i class="fa fa-info"></i>' +
+                            '     </button>' +
+                            '     <button type="button" class="btn btn-default"' +
+                            '             onclick="window.location.href=\'/netslices/templates/'+row["_id"]+'/edit\'"' +
+                            '             data-toggle="tooltip" data-placement="top" data-container="body" title="Edit">' +
+                            '         <i class="fa fa-edit"></i>' +
+                            '     </button>' +
+                            '<button type="button" class="btn btn-default"' +
+                            '         onclick="javascript:deleteTemplate(\'' + row["name"] + '\', \'' + row["_id"] + '\')"' +
+                            '         data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i' +
+                            '         class="far fa-trash-alt"></i></button>' +
+                            ' </div>';
+                    },
+                    "targets": 3,
+                    "orderable": false
+                }
+            ]
+        });
+
+        setInterval(function () {
+            refreshTable();
+        }, 10000);
+
+        var json_editor_settings = {
+            mode: "javascript",
+            showCursorWhenSelecting: true,
+            autofocus: true,
+            lineNumbers: true,
+            lineWrapping: true,
+            foldGutter: true,
+            gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
+            autoCloseBrackets: true,
+            matchBrackets: true,
+            extraKeys: {
+                "F11": function (cm) {
+                    cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+                },
+                "Esc": function (cm) {
+                    if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
+                },
+                "Ctrl-Q": function (cm) {
+                    cm.foldCode(cm.getCursor());
+                }
+            },
+            theme: "neat",
+            keyMap: "sublime"
+        };
+        var myJsonTextArea = document.getElementById("nst_view_json");
+        editorJSON = CodeMirror(function (elt) {
+            myJsonTextArea.parentNode.replaceChild(elt, myJsonTextArea);
+        }, json_editor_settings);
+    });
+
+    function refreshTable() {
+        table.ajax.reload();
+    }
+</script>
+
+{% endblock %}
\ No newline at end of file
