diff --git a/rolehandler/templates/modal/role_create.html b/rolehandler/templates/modal/role_create.html
new file mode 100644
index 0000000..58d68ca
--- /dev/null
+++ b/rolehandler/templates/modal/role_create.html
@@ -0,0 +1,38 @@
+<div class="modal" id="modal_new_role" 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">New Role</h4>
+            </div>
+            <form id="formCreateRole" action='{% url "roles:create"   %}'
+                  class="form-horizontal"
+                  method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                <div class="modal-body" id="modal_new_role_body">
+                    <div class="form-group">
+                        <label for="rolename" class="col-sm-3 control-label">Name *</label>
+                        <div class="col-sm-6">
+                            <input class="form-control" id="rolename" name="name"
+                                   placeholder="Name" required>
+                        </div>
+                    </div>
+
+            
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+                    <button class="btn btn-primary"
+                            data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Creating..."
+                            id="create_new_role">Create
+                    </button>
+
+                </div>
+            </form>
+        </div>
+        <!-- /.modal-content -->
+    </div>
+    <!-- /.modal-dialog -->
+</div>
diff --git a/rolehandler/templates/modal/role_edit.html b/rolehandler/templates/modal/role_edit.html
new file mode 100644
index 0000000..8541177
--- /dev/null
+++ b/rolehandler/templates/modal/role_edit.html
@@ -0,0 +1,38 @@
+<div class="modal" id="modal_edit_role" 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">Edit Role</h4>
+            </div>
+            <form id="formEditRole" action=""
+                  class="form-horizontal"
+                  method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                <input type="hidden"  id="projects_old" name="projects_old" value="asdasd">
+                <div class="modal-body" id="modal_edit_role_body">
+                    
+                    <div class="form-group">
+                        <label for="name" class="col-sm-3 control-label">Name</label>
+                        <div class="col-sm-6">
+                           <input class="form-control" id="edit_role_name" name="role" 
+                                   placeholder="Name">
+                        </div>
+                    </div>
+                   
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+                    <button class="btn btn-primary"
+                            data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Editing..."
+                            id="create_edit_role">Apply
+                    </button>
+
+                </div>
+            </form>
+        </div>
+        <!-- /.modal-content -->
+    </div>
+    <!-- /.modal-dialog -->
+</div>
diff --git a/rolehandler/templates/role_list.html b/rolehandler/templates/role_list.html
new file mode 100644
index 0000000..5cf49a1
--- /dev/null
+++ b/rolehandler/templates/role_list.html
@@ -0,0 +1,222 @@
+{% extends "base.html" %}
+{% load get %}
+{% load date_tag %}
+{% load staticfiles %}
+
+
+{% block head_block %}
+    {{ block.super }}
+    <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 }}
+{% endblock %}
+{% block left_sidebar %}
+    {% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+
+{% block breadcrumb_body %}
+    {{ block.super }}
+    <li><a href="#">roles</a></li>
+{% endblock %}
+
+{% block content_body %}
+    {{ block.super }}
+    {% include 'modal/role_create.html' %}
+    {% include 'modal/role_edit.html' %}
+
+    {% csrf_token %}
+    <div class="row">
+        <div class="col-md-12">
+
+            <div class="box">
+                <div class="box-header with-border">
+                    <h3 class="box-title">roles</h3>
+                    <div class="box-tools">
+                        <button type="button" class="btn btn-default" data-container="body"
+                                onclick="javascript:openModalCreateRole({'projects_list_url': '{% url "projects:projects_list" %}'})"
+                                data-toggle="tooltip" data-placement="top" title="New role">
+
+                            <i class="fa fa-plus"></i> Create role
+                        </button>
+
+                    </div>
+                </div>
+                <div class="box-body">
+                    <table id="roles_table" class="table table-bordered table-striped">
+                        <thead>
+                        <tr>
+                            <th>Name</th>
+                            <th>Identifier</th>
+                            <th>Modified</th>
+                            <th>Created</th>
+                            <th>Actions</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+
+    </div>
+{% endblock %}
+
+{% block resource_block %}
+    {{ block.super }}
+    <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/bower_components/select2/dist/js/select2.js"></script>
+    <script src="/static/src/rolehandler/role_list.js"></script>
+    <script>
+        var table;
+        
+        $(document).ready(function () {
+            table = $('#roles_table').DataTable({
+                responsive: true,
+                "ajax": {
+                    "url": "/admin/roles/list",
+                    "dataSrc": function (json) {
+                        return json['roles'];
+                    },
+                    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 moment.unix(row["_admin"]['modified']).format('YYYY-MM-DD hh:mm:ss a');
+                        },
+                        "targets": 2
+                    },
+                    {
+                        "render": function (data, type, row) {
+                            return moment.unix(row["_admin"]['created']).format('YYYY-MM-DD hh:mm:ss a');
+                        },
+                        "targets": 3
+                    },
+                    {
+                        "render": function (data, type, row) {
+                            return '<div class="btn-group">' +
+                                '<button type="button" class="btn btn-default dropdown-toggle"' +
+                                'data-toggle="dropdown" aria-expanded="false">Actions ' +
+                                '<span class="fa fa-caret-down"></span></button> ' +
+                                '<ul class="dropdown-menu">' +
+                                '<li> <a href="#" onclick="javascript:openModalEditRole({role_id:\'' + row['_id'] + '\', rolename:\'' + row['rolename'] + '\'})">' +
+                                '<i class="fa fa-edit"></i> Edit</a></li>' +
+                                '<li> <a href="#" onclick="javascript:deleteRole(\'' + row['_id'] + '\', \'' + row['rolename'] + '\')"' +
+                                'style="color:red"><i class="fa fa-trash"></i> Delete</a></li> </ul></div>';
+                        },
+                        "targets": 4,
+                        "orderable": false
+                    }
+                ]
+            });
+
+            setInterval(function () {
+                table.ajax.reload();
+            }, 10000);
+
+            $("#formCreateRole").submit(function (event) {
+                event.preventDefault(); //prevent default action
+                var post_url = $(this).attr("action"); //get form action url
+                var request_method = $(this).attr("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) {
+                    $('#modal_new_role').modal('hide');
+                    table.ajax.reload();
+                    bootbox.alert({
+                        title: "Result",
+                        message: "role successfully created."
+                    });
+
+                }).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
+                    });
+                });
+            });
+
+            $("#formEditRole").submit(function (event) {
+                event.preventDefault(); //prevent default action
+                var post_url = $(this).attr("action"); //get form action url
+                var request_method = $(this).attr("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) {
+                    $('#modal_edit_role').modal('hide');
+                    table.ajax.reload();
+                    bootbox.alert({
+                        title: "Result",
+                        message: "role successfully modified."
+                    });
+
+                }).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
+                    });
+                });
+            });
+        
+        });
+    </script>
+
+
+{% endblock %}
+
+{% block footer %}
+    {% include "footer.html"  %}
+{% endblock %}
\ No newline at end of file
