diff --git a/skyquake/framework/widgets/form_controls/selectOption.jsx b/skyquake/framework/widgets/form_controls/selectOption.jsx
index 21d4a0a..1e02f15 100644
--- a/skyquake/framework/widgets/form_controls/selectOption.jsx
+++ b/skyquake/framework/widgets/form_controls/selectOption.jsx
@@ -53,6 +53,7 @@
                   <select
                     className={this.props.className}
                     onChange={this.handleOnChange}
+                    value={JSON.stringify(this.props.value)}
                     defaultValue={JSON.stringify(defaultValue)}>
                       {
                        options
diff --git a/skyquake/framework/widgets/skyquake_container/skyquakeContainer.jsx b/skyquake/framework/widgets/skyquake_container/skyquakeContainer.jsx
index 7a0418e..558cc62 100644
--- a/skyquake/framework/widgets/skyquake_container/skyquakeContainer.jsx
+++ b/skyquake/framework/widgets/skyquake_container/skyquakeContainer.jsx
@@ -113,7 +113,7 @@
                             currentPlugin={this.state.currentPlugin}
                             store={SkyquakeContainerStore} />
                         <div className="titleBar">
-                            <h1>{(this.state.nav.name ? this.state.nav.name : this.state.currentPlugin) + tag}</h1>
+                            <h1>{(this.state.nav.name ? this.state.nav.name.replace('_', ' ').replace('-', ' ') : this.state.currentPlugin && this.state.currentPlugin.replace('_', ' ').replace('-', ' ')) + tag}</h1>
                         </div>
                         <div className={"application " + routeName}>
                             {this.props.children}
diff --git a/skyquake/plugins/project_management/src/dashboard/dashboard.jsx b/skyquake/plugins/project_management/src/dashboard/dashboard.jsx
index 60e06df..cabad1e 100644
--- a/skyquake/plugins/project_management/src/dashboard/dashboard.jsx
+++ b/skyquake/plugins/project_management/src/dashboard/dashboard.jsx
@@ -95,16 +95,16 @@
         e.preventDefault();
         e.stopPropagation();
         let projectUsers = self.state.projectUsers;
-
+        let cleanUsers = [];
         //Remove null values from role
         projectUsers.map((u) => {
            u.role && u.role.map((r,i) => {
              let role = {};
              //you may add a user without a role or a keys, but if one is present then the other must be as well.
             if(!r || ((r.role || r['keys']) && (!r.role || !r['keys']))) {
-                projectUsers.splice(i, 1);
+                // projectUsers.splice(i, 1);
             } else {
-                return u;
+                cleanUsers.push(u);
             }
            })
         })
@@ -121,16 +121,17 @@
         e.preventDefault();
         e.stopPropagation();
         let projectUsers = self.state.projectUsers;
-
+        let cleanUsers = [];
         //Remove null values from role
         projectUsers.map((u) => {
            u.role && u.role.map((r,i) => {
              let role = {};
              //you may add a user without a role or a keys, but if one is present then the other must be as well.
+            // if(!r || ((r.role || r['keys']) && (!r.role || !r['keys']))) {
             if(!r || ((r.role || r['keys']) && (!r.role || !r['keys']))) {
-                projectUsers.splice(i, 1);
+                // projectUsers.splice(i, 1);
             } else {
-                return u;
+                cleanUsers.push(u);
             }
            })
         })
@@ -139,7 +140,7 @@
             'name': self.state['name'],
             'description': self.state.description,
             'project-config' : {
-                'user': projectUsers
+                'user': cleanUsers
             }
         }));
     }
