diff --git a/deploy/db/04_CR_add_syncotes.sql b/deploy/db/04_CR_add_syncotes.sql
new file mode 100644
index 0000000..f8b1120
--- /dev/null
+++ b/deploy/db/04_CR_add_syncotes.sql
@@ -0,0 +1,18 @@
+-----------------------------------------------------------------------------------
+-- *******************************************************************************
+-- * Copyright (c) 2019 Contributors to the Eclipse Foundation
+-- *
+-- * See the NOTICE file(s) distributed with this work for additional
+-- * information regarding copyright ownership.
+-- *
+-- * This program and the accompanying materials are made available under the
+-- * terms of the Eclipse Public License v. 2.0 which is available at
+-- * http://www.eclipse.org/legal/epl-2.0.
+-- *
+-- * SPDX-License-Identifier: EPL-2.0
+-- *******************************************************************************
+-----------------------------------------------------------------------------------
+
+alter table tbl_internal_person
+	add column SYNC_NOTE character varying(1024),
+  	add column IS_SYNC_ERROR boolean;
\ No newline at end of file
diff --git a/deploy/db/oracle/03_CR_add_syncotes.sql b/deploy/db/oracle/03_CR_add_syncotes.sql
new file mode 100644
index 0000000..bf5a4d8
--- /dev/null
+++ b/deploy/db/oracle/03_CR_add_syncotes.sql
@@ -0,0 +1,20 @@
+-----------------------------------------------------------------------------------
+-- *******************************************************************************
+-- * Copyright (c) 2019 Contributors to the Eclipse Foundation
+-- *
+-- * See the NOTICE file(s) distributed with this work for additional
+-- * information regarding copyright ownership.
+-- *
+-- * This program and the accompanying materials are made available under the
+-- * terms of the Eclipse Public License v. 2.0 which is available at
+-- * http://www.eclipse.org/legal/epl-2.0.
+-- *
+-- * SPDX-License-Identifier: EPL-2.0
+-- *******************************************************************************
+-----------------------------------------------------------------------------------
+
+ALTER TABLE tbl_internal_person
+ADD (
+  SYNC_NOTE VARCHAR2(1024),
+  IS_SYNC_ERROR NUMBER
+);
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java b/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java
index 7423ae2..49af9fc 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java
@@ -41,6 +41,8 @@
     private String department;
     private String uidIdent;
     private String userRef;
+    private String syncNote;
+    private Boolean isSyncError;
 
 
     @OneToOne
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java
index d5c6009..b0ba185 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java
@@ -83,6 +83,8 @@
         boolean attributesChanged = false;
         if (keyCloakUserToSync == null) {
             tblInternalPerson.setUserRef(null);
+            log.warn("InternalPerson is not synchronized with Portal anymore, most likely the user was removed from the Portal! /n" +
+                    " Id: " + tblInternalPerson.getId() + " Firstname: " + tblInternalPerson.getFirstName() + " Lastname: " + tblInternalPerson.getLastName());
             attributesChanged = true;
         } else {
             if (!Objects.equals(tblInternalPerson.getFirstName(), keyCloakUserToSync.getFirstName())
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java
index 45feaa4..370116a 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java
@@ -169,7 +169,7 @@
     private static String getContactNote() {
         return new StringBuilder()
                 .append("*** [")
-                .append(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(Date.from(Instant.now())))
+                .append(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(Date.from(Instant.now())))
                 .append("] ***")
                 .toString();
     }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
index 0bf4e5f..675b403 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
@@ -109,6 +109,8 @@
         existingInternalPerson.setDepartment(internalPersonDto.getDepartment());
         existingInternalPerson.setUidIdent(internalPersonDto.getUid());
         existingInternalPerson.setUserRef(internalPersonDto.getUserRef());
+        existingInternalPerson.setSyncNote(internalPersonDto.getSyncNote());
+        existingInternalPerson.setIsSyncError(internalPersonDto.getIsSyncError());
 
         setFromInternalPersonDto( existingInternalPerson, internalPersonDto );
         internalPersonUpdated = internalPersonRepository.save(existingInternalPerson);
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
index eb91580..ccfe4a8 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
@@ -16,7 +16,10 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.text.SimpleDateFormat;
+import java.time.Instant;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -31,7 +34,7 @@
 @Service
 public class LdapService {
 
-    @Value("${authnauth-sync.scheduling.enabled}")
+    @Value("${ldap-sync.scheduling.enabled}")
     private Boolean ldapEnabled;
 
     @Value("${ldap-sync.attribute-mapping.uid}")
@@ -122,34 +125,35 @@
     }
 
     private void findExistingAndNotExistingLdapUsers(List<TblInternalPerson> internalPersonList, List<LdapUser> allFoundLdapUsers, List<TblInternalPerson> allNotExistingLdapUsers) {
+        String now = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(Date.from(Instant.now()));
         for (TblInternalPerson tblInternalPerson : internalPersonList) {
             String uidTblInternalPerson = tblInternalPerson.getUidIdent();
             List<LdapUser> ldapUserByUIDResult = getLdapUserByUID(uidTblInternalPerson);
 
             if(ldapUserByUIDResult.isEmpty()){
-                String errorMsg = String.format("[LDAP Sync Error] User with Uid: [ %s ] can not be found in LDAP", uidTblInternalPerson);
-                setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, errorMsg);
+                String syncMsg = String.format("[LDAP Sync Fehler: %s] User mit der Uid: [ %s ] nicht gefunden im LDAP", now, uidTblInternalPerson);
+                setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, syncMsg);
             }
             else if(ldapUserByUIDResult.size() > 1){
-                String errorMsg = String.format("[LDAP Sync Error] More than one result for UID: [ %s ] in LDAP", uidTblInternalPerson);
-                setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, errorMsg);
+                String syncMsg = String.format("[LDAP Sync Fehler: %s] Mehr als ein Eintrag für die Uid: [ %s ] im LDAP", now, uidTblInternalPerson);
+                setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, syncMsg);
             }
             else {
                 LdapUser ldapUser = ldapUserByUIDResult.get(0);
+                String syncMsg = String.format("[LDAP Sync Erfolg: %s]", now);
+                tblInternalPerson.setSyncNote(syncMsg);
+                tblInternalPerson.setIsSyncError(false);
                 allFoundLdapUsers.add(ldapUser);
             }
         }
     }
 
