diff --git a/init/init_RM6785.cpp b/init/init_RM6785.cpp
index 1b088d6..610fe12 100644
--- a/init/init_RM6785.cpp
+++ b/init/init_RM6785.cpp
@@ -1,173 +1,153 @@
-/*
-   Copyright (c) 2020, The LineageOS Project
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are
-   met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-   ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-   BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-   IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <fcntl.h>
 #include <fstream>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <android-base/file.h>
+#include <tuple>
 #include <android-base/logging.h>
-#include <android-base/properties.h>
-#include <android-base/strings.h>
 
 #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
 #include <sys/_system_properties.h>
 
 #include "vendor_init.h"
-#include "property_service.h"
 
-#define PROC_NFC_CHIPSET "/proc/oppo_nfc/chipset"
+#define PROC_NFC "/proc/oppo_nfc/chipset"
+#define PROC_OPERATOR "/proc/oppoVersion/operatorName"
 
-using android::base::ReadFileToString;
-using android::base::Trim;
-using std::string;
+void property_override(std::string prop, std::string value, bool add = true) {
+    auto pi = (prop_info *)__system_property_find(prop.c_str());
 
-std::vector<std::string> ro_props_default_source_order = {
-    "",
-    "odm.",
-    "product.",
-    "system.",
-    "system_ext.",
-    "vendor.",
-};
-
-void property_override(char const prop[], char const value[], bool add = true) {
-    prop_info *pi;
-
-    pi = (prop_info*) __system_property_find(prop);
-    if (pi)
-        __system_property_update(pi, value, strlen(value));
-    else if (add)
-        __system_property_add(prop, strlen(prop), value, strlen(value));
-}
-
-void set_ro_build_prop(const std::string &prop, const std::string &value, bool product = true) {
-    string prop_name;
-
-    for (const auto &source : ro_props_default_source_order) {
-        if (product)
-            prop_name = "ro.product." + source + prop;
-        else
-            prop_name = "ro." + source + "build." + prop;
-
-        property_override(prop_name.c_str(), value.c_str());
+    if (pi != nullptr) {
+        __system_property_update(pi, value.c_str(), value.size());
+    } else if (add) {
+        __system_property_add(prop.c_str(), prop.size(), value.c_str(),
+                              value.size());
     }
 }
 
-void check_nfc_support()
-{
-    std::ifstream procfile(PROC_NFC_CHIPSET);
+void set_ro_build_prop(const std::string &prop, const std::string &value,
+                       bool product = true) {
+    std::string prop_name;
+    std::string prop_types[] = {
+        "",
+        "bootimage.",
+        "odm.",
+        "odm_dlkm.",
+        "product.",
+        "system.",
+        "system_ext.",
+        "vendor.",
+        "vendor_dlkm.",
+    };
+
+    for (const std::string &source : prop_types) {
+        if (product) {
+            prop_name = "ro.product." + source + prop;
+        } else {
+            prop_name = "ro." + source + "build." + prop;
+        }
+
+        property_override(prop_name, value, false);
+    }
+}
+
+bool nfc_variant() {
+    std::ifstream nfc_file(PROC_NFC);
+    nfc_file.good();
     std::string chipset;
 
-    getline(procfile, chipset);
+    getline(nfc_file, chipset);
 
     LOG(INFO) << "oppo_nfc : chipset " << chipset;
 
-    if (chipset != "NULL") {
-        property_override("ro.boot.product.hardware.sku", "nfc");
+    return (chipset != "NULL");
+}
+
+std::tuple<std::string, std::string> get_device() {
+    std::string device, model, line;
+    std::ifstream operator_file(PROC_OPERATOR);
+    operator_file.good();
+    getline(operator_file, line);
+
+    int operatorName = stoi(line);
+
+    switch (operatorName) {
+        // realme 6
+        case 101:
+        case 102:
+        case 104:
+        case 105:
+            device = "RMX2001L1";
+            model = "RMX2001";
+            break;
+        case 106:
+            device = "RMX2003L1";
+            model = "RMX2003";
+            break;
+        case 113:
+            device = "RMX2005L1";
+            model = "RMX2005";
+            break;
+        // realme 6i/6s/Narzo
+        case 111:
+        case 112:
+        case 114:
+            device = "RMX2002L1";
+            model = "RMX2002";
+            break;
+        // realme 7
+        case 140:
+        case 141:
+        case 146:
+        case 149:
+            device = "RMX2151L1";
+            model = "RMX2151";
+            break;
+        case 142:
+            device = "RMX2153L1";
+            model = "RMX2153";
+            break;
+        case 94:
+        case 148:
+            device = "RMX2155L1";
+            model = "RMX2155";
+            break;
+        // realme Narzo 30 4G
+        case 90:
+        case 92:
+            device = "RMX2156L1";
+            model = "RMX2156";
+            break;
+        // realme Narzo 20 Pro
+        case 143:
+            device = "RMX2161L1";
+            model = "RMX2161";
+        break;
+        case 145:
+        case 147:
+            device = "RMX2163L1";
+            model = "RMX2163";
+            break;
+        default:
+            LOG(ERROR) << "Unable to read operator from " << PROC_OPERATOR;
     }
+    return {device, model};
 }
 
 void vendor_load_properties() {
-    char const *operator_file = "/proc/oppoVersion/operatorName";
-    string operator_name;
-    string device;
-    string model;
-
-    if (ReadFileToString(operator_file, &operator_name)) {
-        // realme 6
-        if (Trim(operator_name) == "101" || Trim(operator_name) == "102"
-               || Trim(operator_name) == "104" || Trim(operator_name) == "105") {
-            device = "RMX2001L1";
-            model = "RMX2001";
-        }
-        else if (Trim(operator_name) == "106") {
-            device = "RMX2003L1";
-            model = "RMX2003";
-        }
-        else if (Trim(operator_name) == "113") {
-            device = "RMX2005L1";
-            model = "RMX2005";
-        }
-        // realme 6i/6s/Narzo
-        else if (Trim(operator_name) == "111" || Trim(operator_name) == "112"
-               || Trim(operator_name) == "114") {
-            device = "RMX2002L1";
-            model = "RMX2002";
-        }
-        // realme 7
-        else if (Trim(operator_name) == "140" || Trim(operator_name) == "141"
-               || Trim(operator_name) == "146" || Trim(operator_name) == "149") {
-            device = "RMX2151L1";
-            model = "RMX2151";
-            property_override("ro.device", "RMX2151");
-        }
-        else if (Trim(operator_name) == "142") {
-            device = "RMX2153L1";
-            model = "RMX2153";
-            property_override("ro.device", "RMX2151");
-        }
-        else if (Trim(operator_name) == "94" || Trim(operator_name) == "148") {
-            device = "RMX2155L1";
-            model = "RMX2155";
-            property_override("ro.device", "RMX2151");
-        }
-        // realme Narzo 30 4G
-        else if (Trim(operator_name) == "90" || Trim(operator_name) == "92") {
-            device = "RMX2156L1";
-            model = "RMX2156";
-            property_override("ro.device", "RMX2151");
-        }
-        // realme Narzo 20 Pro
-        else if (Trim(operator_name) == "143") {
-            device = "RMX2161L1";
-            model = "RMX2161";
-            property_override("ro.device", "RMX2161");
-        }
-        else if (Trim(operator_name) == "147" || Trim(operator_name) == "145") {
-            device = "RMX2163L1";
-            model = "RMX2163";
-            property_override("ro.device", "RMX2161");
-        }
-    }
-    else {
-        LOG(ERROR) << "Unable to read operator from " << operator_file;
-    }
+    auto [device, model] = get_device();
 
     set_ro_build_prop("device", device);
     set_ro_build_prop("model", model);
     set_ro_build_prop("name", model);
     set_ro_build_prop("product", model, false);
 
-    check_nfc_support();
+    // for RRO
+    if (!device.find("RMX215")) {
+        property_override("ro.device", "RMX2151");
+    }
+    if (!device.find("RMX216")) {
+        property_override("ro.device", "RMX2161");
+    }
+
+    // NFC check
+    if (nfc_variant()) {
+        property_override("ro.boot.product.hardware.sku", "nfc");
+    }
 }
