diff --git a/app/src/main/cpp/main.cpp b/app/src/main/cpp/main.cpp
index 034ad45f78379ac94c86ae6ea7f47ad459fdb3d1..6e9b76337035d01cd638eea49da2308a71703171 100644
--- a/app/src/main/cpp/main.cpp
+++ b/app/src/main/cpp/main.cpp
@@ -1,7 +1,6 @@
 #include <android/log.h>
 #include <sys/system_properties.h>
 #include <unistd.h>
-#include <fstream>
 
 #include "zygisk.hpp"
 #include "shadowhook.h"
@@ -11,7 +10,7 @@
 
 #define DEX_FILE_PATH "/data/adb/modules/playintegrityfix/classes.dex"
 
-#define PROP_FILE_PATH "/data/adb/modules/playintegrityfix/pif.json"
+#define JSON_FILE_PATH "/data/adb/modules/playintegrityfix/pif.json"
 
 static std::string FIRST_API_LEVEL, SECURITY_PATCH;
 
@@ -72,27 +71,6 @@ static void doHook() {
     LOGD("Found '__system_property_read_callback' handle at %p", handle);
 }
 
-static void sendVector(int fd, const std::vector<char> &vec) {
-    // Send the size of the vector
-    size_t size = vec.size();
-    write(fd, &size, sizeof(size_t));
-
-    // Send the vector data
-    write(fd, vec.data(), size);
-}
-
-static std::vector<char> receiveVector(int fd) {
-    // Receive the size of the vector
-    size_t size;
-    read(fd, &size, sizeof(size_t));
-
-    // Receive the vector data
-    std::vector<char> vec(size);
-    read(fd, vec.data(), size);
-
-    return vec;
-}
-
 class PlayIntegrityFix : public zygisk::ModuleBase {
 public:
     void onLoad(zygisk::Api *api, JNIEnv *env) override {
@@ -124,10 +102,36 @@ public:
             return;
         }
 
+        long size = 0;
         int fd = api->connectCompanion();
 
-        dexVector = receiveVector(fd);
-        propVector = receiveVector(fd);
+        read(fd, &size, sizeof(long));
+
+        if (size < 1) {
+            close(fd);
+            LOGD("Couldn't read from file descriptor 'classes.dex' file!");
+            api->setOption(zygisk::DLCLOSE_MODULE_LIBRARY);
+            return;
+        }
+
+        dexVector.resize(size);
+
+        read(fd, dexVector.data(), size);
+
+        size = 0;
+
+        read(fd, &size, sizeof(long));
+
+        if (size < 1) {
+            close(fd);
+            LOGD("Couldn't read from file descriptor 'pif.json' file!");
+            api->setOption(zygisk::DLCLOSE_MODULE_LIBRARY);
+            return;
+        }
+
+        propVector.resize(size);
+
+        read(fd, propVector.data(), size);
 
         close(fd);
 
@@ -135,8 +139,6 @@ public:
              static_cast<int>(dexVector.size()));
         LOGD("Read from file descriptor file 'pif.json' -> %d bytes",
              static_cast<int>(propVector.size()));
-
-        if (dexVector.empty() || propVector.empty()) api->setOption(zygisk::DLCLOSE_MODULE_LIBRARY);
     }
 
     void postAppSpecialize(const zygisk::AppSpecializeArgs *args) override {
@@ -211,24 +213,39 @@ private:
 };
 
 static void companion(int fd) {
-    std::ifstream dex(DEX_FILE_PATH, std::ios::binary);
-    std::ifstream prop(PROP_FILE_PATH);
+    FILE *dex = fopen(DEX_FILE_PATH, "rb");
 
-    std::vector<char> dexVector((std::istreambuf_iterator<char>(dex)),
-                                std::istreambuf_iterator<char>());
-    std::vector<char> propVector((std::istreambuf_iterator<char>(prop)),
-                                 std::istreambuf_iterator<char>());
+    fseek(dex, 0, SEEK_END);
+    long dexSize = ftell(dex);
+    fseek(dex, 0, SEEK_SET);
 
-    dex.close();
-    prop.close();
+    char dexBuffer[dexSize];
+    fread(dexBuffer, 1, dexSize, dex);
 
-    sendVector(fd, dexVector);
-    sendVector(fd, propVector);
+    fclose(dex);
 
-    dexVector.clear();
-    propVector.clear();
+    FILE *json = fopen(JSON_FILE_PATH, "r");
+
+    fseek(json, 0, SEEK_END);
+    long jsonSize = ftell(json);
+    fseek(json, 0, SEEK_SET);
+
+    char jsonBuffer[jsonSize];
+    fread(jsonBuffer, 1, jsonSize, json);
+
+    fclose(json);
+
+    dexBuffer[dexSize] = 0;
+    jsonBuffer[jsonSize] = 0;
+
+    write(fd, &dexSize, sizeof(long));
+    write(fd, dexBuffer, dexSize);
+
+    write(fd, &jsonSize, sizeof(long));
+    write(fd, jsonBuffer, jsonSize);
 }
 
