diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java
index ccf292efc82e3ed5152c8038f0b2c2b2c1ee74bc..cf0d0a28ac2d233db8f5f097f027538acaf384c6 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java
@@ -195,11 +195,17 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
             current = updatedEntity;
             return view();
         }
-        catch (DmPortalException | RuntimeException ex) {
+        catch (DmPortalException ex) {
             SessionUtility.addErrorMessage("Error", "Could not update " + getDisplayEntityTypeName() + ": " + ex.getMessage());
             return null;
         }
+        catch (RuntimeException ex) {
+            SessionUtility.addErrorMessage("Error", "Could not update " + getDisplayEntityTypeName() + ": " + getObjectAlreadyExistMessage(current));
+            return null;
+        }
     }
+    
+    abstract protected String getObjectAlreadyExistMessage(EntityType entity);
 
     public void destroy(EntityType entity) {
         current = entity;
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java
index abf97ffe3feaf2a4d585cb8d2ab310a380ff9940..9e5f03beaddd08a8326ebfb52c8eb826f2310d09 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java
@@ -65,29 +65,36 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
 
     @Override
     public void prepareEntityInsert(Experiment experiment) throws ObjectAlreadyExists, InvalidDate, MissingProperty {
-        verifyExperiment(experiment);        
-        logger.debug("Inserting new experiment " + experiment.getName());                
+        Experiment existingExperiment = experimentFacade.findByName(experiment.getName());
+        if (existingExperiment != null) {
+            throw new ObjectAlreadyExists("Experiment " + experiment.getName() + " already exists.");
+        }
+
+        verifyExperiment(experiment);
+        logger.debug("Inserting new experiment " + experiment.getName());
     }
 
     @Override
-    public void prepareEntityUpdate(Experiment experiment) throws ObjectAlreadyExists, InvalidDate, MissingProperty {
+    public void prepareEntityUpdate(Experiment experiment) throws DmPortalException {
         verifyExperiment(experiment);        
         logger.debug("Updating experiment " + experiment.getName());                
     }
 
-    private void verifyExperiment(Experiment experiment) throws ObjectAlreadyExists, InvalidDate, MissingProperty {
-        Experiment existingExperiment = experimentFacade.findByName(experiment.getName());
-        if (existingExperiment != null) {
-            throw new ObjectAlreadyExists("Experiment " + experiment.getName() + " already exists.");
+     @Override
+     protected String getObjectAlreadyExistMessage(Experiment experiment)  {
+        if (experiment == null)
+            return null;
+        return "Experiment " + experiment.getName() + " already exists."; 
+    }
+
+    private void verifyExperiment(Experiment experiment) throws InvalidDate, MissingProperty {       
+        if (experiment.getExperimentType() == null) {
+            throw new MissingProperty("Experiment Type is missing.");
         }
         
         if ((experiment.getStartDate() != null) && (experiment.getEndDate() != null) && (experiment.getEndDate().before(experiment.getStartDate()))) {
             throw new InvalidDate("Experiment end date is before start date.");
         }
-        
-        if (experiment.getExperimentType() == null) {
-            throw new MissingProperty("Experiment Type is missing.");
-        }
     }
    
 
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
index a0b3eecbc7b1251dbe55a8232b17887d795b05f3..e8545915caca1bd67212bbd9103aeee903c32023 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
@@ -72,12 +72,14 @@ public class ExperimentTypeController extends CrudEntityController<ExperimentTyp
 
     @Override
     public void prepareEntityUpdate(ExperimentType experimentType) throws DmPortalException {
-       ExperimentType existingExperimentType = experimentTypeFacade.findByName(experimentType.getName());
-        if (existingExperimentType != null) {
-            throw new ObjectAlreadyExists("Experiment type " + experimentType.getName() + " already exists.");
-        }
     }
-   
+    
+      @Override
+     protected String getObjectAlreadyExistMessage(ExperimentType experimentType)  {
+        if (experimentType == null)
+            return null;
+        return "Experiment Type " + experimentType.getName() + " already exists."; 
+    }
 
     @FacesConverter(forClass = ExperimentType.class)
     public static class ExperimentTypeControllerConverter implements Converter
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
index df521f9428b0456123215c6df67e217a462e611b..8f1c34f543b842f60eef56649f5d4337f0c5ba03 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
@@ -150,10 +150,6 @@ public class LoginController implements Serializable
         }
     }
 
-    public String displayRole() {
-        return "User";
-    }
-
     public boolean isUserWriteable(UserInfo user) {
         if (!isLoggedIn()) {
             return false;
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java
index 5e29cde8ccb7def537df681a7bc95ea771870c35..8e444f69118c5355984a26986a970fd0837fc3b1 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java
@@ -4,7 +4,6 @@ import gov.anl.aps.dm.portal.exceptions.DmPortalException;
 import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists;
 import gov.anl.aps.dm.portal.model.beans.RoleTypeFacade;
 import gov.anl.aps.dm.portal.model.entities.RoleType;
-import gov.anl.aps.dm.portal.utilities.SessionUtility;
 import java.util.ArrayList;
 import java.util.List;
 import javax.ejb.EJB;
@@ -77,12 +76,16 @@ public class RoleTypeController extends CrudEntityController<RoleType, RoleTypeF
 
     @Override
     public void prepareEntityUpdate(RoleType roleType) throws DmPortalException {
-        RoleType existingRoleType = roleTypeFacade.findByName(roleType.getName());
-        if (existingRoleType != null) {
-            throw new ObjectAlreadyExists("Role Type " + roleType.getName() + " already exists.");
-        }
     }
 
+     @Override
+     protected String getObjectAlreadyExistMessage(RoleType roleType)  {
+        if (roleType == null)
+            return null;
+        return "Role Type " + roleType.getName() + " already exists."; 
+    }
+
+
     public boolean isRoleSystemType(String name) {
         if (name == null) {
             logger.warn("Current row is not set");
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java
index d83fca3ec8a1e0e270d055147a01294bd7258293..1e6b0f00c70f13c74c98b06614524a35666e8bf8 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java
@@ -1,14 +1,10 @@
 package gov.anl.aps.dm.portal.controllers;
 
 import gov.anl.aps.dm.portal.exceptions.DmPortalException;
-import gov.anl.aps.dm.portal.exceptions.InvalidDate;
-import gov.anl.aps.dm.portal.exceptions.MissingProperty;
 import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists;
 import gov.anl.aps.dm.portal.model.entities.UserInfo;
 import gov.anl.aps.dm.portal.model.beans.UserInfoFacade;
-import gov.anl.aps.dm.portal.model.entities.Experiment;
 import gov.anl.aps.dm.portal.utilities.SessionUtility;
-import java.util.ArrayList;
 
 import java.util.List;
 import javax.ejb.EJB;
@@ -79,18 +75,21 @@ public class UserInfoController extends CrudEntityController<UserInfo, UserInfoF
     }
 
     @Override
-    public void prepareEntityUpdate(UserInfo user) throws ObjectAlreadyExists {
+    public void prepareEntityUpdate(UserInfo user) throws DmPortalException {
         if (passwordEntry != null && !passwordEntry.isEmpty()) {
             user.setPassword(passwordEntry);
         }
         passwordEntry = null;
+    }
 
-        UserInfo existingUserInfo = userInfoFacade.findByUsername(user.getUsername());
-        if (existingUserInfo != null) {
-            throw new ObjectAlreadyExists("User " + user.getUsername() + " already exists.");
-        }
+     @Override
+     protected String getObjectAlreadyExistMessage(UserInfo user)  {
+        if (user == null)
+            return null;
+        return "User " + user.getUsername() + " already exists."; 
     }
 
+
     public String prepareSessionUserEdit(String viewPath) {
         UserInfo sessionUser = (UserInfo) SessionUtility.getUser();
         if (sessionUser == null) {
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java
index 1851c94a5d0b8b57bf2357f97cfb4087376dfdc5..1f965aa8ed4606f804bd8f622d18740ac8cc6bbd 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java
@@ -128,6 +128,20 @@ public class UserSystemRoleController  implements Serializable
         return rt.isAdmin(user);
     }
 
+   public String displayRole(String user) {
+       // for now this method returns "Administrator" if user has this role, and "User" otherwise
+        RoleType rt = roleTypeFacade.findById(1);
+        if (rt == null) {
+            return null;
+        }
+        if (rt.isAdmin(user)) {
+            return "Administrator";
+        }
+        else {
+            return "User";            
+        }           
+    }
+
     public String prepareSystemRoleView() {
         logger.debug("Preparing system role view");
         noSystemRoleTable.resetList();
diff --git a/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
index 93ea642265afed5fd8fb4db0bc107608d4c1db6b..b8b399bdb711c14a49771445d0339b8aef1bc477 100644
--- a/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
+++ b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
@@ -28,7 +28,7 @@
                         <h:outputText value="Username: #{loginController.displayUsername()}"/>
                         <br/>
 
-                        <h:outputText value="Role: #{loginController.displayRole()}"/>
+                        <h:outputText value="Role: #{userSystemRoleController.displayRole(loginController.username)}"/>
 
                     </ui:insert>
                 </div>