diff --git a/db/oracle/UpdateTo2.0.0FromDB_1.0.0/01_migrate_from_2.0.0_to_2.0.1.sql b/db/oracle/UpdateTo2.0.0FromDB_1.0.0/01_migrate_from_2.0.0_to_2.0.1.sql
new file mode 100644
index 0000000..bc6fc20
--- /dev/null
+++ b/db/oracle/UpdateTo2.0.0FromDB_1.0.0/01_migrate_from_2.0.0_to_2.0.1.sql
@@ -0,0 +1 @@
+ALTER TABLE TBL_NOTIFICATION add "RESPONSIBILITY_FORWARDING_UUID" RAW(16);
diff --git a/db/postgreSQL/UpdateTo2.0.0FromDB_1.0.0/01_migrate_from_2.0.0_to_2.0.1.sql b/db/postgreSQL/UpdateTo2.0.0FromDB_1.0.0/01_migrate_from_2.0.0_to_2.0.1.sql
new file mode 100644
index 0000000..b2db146
--- /dev/null
+++ b/db/postgreSQL/UpdateTo2.0.0FromDB_1.0.0/01_migrate_from_2.0.0_to_2.0.1.sql
@@ -0,0 +1,2 @@
+ALTER TABLE tbl_notification add responsibility_forwarding_uuid uuid;
+
diff --git a/pom.xml b/pom.xml
index 8516e68..922f92b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
         <maven.test.skip>false</maven.test.skip>
         <jacoco-maven-plugin.version>0.7.9</jacoco-maven-plugin.version>
         <sonar-maven-plugin.version>3.0.2</sonar-maven-plugin.version>
-        <!--<javax.mail.version>3.0.2</javax.mail.version>-->
+        <hibernate-annotations.version>3.5.6-Final</hibernate-annotations.version>
     </properties>
     <dependencies>
         <dependency>
@@ -129,6 +129,11 @@
             <version>2.5.4</version>
         </dependency>
         <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-annotations</artifactId>
+            <version>${hibernate-annotations.version}</version>
+        </dependency>
+        <dependency>
             <groupId>com.auth0</groupId>
             <artifactId>java-jwt</artifactId>
             <version>3.2.0</version>
diff --git a/src/main/java/org/eclipse/openk/elogbook/common/mapper/NotificationMapper.java b/src/main/java/org/eclipse/openk/elogbook/common/mapper/NotificationMapper.java
index 92d6b02..8ac4d64 100644
--- a/src/main/java/org/eclipse/openk/elogbook/common/mapper/NotificationMapper.java
+++ b/src/main/java/org/eclipse/openk/elogbook/common/mapper/NotificationMapper.java
@@ -11,13 +11,6 @@
 */
 package org.eclipse.openk.elogbook.common.mapper;
 
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.eclipse.openk.elogbook.persistence.dao.RefBranchDao;
 import org.eclipse.openk.elogbook.persistence.dao.RefGridTerritoryDao;
 import org.eclipse.openk.elogbook.persistence.dao.RefNotificationPriorityDao;
@@ -30,6 +23,13 @@
 import org.eclipse.openk.elogbook.persistence.model.TblNotification;
 import org.eclipse.openk.elogbook.viewmodel.Notification;
 
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public class NotificationMapper {
     private Map<Integer, RefNotificationStatus> refStatusMap;
     private Map<Integer, RefNotificationPriority> refPriorityMap;
@@ -77,6 +77,7 @@
         trg.setRefGridTerritory(refGridTerritoryMap.get(vmNot.getFkRefGridTerritory()));
         trg.setAdminFlag(vmNot.isAdminFlag());
         trg.setType(vmNot.getType());
+        trg.setResponsibilityForwardingUuid(vmNot.getResponsibilityForwardingUuid());
         return trg;
     }
 
@@ -126,6 +127,7 @@
         }
 		not.getAdminFlag(tblNot.isAdminFlag());
 		not.setType(tblNot.getType());
+		not.setResponsibilityForwardingUuid(tblNot.getResponsibilityForwardingUuid());
 		return not;
     }
 
diff --git a/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java b/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java
index 8820ce3..6e0a18d 100644
--- a/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java
+++ b/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java
@@ -29,6 +29,7 @@
 import org.eclipse.openk.elogbook.persistence.model.TblUserSettings;
 import org.eclipse.openk.elogbook.viewmodel.LoginCredentials;
 import org.eclipse.openk.elogbook.viewmodel.UserAuthentication;
+import org.eclipse.openk.elogbook.viewmodel.contactbasedata.ContactTupel;
 
 import javax.persistence.EntityManager;
 import java.util.List;
@@ -85,9 +86,9 @@
 		return ret;
 	}
 
