diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index 06653f4727d9ee82f50e883543cc68d511a017d2..9ab3ef6a9fa18ab7a7837ae3e61ecd889efb76d4 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -1464,6 +1464,15 @@
       <iconId>NEON:TRASH</iconId>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/deletefunction/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityField>
+      <name>BIRTHDAY</name>
+      <title>Birthday</title>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+      <outputFormat>dd.MM.</outputFormat>
+      <inputFormat>dd.MM.</inputFormat>
+      <state>READONLY</state>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1728,6 +1737,12 @@
           <name>STATUS.displayValue</name>
           <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>BIRTHDAY.value</name>
+          <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/birthday.value/expression.js</expression>
+          <isFilterable v="true" />
+          <isLookupFilter v="false" />
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/birthday.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/birthday.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..f85e341424a1558d5de59cd048fa408511e89812
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/birthday.value/expression.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("Sql_lib");
+import("system.SQLTYPES");
+
+var maskingUtils = new SqlMaskingUtils();
+var year = new Date().getFullYear().toString();
+var month = maskingUtils.monthFromDate("PERSON.DATEOFBIRTH");
+var day = maskingUtils.dayFromDate("PERSON.DATEOFBIRTH");
+var dateSql = maskingUtils.makeDate(year, month, day);
+var timeSql = maskingUtils.cast(dateSql, SQLTYPES.TIMESTAMP);
+result.string("case when PERSON.DATEOFBIRTH is null then null else " + timeSql + " end");
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index fc7918d66d118477455fae249da67ff726a009cb..98fe8cc944264fe98c8ffc7a636128705da4ec35 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -3436,6 +3436,8 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
                 return "decimal";
             case SQLTYPES.DATE:
                 return "date";
+            case SQLTYPES.TIMESTAMP:
+                return "timestamp";
         }
         return null;
     }
@@ -3462,6 +3464,7 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
                 case SQLTYPES.DECIMAL:
                 case SQLTYPES.INTEGER:
                 case SQLTYPES.DATE:
+                case SQLTYPES.TIMESTAMP:
                     sqlDataType = _mapDefaults(pTargetDatatype);
                     break;
             }
@@ -3470,6 +3473,9 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
         case db.DBTYPE_MYSQL4:
             switch(pTargetDatatype) 
             {
+                case SQLTYPES.TIMESTAMP:
+                    sqlDataType = "datetime";
+                    break;
                 case SQLTYPES.NVARCHAR:
                 case SQLTYPES.VARCHAR:
                 case SQLTYPES.CHAR:
@@ -3498,6 +3504,7 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
                 case SQLTYPES.CHAR:
                 case SQLTYPES.DECIMAL:
                 case SQLTYPES.DATE:
+                case SQLTYPES.TIMESTAMP:
                     sqlDataType = _mapDefaults(pTargetDatatype);
                     break;
             }
@@ -3506,6 +3513,7 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
             switch(pTargetDatatype)
             {
                 case SQLTYPES.DATE:
+                case SQLTYPES.TIMESTAMP:
                 case SQLTYPES.DECIMAL:
                 case SQLTYPES.INTEGER:
                 case SQLTYPES.CHAR:
@@ -3518,6 +3526,8 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
         case db.DBTYPE_SQLSERVER2000:
             switch(pTargetDatatype)
             {
+                case SQLTYPES.TIMESTAMP:
+                    return "datetime";
                 case SQLTYPES.DATE:
                 case SQLTYPES.DECIMAL:
                 case SQLTYPES.INTEGER:
@@ -3939,6 +3949,58 @@ SqlMaskingUtils.prototype.coalesce = function(pFields)
     return retSql;
 }
 
+/**
+ * Converts day, month and year fields into a date
+ * The parameters can't be null!!!
+ * 
+ * @param pYear {String} year field
+ * @param pMonth {String} month field
+ * @param pDay {String} day field
+ */
+SqlMaskingUtils.prototype.makeDate = function(pYear, pMonth, pDay)
+{
+    switch(this.dbType)
+    {
+        case db.DBTYPE_POSTGRESQL8:
+            return "make_date" + "(" + pYear + ", " + pMonth + ", " + pDay + ")";
+        case db.DBTYPE_SQLSERVER2000:
+            return "datefromparts" + "(" + pYear + ", " + pMonth + ", " + pDay + ")";
+
+        case db.DBTYPE_ORACLE10_CLUSTER:
+        case db.DBTYPE_ORACLE10_THIN:
+        case db.DBTYPE_ORACLE10_OCI:
+            return "to_date(lpad(" + pYear + ", 4, '0') || lpad(" + pMonth + ", 2, '0') || lpad(" + pYear + ", 2, '0'), 'YYYY-MM-DD')";
+
+        // from datestr without filled zeros e.g.: 2000-5-2
+        case db.DBTYPE_MYSQL4:
+        case db.DBTYPE_MARIADB10:
+            var dateFields = [
+                this.cast(pYear, SQLTYPES.CHAR, 4),
+                this.cast(pMonth, SQLTYPES.CHAR, 2),
+                this.cast(pDay, SQLTYPES.CHAR, 2)
+            ];
+            var dateStr = this.concatWithSeparator(dateFields, "-", false);
+            return this.cast(dateStr, SQLTYPES.DATE);
+
+        // from datestr with filled zeros e.g.: 2000-05-02
+        case db.DBTYPE_DERBY10:
+            // maskingUtils: workaround
+            function _castWithZeros(maskingUtils, field, size) {
+                var casted = maskingUtils.cast(field, SQLTYPES.VARCHAR, size);
+                var concatenated = maskingUtils.concatenate(["'000'", casted]);
+                // + 1: derbys substr starts counting at 1, for whatever reason
+                return "substr(" + concatenated + ", length(" + concatenated + ") - " + size + " + 1)";
+            }
+            var dateFieldsZeroed = [
+                _castWithZeros(this, pYear, 4),
+                _castWithZeros(this, pMonth, 2),
+                _castWithZeros(this, pDay, 2)
+            ];
+            var dateStrZeroed = this.concatWithSeparator(dateFieldsZeroed, "-", false);
+            return this.cast(dateStrZeroed, SQLTYPES.DATE);
+    }
+}
+
 /**
  * functions for various Sql-actions
  * Do not create an instance of this!