-    private void setNoteAndLogSyncError(List<TblInternalPerson> allNotExistingLdapUsers, TblInternalPerson tblInternalPerson, String errorMsg) {
-        log.error(errorMsg);
-        String note = tblInternalPerson.getContact().getNote();
-        if (note == null) note = "";
-        if (!note.contains(errorMsg)) {
-            note = note + System.lineSeparator() + errorMsg;
-            tblInternalPerson.getContact().setNote(note);
-            allNotExistingLdapUsers.add(tblInternalPerson);
-        }
+    private void setNoteAndLogSyncError(List<TblInternalPerson> allNotExistingLdapUsers,
+                                        TblInternalPerson tblInternalPerson, String syncMsg) {
+        log.error(syncMsg);
+        tblInternalPerson.setSyncNote(syncMsg);
+        tblInternalPerson.setIsSyncError(true);
+        allNotExistingLdapUsers.add(tblInternalPerson);
     }
 
     private boolean mapLdapUserToInternaPerson(TblInternalPerson tblInternalPerson, LdapUser ldapUser, RefCommunicationType refCommunicationTypeMail, RefCommunicationType refCommunicationTypePhone) {
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java
index 27969b2..5ff2c38 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java
@@ -34,6 +34,8 @@
     private String department;
     private String uid;
     private String userRef;
+    private String syncNote;
+    private Boolean isSyncError;
 
     //from Contact
     @JsonProperty("contactId")
diff --git a/src/main/resources/application_localdev.yml b/src/main/resources/application_localdev.yml
index 9c1cb64..06e46ff 100644
--- a/src/main/resources/application_localdev.yml
+++ b/src/main/resources/application_localdev.yml
@@ -38,8 +38,8 @@
     mail-id: 1
     telephone-number-id: 2
   scheduling:
-    enabled: false
-    cron-expression: '*/10 * * * * *'
+    enabled: true
+    cron-expression: '*/20 * * * * *'
 
 authnauth-sync:
   attribute-mapping:
diff --git a/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql b/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql
index 2b5d3f9..aee5cdd 100644
--- a/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql
+++ b/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql
@@ -484,6 +484,8 @@
    FK_SALUTATION_ID bigint,
    FK_REF_PERSON_TYPE_ID bigint,
    DEPARTMENT character varying(255),
+   SYNC_NOTE character varying(1024),
+   IS_SYNC_ERROR boolean,
    UID_IDENT character varying(255),
    USER_REF character varying(255),
    FK_CONTACT_ID bigint NOT NULL,
@@ -505,9 +507,9 @@
 CREATE UNIQUE INDEX idx_tbl_internal_person_uid ON public.TBL_INTERNAL_PERSON ( UID_IDENT ASC );
 CREATE UNIQUE INDEX idx_tbl_internal_person_user_ref ON public.TBL_INTERNAL_PERSON ( USER_REF ASC );
 
-INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Pauline', 'Freudenberg', 'B.Sc.', 1, 1,'Abteilung Rechnungsstellung', '66cd78c3-6716-4ab3-b834-a199fc796b88', 'PFREUD',  5);
-INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Bernhardt', 'Iffland', '', 2, 2,'Kreativ', '4124e4e7-3488-4492-bf39-75e6a23a1c1a', 'BIFFL', 6);
-INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Horatio', 'Hornblower', 'Capt.', 1, 2,'Royal Navy', 'hhornblo', 'HORNB', 13);
+INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Pauline', 'Freudenberg', 'B.Sc.', 1, 1,'Abteilung Rechnungsstellung', '66cd78c3-6716-4ab3-b834-a199fc796b88', null,  5);
+INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Bernhardt', 'Iffland', '', 2, 2,'Kreativ', null, 'BIFFL', 6);
+INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Horatio', 'Hornblower', 'Capt.', 1, 2,'Royal Navy', 'hhornblo', null, 13);
 INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Cornelius', 'Buckley', '', 1, 2,'Royal Navy', null, 'BUCKC', 14);
 -- ---------------------------------------------
 -- TABLE TBL_ASSIGNMENT_MODUL_CONTACT