@@ -160,7 +161,9 @@
         })
     }
     addUserToProject = (e) => {
-        this.actions.handleAddUser();
+        let selectUserList = this.selectUserList;
+        console.log(ReactDOM.findDOMNode(selectUserList))
+        this.actions.handleAddUser(e);
     }
     removeUserFromProject = (userIndex, e) => {
         this.actions.handleRemoveUserFromProject(userIndex);
@@ -217,6 +220,14 @@
         self.state.projectUsers.map((u) => {
             projectUsers.push(u['user-name']);
         });
+        let availableUsers = state.users && state.users.filter((u) => {
+            return projectUsers.indexOf(u['user-name']) == -1
+        }).map((u) => {
+            return {
+                label: u['user-name'],
+                value: u
+            }
+        });
 
         if(!this.state.isReadOnly) {
             formButtonsHTML = (
@@ -312,7 +323,7 @@
                                     <tr key={i}>
                                         {!state.isReadOnly ? <td><span
                                                                     className="removeInput"
-                                                                    onClick={self.removeUserFromProject.bind(self, u)}
+                                                                    onClick={self.removeUserFromProject.bind(self, i)}
                                                                 >
                                                                     <img src={imgRemove} />
 
@@ -409,16 +420,10 @@
                                             <div className="addUser">
                                                 <SelectOption
                                                     onChange={this.actions.handleSelectedUser}
-                                                    defaultValue={state.selectedUser}
+                                                    value={state.selectedUser}
                                                     initial={true}
-                                                    options={state.users && state.users.filter((u) => {
-                                                        return projectUsers.indexOf(u['user-name']) == -1
-                                                    }).map((u) => {
-                                                        return {
-                                                            label: u['user-name'],
-                                                            value: u
-                                                        }
-                                                    })}
+                                                    options={availableUsers}
+                                                    ref={(el) => self.selectUserList = el}
                                                 />
                                                 <span className="addInput" onClick={this.addUserToProject}><img src={imgAdd} />
                                                     Add User
diff --git a/skyquake/plugins/project_management/src/dashboard/projectMgmtStore.js b/skyquake/plugins/project_management/src/dashboard/projectMgmtStore.js
index 6ad46be..857e9a7 100644
--- a/skyquake/plugins/project_management/src/dashboard/projectMgmtStore.js
+++ b/skyquake/plugins/project_management/src/dashboard/projectMgmtStore.js
@@ -15,7 +15,7 @@
         this.projectUsers = [];
         this.selectedUser = null;
         this.selectedRole = null;
-        this.roles = ['super_admin', 'operator_role'
+        this.roles = ['rw-rbac-platform:super-admin', 'operator_role'
         // 'some_other_role', 'yet_another_role', 'operator_role', 'some_other_role', 'yet_another_role'
         ];
         this.users = [];
@@ -146,35 +146,37 @@
             selectedUser: JSON.parse(user)
         });
     }
-    handleAddUser() {
+    handleAddUser(e) {
         let u = JSON.parse(this.selectedUser);
         let r = this.selectedRole;
         let projectUsers = this.projectUsers;
+        let keys = ',';
         console.log('adding user')
         projectUsers.push({
           'user-name': u['user-name'],
           'user-domain': u['user-domain'],
           "role":[{
                       "role": r,
-                      "keys": r
+                      "keys": keys
             }
           ]
         })
-        this.setState({projectUsers, selectedUser: null})
+        this.setState({projectUsers, selectedUser: JSON.stringify(null)})
     }
     handleToggleUserRoleInProject(data) {
         let self = this;
         let {userIndex, roleIndex, checked} = data;
         let projectUsers = this.projectUsers;
         let selectedRole = self.roles[roleIndex];
+        let keys = ',';
         if(checked) {
             projectUsers[userIndex].role.push({
                 role: self.roles[roleIndex],
-                keys: self.roles[roleIndex]
+                keys: keys
             })
         } else {
             let role = projectUsers[userIndex].role;
-            let roleIndex = _.findIndex(role, {role:selectedRole, keys: selectedRole})
+            let roleIndex = _.findIndex(role, {role:selectedRole, keys: keys})
             projectUsers[userIndex].role.splice(roleIndex, 1)
         }
        self.setState({projectUsers});
@@ -183,8 +185,9 @@
     handleUpdateUserRoleInProject(data) {
         let {userIndex, roleIndex, value} = data;
         let projectUsers = this.projectUsers;
+        let keys = ',';
         projectUsers[userIndex].role[roleIndex].role = value;
-        projectUsers[userIndex].role[roleIndex]['keys'] = value;
+        projectUsers[userIndex].role[roleIndex]['keys'] = keys;
 
     }
     addRoleToUserInProject(userIndex) {
@@ -192,10 +195,11 @@
         if(!projectUsers[userIndex].role) {
             projectUsers[userIndex].role = [];
         }
+        let keys = ',';
         projectUsers[userIndex].role.push({
               'role': null,
               //temp until we get actual keys
-              'keys' : 'some key'
+              'keys' : keys
             });
         this.setState({
             projectUsers
@@ -227,10 +231,14 @@
     }
     updateProjectSuccess() {
         this.alt.actions.global.hideScreenLoader.defer();
+        let self = this;
         let projects = this.projects || [];
         projects[this.activeIndex] = {
             'name': this['name'],
-            'description': this['description']
+            'description': this['description'],
+            'project-config': {
+                'user': self.projectUsers
+            }
         }
         this.setState({
             projects,
diff --git a/skyquake/plugins/user_management/config.json b/skyquake/plugins/user_management/config.json
index 930b9cf..0e66f6f 100644
--- a/skyquake/plugins/user_management/config.json
+++ b/skyquake/plugins/user_management/config.json
@@ -10,5 +10,10 @@
         "route": "user-management",
         "component": "./dashboard/dashboard.jsx",
         "type": "internal"
+    },{
+        "label": "Platform Role Management",
+        "route": "platform",
+        "component": "./platformRoleManagement/platformRoleManagement.jsx",
+        "type": "internal"
     }]
 }
