diff --git a/projecthandler/template/project/modal/project_new.html b/projecthandler/template/project/modal/project_new.html
index c346ec8..df652d7 100644
--- a/projecthandler/template/project/modal/project_new.html
+++ b/projecthandler/template/project/modal/project_new.html
@@ -1,3 +1,18 @@
+<!--
+Copyright 2019 EveryUP srl
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an  BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
 <div class="modal" id="modal_new_project" xmlns="http://www.w3.org/1999/html">
     <div class="modal-dialog">
         <div class="modal-content">
@@ -10,9 +25,17 @@
                      {% csrf_token %}
             <div class="modal-body">
 
-                <div id="div_chose_id">
-                    <label>Project Name: </label>
-                    <input name="name" id="name"  size="40" maxlength="20"/>
+                <div class="form-group" id="div_chose_id" >
+                    <label for="name" class="col-sm-3 control-label">Project Name* : </label>
+                    <input name="name" id="name"  size="40" maxlength="20"required/>
+                </div>
+
+                <div class="form-group">
+                    <label for="domain_name" class="col-sm-3 control-label">Domain Name: </label>
+                    <div class="col-sm-6">
+                        <select required id="domain_name" class="js-example-basic form-control" name="domain_name">
+                        </select>
+                    </div>
                 </div>
 
             </div>
diff --git a/projecthandler/template/project/projectlist.html b/projecthandler/template/project/projectlist.html
index f1aa4f1..5423aa1 100644
--- a/projecthandler/template/project/projectlist.html
+++ b/projecthandler/template/project/projectlist.html
@@ -20,8 +20,9 @@
 {% load staticfiles %}
 
 {% block head_block %}
-  	{{ block.super }}
-    <link rel="stylesheet" href="/static/node_modules/datatables.net-bs/css/dataTables.bootstrap.min.css">
+      {{ block.super }}
+        <link rel="stylesheet" href="/static/node_modules/select2/dist/css/select2.min.css">
+        <link rel="stylesheet" href="/static/node_modules/datatables.net-bs/css/dataTables.bootstrap.min.css">
 
 {% endblock %}
 {% block title_header_big %}
@@ -54,7 +55,7 @@
             <div class="box-tools">
                 <button type="button" class="btn btn-default" data-container="body"
                                         data-toggle="tooltip" data-placement="top" title="New Project"
-                                        onclick="javascript:showModalNewProject()">
+                                        onclick="javascript:showModalNewProject({'domains_list_url': '{% url "projects:domains_list" %}'})">
                                     <i class="fa fa-plus"></i> New Project</button>
             </div>
         </div>
@@ -85,6 +86,7 @@
   	{{ block.super }}
     <script src="/static/node_modules/datatables.net/js/jquery.dataTables.min.js"></script>
     <script src="/static/node_modules/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+    <script src="/static/node_modules/select2/dist/js/select2.js"></script>
 
     <script>
         var table;
@@ -157,7 +159,31 @@
     });
     </script>
     <script>
-    function showModalNewProject(){
+    function showModalNewProject(args){
+        select2_groups = $('#domain_name').select2({
+            placeholder: 'Select Domain',
+            width: '100%',
+            ajax: {
+                url: args.domains_list_url,
+                dataType: 'json',
+                processResults: function (data) {
+                    domains_list = [];
+                    if (data['domains']) {
+                        for (d in data['domains']) {
+                            var domain = data['domains'][d];
+                            if( domain.endsWith(':ro') === false) {
+                                domains_list.push({ id: domain, text: domain })
+                            }
+                            
+                        }
+                    }
+
+                    return {
+                        results: domains_list
+                    };
+                }
+            }
+        });
         $('#modal_new_project').modal('show');
     }
 
diff --git a/projecthandler/urls/project.py b/projecthandler/urls/project.py
index d017922..0a7c94a 100644
--- a/projecthandler/urls/project.py
+++ b/projecthandler/urls/project.py
@@ -20,6 +20,7 @@
 urlpatterns = [
     url(r'^$', views.open_project, name='open_project'),
     url(r'^list/', views.user_projects, name='projects_list'),
+    url(r'^domains/', views.user_domains, name='domains_list'),
     url(r'^new/', views.create_new_project, name='new_project'),
     url(r'^descriptors/', include('descriptorhandler.urls', namespace='descriptors'), name='descriptor_base'),
     url(r'^(?P<project_id>[-\w]+)/delete$', views.delete_project, name='delete_project'),
diff --git a/projecthandler/views.py b/projecthandler/views.py
index fad83bd..c46d856 100644
--- a/projecthandler/views.py
+++ b/projecthandler/views.py
@@ -43,7 +43,7 @@
         user = osmutils.get_user(request)
         client = Client()
         new_project_dict = request.POST.dict()
-        keys = ["name"]
+        keys = ["name", "domain_name"]
         project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_project_dict.items()))
         result = client.project_create(user.get_token(), project_data)
         if isinstance(result, dict) and 'error' in result and result['error']:
@@ -62,6 +62,25 @@
         'projects': result['data'] if result and result['error'] is False else [],
     },'projectlist.html')
 
+
+@login_required
+def user_domains(request):
+    user = osmutils.get_user(request)
+    client = Client()
+    result = client.get_domains(user.get_token())
+    if result and result['error'] is False:
+        domains = []
+        if result['data'] and result['data']['user_domain_name']:
+            domain_names = result['data']['user_domain_name'].split(',')
+            domains.extend(x for x in domain_names if x not in domains)
+        if result['data'] and result['data']['project_domain_name']:
+            domain_names = result['data']['project_domain_name'].split(',')
+            domains.extend(x for x in domain_names if x not in domains)
+
+        return __response_handler(request, {'domains': domains})
+    return __response_handler(request, {'domains': []})
+
+
 @login_required
 def open_project(request):
     user = osmutils.get_user(request)