-	public List<String> getUserSuggestionsFromContactdatabase(String token) throws BtbException {
+	public List<ContactTupel> getUserSuggestionsFromContactdatabase(String token) throws BtbException {
 		LOGGER.debug("getUserSuggestionsFromContactdatabase() is called");
-		List<String> userContacts = ContactBaseDataManager.getInstance().getUserContacts(token);
+		List<ContactTupel> userContacts = ContactBaseDataManager.getInstance().getUserContacts(token);
 		LOGGER.debug("getUserSuggestionsFromContactdatabase() is finished");
 		return userContacts;
 	}
diff --git a/src/main/java/org/eclipse/openk/elogbook/controller/ContactBaseDataManager.java b/src/main/java/org/eclipse/openk/elogbook/controller/ContactBaseDataManager.java
index 4005527..8bc650d 100644
--- a/src/main/java/org/eclipse/openk/elogbook/controller/ContactBaseDataManager.java
+++ b/src/main/java/org/eclipse/openk/elogbook/controller/ContactBaseDataManager.java
@@ -16,11 +16,12 @@
 import org.eclipse.openk.elogbook.common.JsonGeneratorBase;
 import org.eclipse.openk.elogbook.communication.RestServiceWrapper;
 import org.eclipse.openk.elogbook.exceptions.BtbException;
+import org.eclipse.openk.elogbook.viewmodel.contactbasedata.ContactTupel;
 import org.eclipse.openk.elogbook.viewmodel.contactbasedata.VwDetailedContact;
 import org.eclipse.openk.elogbook.viewmodel.contactbasedata.VwDetailedContactPage;
 
-import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class ContactBaseDataManager {
 
@@ -33,21 +34,24 @@
         return INSTANCE;
     }
 
-    public List<String> getUserContacts(String token) throws BtbException {
-        List<String> returnList = new ArrayList();
+    public List<ContactTupel> getUserContacts(String token) throws BtbException {
         RestServiceWrapper restServiceWrapper = new RestServiceWrapper(BackendConfig.getInstance().getContactBaseDataApiUrl(), false);
         String response = restServiceWrapper.performGetRequest("contacts?size=2000",token);
         VwDetailedContactPage vwDetailedContactPage = JsonGeneratorBase.getGson().fromJson(response,
                 VwDetailedContactPage.class);
-        List<VwDetailedContact> content = vwDetailedContactPage.getContent();
-        for (VwDetailedContact vwDetailedContact : content) {
-            String userName = vwDetailedContact.getName();
-            if (userName != null) {
-                userName = userName.replace("," ,"");
-            }
-            returnList.add(userName);
+        return vwDetailedContactPage.getContent().stream().map(this::mapFromViewObj ).collect(Collectors.toList());
+    }
+
+    private ContactTupel mapFromViewObj( VwDetailedContact vwDetailedContact ) {
+        String userName = vwDetailedContact.getName();
+        if (userName != null) {
+            userName = userName.replace("," ,"");
         }
-        return returnList;
+        ContactTupel ct = new ContactTupel();
+        ct.setContactName(userName);
+        ct.setContactUuid(vwDetailedContact.getUuid());
+        return ct;
+
     }
 
 }
diff --git a/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java b/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java
index 5070e94..4b33f32 100644
--- a/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java
+++ b/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java
@@ -31,6 +31,7 @@
 import org.eclipse.openk.elogbook.viewmodel.TerritoryResponsibility;
 import org.eclipse.openk.elogbook.viewmodel.UserAuthentication;
 import org.eclipse.openk.elogbook.viewmodel.VersionInfo;
+import org.eclipse.openk.elogbook.viewmodel.contactbasedata.ContactTupel;
 
 import javax.ws.rs.core.Response;
 import java.util.List;
@@ -573,7 +574,7 @@
 
 		@Override
 		public Response invoke() throws BtbException {
-			List<String> userSuggestionsList = backendControllerUser.getUserSuggestionsFromContactdatabase(this.token);
+			List<ContactTupel> userSuggestionsList = backendControllerUser.getUserSuggestionsFromContactdatabase(this.token);
 			return ResponseBuilderWrapper.INSTANCE
 					.buildOKResponse(JsonGeneratorBase.getGson().toJson(userSuggestionsList));
 		}
diff --git a/src/main/java/org/eclipse/openk/elogbook/persistence/model/AbstractNotification.java b/src/main/java/org/eclipse/openk/elogbook/persistence/model/AbstractNotification.java
index 2944de0..5dde8c6 100644
--- a/src/main/java/org/eclipse/openk/elogbook/persistence/model/AbstractNotification.java
+++ b/src/main/java/org/eclipse/openk/elogbook/persistence/model/AbstractNotification.java
@@ -11,9 +11,21 @@
 */
 package org.eclipse.openk.elogbook.persistence.model;
 
-import javax.persistence.*;
+import org.eclipse.openk.elogbook.persistence.util.UUIDConverter;
+import org.eclipse.persistence.annotations.Convert;
+import org.eclipse.persistence.annotations.Converter;
+
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.SequenceGenerator;
 import java.io.Serializable;
 import java.sql.Timestamp;
+import java.util.UUID;
 
 
 /**
@@ -72,6 +84,11 @@
 	@Column(name="responsibility_forwarding")
 	private String responsibilityForwarding;
 
+	@Column(name="responsibility_forwarding_uuid")
+	@Converter(converterClass= UUIDConverter.class, name="responsibility_forwarding_uuid")
+	@Convert("responsibility_forwarding_uuid")
+	private UUID responsibilityForwardingUuid;
+
 	@Column(name="version")
 	private Integer version;
 	
@@ -279,4 +296,12 @@
 	public void setType(String type) {
 		this.type = type;
 	}
+
+	public UUID getResponsibilityForwardingUuid() {
+		return responsibilityForwardingUuid;
+	}
+
+	public void setResponsibilityForwardingUuid(UUID responsibilityForwardingUuid) {
+		this.responsibilityForwardingUuid = responsibilityForwardingUuid;
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/openk/elogbook/persistence/util/UUIDConverter.java b/src/main/java/org/eclipse/openk/elogbook/persistence/util/UUIDConverter.java
new file mode 100644
index 0000000..c39247c
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/elogbook/persistence/util/UUIDConverter.java
@@ -0,0 +1,67 @@
+package org.eclipse.openk.elogbook.persistence.util;
+
+import org.eclipse.persistence.internal.helper.DatabaseField;
+import org.eclipse.persistence.mappings.DatabaseMapping;
+import org.eclipse.persistence.mappings.OneToOneMapping;
+import org.eclipse.persistence.sessions.Session;
+
+import java.sql.Types;
+import java.text.MessageFormat;
+import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class UUIDConverter implements org.eclipse.persistence.mappings.converters.Converter
+{
+    private static final Logger LOG = Logger.getLogger(UUIDConverter.class.getName());
+
+    @Override
+    public UUID convertObjectValueToDataValue(Object objectValue, Session session)
+    {
+        return (UUID) objectValue;
+    }
+
+    @Override
+    public UUID convertDataValueToObjectValue(Object dataValue, Session session)
+    {
+        return (UUID) dataValue;
+    }
+
+    @Override
+    public boolean isMutable()
+    {
+        return false;
+    }
+
+    @Override
+    public void initialize(DatabaseMapping mapping, Session session)
+    {
+        DatabaseField field = mapping.getField();
+        field.setSqlType(Types.OTHER);
+        field.setTypeName("java.util.UUID");
+        field.setColumnDefinition("UUID");
+
+
+        if (LOG.isLoggable(Level.FINE))
+            LOG.log(Level.FINE, MessageFormat.format("Setting local field {0} to be a UUID", field) );
+
+        // Find the bi-directional references other objects have to this field, and update them to be uuid too
+        for (DatabaseMapping m : mapping.getDescriptor().getMappings())
+        {
+            if (m instanceof OneToOneMapping)
+            {
+                OneToOneMapping oneToOneMapping = (OneToOneMapping) m;
+
+                DatabaseField relationshipField = oneToOneMapping.getSourceToTargetKeyFields().get(field);
+                if (relationshipField != null)
+                {
+                    relationshipField.setSqlType(Types.OTHER);
+                    relationshipField.setColumnDefinition("UUID");
+                    relationshipField.setTypeName("java.util.UUID");
+                    if (LOG.isLoggable(Level.FINE))
+                        LOG.log(Level.FINE, MessageFormat.format("Setting foreign key field {0} to be a UUID", relationshipField));
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/openk/elogbook/viewmodel/Notification.java b/src/main/java/org/eclipse/openk/elogbook/viewmodel/Notification.java
index 02c8177..0a29961 100644
--- a/src/main/java/org/eclipse/openk/elogbook/viewmodel/Notification.java
+++ b/src/main/java/org/eclipse/openk/elogbook/viewmodel/Notification.java
@@ -13,6 +13,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 public class Notification {
 
@@ -28,6 +29,7 @@
     private String freeText;
     private String freeTextExtended;
     private String responsibilityForwarding;
+    private UUID responsibilityForwardingUuid;
     private String responsibilityControlPoint;
     private Date reminderDate;
     private Date futureDate;
@@ -255,4 +257,12 @@
     public void setType(String type) {
         this.type = type;
     }
+
+    public UUID getResponsibilityForwardingUuid() {
+        return responsibilityForwardingUuid;
+    }
+
+    public void setResponsibilityForwardingUuid(UUID responsibilityForwardingUuid) {
+        this.responsibilityForwardingUuid = responsibilityForwardingUuid;
+    }
 }
diff --git a/src/main/java/org/eclipse/openk/elogbook/viewmodel/contactbasedata/ContactTupel.java b/src/main/java/org/eclipse/openk/elogbook/viewmodel/contactbasedata/ContactTupel.java
new file mode 100644
index 0000000..63d22eb
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/elogbook/viewmodel/contactbasedata/ContactTupel.java
@@ -0,0 +1,24 @@
+package org.eclipse.openk.elogbook.viewmodel.contactbasedata;
+
+import java.util.UUID;
+
+public class ContactTupel {
+    private String contactName;
+    private UUID contactUuid;
+
+    public String getContactName() {
+        return contactName;
+    }
+
+    public void setContactName(String contactName) {
+        this.contactName = contactName;
+    }
+
+    public UUID getContactUuid() {
+        return contactUuid;
+    }
+
+    public void setContactUuid(UUID contactUuid) {
+        this.contactUuid = contactUuid;
+    }
+}