+
 REGISTER_ZYGISK_MODULE(PlayIntegrityFix)
 
 REGISTER_ZYGISK_COMPANION(companion)
\ No newline at end of file
diff --git a/module/bin/x86/resetprop b/module/bin/x86/resetprop
deleted file mode 100644
index b479c19b674d10a9ad18ada9c2e9ea4d37f11093..0000000000000000000000000000000000000000
Binary files a/module/bin/x86/resetprop and /dev/null differ
diff --git a/module/bin/x86_64/resetprop b/module/bin/x86_64/resetprop
deleted file mode 100644
index 5b8dec73b5a4bb8025a09df16825554e75205a69..0000000000000000000000000000000000000000
Binary files a/module/bin/x86_64/resetprop and /dev/null differ
diff --git a/module/customize.sh b/module/customize.sh
index 2c09f410b539c3af398e8a240df6d7f58b341261..a6d50c03f8933c8b4577a6137e392594638fe0fe 100644
--- a/module/customize.sh
+++ b/module/customize.sh
@@ -6,9 +6,13 @@ fi
 # safetynet-fix module is incompatible
 if [ -d "/data/adb/modules/safetynet-fix" ]; then
     touch "/data/adb/modules/safetynet-fix/remove"
-	ui_print "!!! safetynet-fix module removed!"
+	ui_print "- 'safetynet-fix' module will be removed in next reboot."
+fi
+
+# Use custom resetprop only in Android 10+
+if [ "$API" -gt 28 ]; then
+	mv -f "$MODPATH/bin/$ABI/resetprop" "$MODPATH"
+	ui_print "- Using custom resetprop to avoid detections."
 fi
 
-# use our resetprop
-mv -f "$MODPATH/bin/$ABI/resetprop" "$MODPATH"
 rm -rf "$MODPATH/bin"
\ No newline at end of file
diff --git a/module/module.prop b/module/module.prop
index ff98b474f5ba2279031117333513cf5349b9cb0b..6c77468862f694207e932a3ac32f584c64f5ddba 100644
--- a/module/module.prop
+++ b/module/module.prop
@@ -1,6 +1,7 @@
 id=playintegrityfix
 name=Play Integrity Fix
-version=v1.2-PROPS
-versionCode=12
+version=v13.8-beta
+versionCode=137
 author=chiteroman
-description=Fix CTS profile (SafetyNet) and DEVICE verdict (Play Integrity).
\ No newline at end of file
+description=Fix CTS profile (SafetyNet) and DEVICE verdict (Play Integrity).
+updateJson=https://raw.githubusercontent.com/chiteroman/PlayIntegrityFix/main/update.json
\ No newline at end of file
diff --git a/module/service.sh b/module/service.sh
index 05b982592424eccc0ead53d0ab77192680c61aab..0cdd82a54ee6d2285b54061868c6cac3c22ee8b4 100644
--- a/module/service.sh
+++ b/module/service.sh
@@ -2,7 +2,11 @@
 
 RESETPROP="${0%/*}/resetprop"
 
-chmod 755 $RESETPROP
+if [ -x "$RESETPROP" ]; then
+	chmod 755 $RESETPROP
+else
+	RESETPROP="resetprop"
+fi
 
 check_resetprop() {
   local NAME=$1