diff --git a/Corona-Warn-App/schemas/de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase/2.json b/Corona-Warn-App/schemas/de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase/2.json
new file mode 100644
index 0000000000000000000000000000000000000000..4f53fc0540c1c155dab5a6b98fd26c8a07a280d4
--- /dev/null
+++ b/Corona-Warn-App/schemas/de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase/2.json
@@ -0,0 +1,196 @@
+{
+  "formatVersion": 1,
+  "database": {
+    "version": 2,
+    "identityHash": "abaa3557b994e3bc2a61d8ee2edff8ba",
+    "entities": [
+      {
+        "tableName": "locations",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `locationName` TEXT NOT NULL, `phoneNumber` TEXT, `emailAddress` TEXT)",
+        "fields": [
+          {
+            "fieldPath": "locationId",
+            "columnName": "locationId",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "locationName",
+            "columnName": "locationName",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "phoneNumber",
+            "columnName": "phoneNumber",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "emailAddress",
+            "columnName": "emailAddress",
+            "affinity": "TEXT",
+            "notNull": false
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "locationId"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "locationvisits",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `date` TEXT NOT NULL, `fkLocationId` INTEGER NOT NULL, FOREIGN KEY(`fkLocationId`) REFERENCES `locations`(`locationId`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "date",
+            "columnName": "date",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "fkLocationId",
+            "columnName": "fkLocationId",
+            "affinity": "INTEGER",
+            "notNull": true
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [
+          {
+            "name": "index_locationvisits_fkLocationId",
+            "unique": false,
+            "columnNames": [
+              "fkLocationId"
+            ],
+            "createSql": "CREATE INDEX IF NOT EXISTS `index_locationvisits_fkLocationId` ON `${TABLE_NAME}` (`fkLocationId`)"
+          }
+        ],
+        "foreignKeys": [
+          {
+            "table": "locations",
+            "onDelete": "CASCADE",
+            "onUpdate": "CASCADE",
+            "columns": [
+              "fkLocationId"
+            ],
+            "referencedColumns": [
+              "locationId"
+            ]
+          }
+        ]
+      },
+      {
+        "tableName": "persons",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`personId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `fullName` TEXT NOT NULL, `phoneNumber` TEXT, `emailAddress` TEXT)",
+        "fields": [
+          {
+            "fieldPath": "personId",
+            "columnName": "personId",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "fullName",
+            "columnName": "fullName",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "phoneNumber",
+            "columnName": "phoneNumber",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "emailAddress",
+            "columnName": "emailAddress",
+            "affinity": "TEXT",
+            "notNull": false
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "personId"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "personencounters",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `date` TEXT NOT NULL, `fkPersonId` INTEGER NOT NULL, FOREIGN KEY(`fkPersonId`) REFERENCES `persons`(`personId`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "date",
+            "columnName": "date",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "fkPersonId",
+            "columnName": "fkPersonId",
+            "affinity": "INTEGER",
+            "notNull": true
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [
+          {
+            "name": "index_personencounters_fkPersonId",
+            "unique": false,
+            "columnNames": [
+              "fkPersonId"
+            ],
+            "createSql": "CREATE INDEX IF NOT EXISTS `index_personencounters_fkPersonId` ON `${TABLE_NAME}` (`fkPersonId`)"
+          }
+        ],
+        "foreignKeys": [
+          {
+            "table": "persons",
+            "onDelete": "CASCADE",
+            "onUpdate": "CASCADE",
+            "columns": [
+              "fkPersonId"
+            ],
+            "referencedColumns": [
+              "personId"
+            ]
+          }
+        ]
+      }
+    ],
+    "views": [],
+    "setupQueries": [
+      "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'abaa3557b994e3bc2a61d8ee2edff8ba')"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt
index d4192af041ce8789f72bb20a020d7e0d645126e0..1221b89bb7badc8431fbc5b73e148145799686f2 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt
@@ -6,6 +6,8 @@ import java.util.Locale
 interface ContactDiaryLocation : HasStableId {
     val locationId: Long
     var locationName: String
+    val phoneNumber: String?
+    val emailAddress: String?
 }
 
 fun List<ContactDiaryLocation>.sortByNameAndIdASC(): List<ContactDiaryLocation> =
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt
index 2d477bcee18248a08aa8ecdfd9d4937f7e635ed2..2a1ec858e59a9dc526bd32eace645ee3bd5e09d9 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt
@@ -7,6 +7,12 @@ interface ContactDiaryLocationVisit {
     val id: Long
     val date: LocalDate
     val contactDiaryLocation: ContactDiaryLocation
+
+    /*
+        Value in miliseconds
+     */
+    val duration: Long?
+    val circumstances: String?
 }
 
 fun List<ContactDiaryLocationVisit>.sortByNameAndIdASC(): List<ContactDiaryLocationVisit> =
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt
index de391152bcfba7267c0d095124025137b2fc3214..0340fa66e10e5d3f7565b5ad4c69ada52a749039 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt
@@ -6,6 +6,8 @@ import java.util.Locale
 interface ContactDiaryPerson : HasStableId {
     val personId: Long
     var fullName: String
+    val phoneNumber: String?
+    val emailAddress: String?
 }
 
 fun List<ContactDiaryPerson>.sortByNameAndIdASC(): List<ContactDiaryPerson> =
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt
index 47975a267757d5a18018d5a21c46d088bf32da3f..be1c173f981f2730cf80736a11a8749c569f25e7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt
@@ -7,6 +7,17 @@ interface ContactDiaryPersonEncounter {
     val id: Long
     val date: LocalDate
     val contactDiaryPerson: ContactDiaryPerson
+    val durationClassification: DurationClassification?
+    val withMask: Boolean?
+    val wasOutside: Boolean?
+    val circumstances: String?
+
+    enum class DurationClassification(
+        val key: String
+    ) {
+        LESS_THAN_15_MINUTES("LessThan15Minutes"),
+        MORE_THAN_15_MINUTES("MoreThan15Minutes")
+    }
 }
 
 fun List<ContactDiaryPersonEncounter>.sortByNameAndIdASC(): List<ContactDiaryPersonEncounter> =
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt
index 78ff94aa01a3af64f4036d54b4e8daeb14cc1321..3c20aa3cbdcd9dd56371687bacc227c80a8d7c4b 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt
@@ -2,7 +2,9 @@ package de.rki.coronawarnapp.contactdiary.model
 
 data class DefaultContactDiaryLocation(
     override val locationId: Long = 0L,
-    override var locationName: String
+    override var locationName: String,
+    override val phoneNumber: String? = null,
+    override val emailAddress: String? = null
 ) : ContactDiaryLocation {
     override val stableId: Long
         get() = locationId
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt
index 0c2124a3c625123c3bac258c68db6e82e92e6702..46362e1d0c25cf677927d996863823a0cff11e31 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt
@@ -5,5 +5,7 @@ import org.joda.time.LocalDate
 data class DefaultContactDiaryLocationVisit(
     override val id: Long = 0L,
     override val date: LocalDate,
-    override val contactDiaryLocation: ContactDiaryLocation
+    override val contactDiaryLocation: ContactDiaryLocation,
+    override val duration: Long? = null,
+    override val circumstances: String? = null
 ) : ContactDiaryLocationVisit
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt
index 911bd939bfc14b4fbdebc634d6ccdaf11bf68d7e..8827126fc9d1850d950573ffe1c4d274c38eee48 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt
@@ -2,7 +2,9 @@ package de.rki.coronawarnapp.contactdiary.model
 
 data class DefaultContactDiaryPerson(
     override val personId: Long = 0L,
-    override var fullName: String
+    override var fullName: String,
+    override val phoneNumber: String? = null,
+    override val emailAddress: String? = null
 ) : ContactDiaryPerson {
     override val stableId: Long
         get() = personId
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt
index bdd303ef066b478fc64b0063e8800bab7a098285..149fdfe313d16b729db43a6912460751456ebb2e 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt
@@ -5,5 +5,9 @@ import org.joda.time.LocalDate
 data class DefaultContactDiaryPersonEncounter(
     override val id: Long = 0L,
     override val date: LocalDate,
-    override val contactDiaryPerson: ContactDiaryPerson
+    override val contactDiaryPerson: ContactDiaryPerson,
+    override val durationClassification: ContactDiaryPersonEncounter.DurationClassification? = null,
+    override val withMask: Boolean? = null,
+    override val wasOutside: Boolean? = null,
+    override val circumstances: String? = null
 ) : ContactDiaryPersonEncounter
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt
index b80474dca2a053ec526af698686352a6904cb838..fa8e6a74885d030de15cde3238fdc3c4cc4fa9d2 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt
@@ -24,7 +24,7 @@ import javax.inject.Inject
         ContactDiaryPersonEntity::class,
         ContactDiaryPersonEncounterEntity::class
     ],
-    version = 1,
+    version = 2, // TODO check migration patterns
     exportSchema = true
 )
 @TypeConverters(CommonConverters::class)
@@ -38,7 +38,7 @@ abstract class ContactDiaryDatabase : RoomDatabase() {
     class Factory @Inject constructor(@AppContext private val ctx: Context) {
         fun create(): ContactDiaryDatabase = Room
             .databaseBuilder(ctx, ContactDiaryDatabase::class.java, CONTACT_DIARY_DATABASE_NAME)
-            .fallbackToDestructiveMigration()
+            .fallbackToDestructiveMigration() // TODO we increased schema version, need to migrate?
             .build()
     }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt
index ed36e6276d4349e459baa7180fe60f778c7fd069..dc68c85122ca3412781deb22c367da62faa61c4f 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt
@@ -11,7 +11,9 @@ import kotlinx.parcelize.Parcelize
 @Entity(tableName = "locations")
 data class ContactDiaryLocationEntity(
     @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "locationId") override val locationId: Long = 0L,
-    @ColumnInfo(name = "locationName") override var locationName: String
+    @ColumnInfo(name = "locationName") override var locationName: String,
+    override val phoneNumber: String? = null,
+    override val emailAddress: String? = null
 ) : ContactDiaryLocation, Parcelable {
     override val stableId: Long
         get() = locationId
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt
index 0d1d1738d28c0b648327e6a18e09212eb752de06..458988feed21613a77e69e41bdaf355934e21354 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt
@@ -11,7 +11,9 @@ import kotlinx.parcelize.Parcelize
 @Entity(tableName = "persons")
 data class ContactDiaryPersonEntity(
     @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "personId") override val personId: Long = 0L,
-    @ColumnInfo(name = "fullName") override var fullName: String
+    @ColumnInfo(name = "fullName") override var fullName: String,
+    override val phoneNumber: String? = null,
+    override val emailAddress: String? = null
 ) : ContactDiaryPerson, Parcelable {
     override val stableId: Long
         get() = personId
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt
index a9022f4fe16940addcb635c13383dec6c14083e1..43600cde672c47e884de051a2d6604a4dc69f298 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt
@@ -26,6 +26,8 @@ class ContactDiaryEditLocationsViewModelTest {
     private val location = object : ContactDiaryLocation {
         override val locationId = 1L
         override var locationName = "Supermarket"
+        override val phoneNumber: String? = null
+        override val emailAddress: String? = null
         override val stableId = 1L
     }
     private val locationList = listOf(location)
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt
index f1a8aa1e22d2f65e329e9dbfade18366738ab302..f18f6ecf7cc1eeb2a86a4e98ef5fceaa84960883 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt
@@ -26,6 +26,8 @@ class ContactDiaryEditPersonsViewModelTest {
     private val person = object : ContactDiaryPerson {
         override val personId = 1L
         override var fullName = "Julia"
+        override val phoneNumber: String? = null
+        override val emailAddress: String? = null
         override val stableId = 1L
     }