diff --git a/src/database/mod.rs b/src/database/mod.rs
index 3746efef..46ffad01 100644
--- a/src/database/mod.rs
+++ b/src/database/mod.rs
@@ -7,7 +7,8 @@ use directories::ProjectDirs;
 use lru_cache::LruCache;
 use ruma::{
     events::{
-        push_rules::PushRulesEventContent, room::message::RoomMessageEventContent,
+        push_rules::{PushRulesEvent, PushRulesEventContent},
+        room::message::RoomMessageEventContent,
         GlobalAccountDataEvent, GlobalAccountDataEventType, StateEventType,
     },
     push::Ruleset,
@@ -407,7 +408,7 @@ impl KeyValueDatabase {
         }
 
         // If the database has any data, perform data migrations before starting
-        let latest_database_version = 11;
+        let latest_database_version = 12;
 
         if services().users.count()? > 0 {
             // MIGRATIONS
@@ -803,7 +804,81 @@ impl KeyValueDatabase {
                 warn!("Migration: 10 -> 11 finished");
             }
 
-            assert_eq!(11, latest_database_version);
+            if services().globals.database_version()? < 12 {
+                for username in services().users.list_local_users().unwrap() {
+                    let user =
+                        UserId::parse_with_server_name(username, services().globals.server_name())
+                            .unwrap();
+
+                    let raw_rules_list = services()
+                        .account_data
+                        .get(
+                            None,
+                            &user,
+                            GlobalAccountDataEventType::PushRules.to_string().into(),
+                        )
+                        .unwrap()
+                        .expect("Username is invalid");
+
+                    let mut account_data =
+                        serde_json::from_str::<PushRulesEvent>(raw_rules_list.get()).unwrap();
+                    let rules_list = &mut account_data.content.global;
+
+                    //content rule
+                    {
+                        let content_rule_transformation =
+                            [".m.rules.contains_user_name", ".m.rule.contains_user_name"];
+
+                        let rule = rules_list.content.get(content_rule_transformation[0]);
+                        if rule.is_some() {
+                            let mut rule = rule.unwrap().clone();
+                            rule.rule_id = content_rule_transformation[1].to_string();
+                            rules_list.content.remove(content_rule_transformation[0]);
+                            rules_list.content.insert(rule);
+                        }
+                    }
+
+                    //underride rules
+                    {
+                        let underride_rule_transformation = [
+                            [".m.rules.call", ".m.rule.call"],
+                            [".m.rules.room_one_to_one", ".m.rule.room_one_to_one"],
+                            [
+                                ".m.rules.encrypted_room_one_to_one",
+                                ".m.rule.encrypted_room_one_to_one",
+                            ],
+                            [".m.rules.message", ".m.rule.message"],
+                            [".m.rules.encrypted", ".m.rule.encrypted"],
+                        ];
+
+                        for transformation in underride_rule_transformation {
+                            let rule = rules_list.underride.get(transformation[0]);
+                            if let Some(rule) = rule {
+                                let mut rule = rule.clone();
+                                rule.rule_id = transformation[1].to_string();
+                                rules_list.underride.remove(transformation[0]);
+                                rules_list.underride.insert(rule);
+                            }
+                        }
+                    }
+
+                    services().account_data.update(
+                        None,
+                        &user,
+                        GlobalAccountDataEventType::PushRules.to_string().into(),
+                        &serde_json::to_value(account_data).expect("to json value always works"),
+                    )?;
+                }
+
+                services().globals.bump_database_version(12)?;
+
+                warn!("Migration: 11 -> 12 finished");
+            }
+
+            assert_eq!(
+                services().globals.database_version().unwrap(),
+                latest_database_version
+            );
 
             info!(
                 "Loaded {} database with version {}",