diff --git a/common.h b/common.h
index f10fe67..a948fb1 100644
--- a/common.h
+++ b/common.h
@@ -17,16 +17,15 @@
 #ifndef RECOVERY_COMMON_H
 #define RECOVERY_COMMON_H
 
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdarg.h>
 
 #define STRINGIFY(x) #x
 #define EXPAND(x) STRINGIFY(x)
 
-class RecoveryUI;
-
-extern RecoveryUI* ui;
 extern bool modified_flash;
+typedef struct fstab_rec Volume;
 
 // fopen a file, mounting volumes and making parent dirs as necessary.
 FILE* fopen_path(const char *path, const char *mode);
diff --git a/install.cpp b/install.cpp
index f124a26..919f241 100644
--- a/install.cpp
+++ b/install.cpp
@@ -47,6 +47,8 @@
 #include "ui.h"
 #include "verifier.h"
 
+extern RecoveryUI* ui;
+
 #define ASSUMED_UPDATE_BINARY_NAME  "META-INF/com/google/android/update-binary"
 static constexpr const char* AB_OTA_PAYLOAD_PROPERTIES = "payload_properties.txt";
 static constexpr const char* AB_OTA_PAYLOAD = "payload.bin";
diff --git a/install.h b/install.h
index 1ec01e8..7f66a51 100644
--- a/install.h
+++ b/install.h
@@ -20,9 +20,10 @@
 #include <string>
 #include <ziparchive/zip_archive.h>
 
+#include "common.h"
+
 enum { INSTALL_SUCCESS, INSTALL_ERROR, INSTALL_CORRUPT, INSTALL_NONE, INSTALL_SKIPPED,
         INSTALL_RETRY };
-
 // Install the package specified by root_path.  If INSTALL_SUCCESS is
 // returned and *wipe_cache is true on exit, caller should wipe the
 // cache partition.
diff --git a/print_sha1.h b/print_sha1.h
index 1f85895..c7c1f36 100644
--- a/print_sha1.h
+++ b/print_sha1.h
@@ -20,7 +20,7 @@
 #include <stdint.h>
 #include <string>
 
-#include <openssl/sha.h>
+#include "openssl/sha.h"
 
 static std::string print_sha1(const uint8_t* sha1, size_t len) {
     const char* hex = "0123456789abcdef";
@@ -41,7 +41,7 @@
 }
 
 static std::string print_hex(const uint8_t* bytes, size_t len) {
-    return print_sha1(bytes, len);
+  return print_sha1(bytes, len);
 }
 
 #endif  // RECOVERY_PRINT_SHA1_H
diff --git a/recovery.cpp b/recovery.cpp
index 4079927..4d1ad1d 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -69,6 +69,8 @@
 #include "ui.h"
 #include "screen_ui.h"
 
+struct selabel_handle *sehandle;
+
 static const struct option OPTIONS[] = {
   { "update_package", required_argument, NULL, 'u' },
   { "retry_count", required_argument, NULL, 'n' },
@@ -117,17 +119,14 @@
 // So we should check battery with a slightly lower limitation.
 static const int BATTERY_OK_PERCENTAGE = 20;
 static const int BATTERY_WITH_CHARGER_OK_PERCENTAGE = 15;
-static constexpr const char* RECOVERY_WIPE = "/etc/recovery.wipe";
-static constexpr const char* DEFAULT_LOCALE = "en_US";
+constexpr const char* RECOVERY_WIPE = "/etc/recovery.wipe";
 
-static std::string locale;
-static const char* stage = nullptr;
-static const char* reason = nullptr;
-static bool has_cache = false;
-
-RecoveryUI* ui = nullptr;
+RecoveryUI* ui = NULL;
+static const char* locale = "en_US";
+char* stage = NULL;
+char* reason = NULL;
 bool modified_flash = false;
-struct selabel_handle* sehandle;
+static bool has_cache = false;
 
 /*
  * The recovery tool communicates with the main system through /cache files.
@@ -207,9 +206,6 @@
 // close a file, log an error if the error indicator is set
 static void check_and_fclose(FILE *fp, const char *name) {
     fflush(fp);
-    if (fsync(fileno(fp)) == -1) {
-        PLOG(ERROR) << "Failed to fsync " << name;
-    }
     if (ferror(fp)) {
         PLOG(ERROR) << "Error in " << name;
     }
@@ -519,18 +515,24 @@
 // clear the recovery command and prepare to boot a (hopefully working) system,
 // copy our log file to cache as well (for the system to read). This function is
 // idempotent: call it as many times as you like.
-static void finish_recovery() {
+static void
+finish_recovery() {
     // Save the locale to cache, so if recovery is next started up
     // without a --locale argument (eg, directly from the bootloader)
     // it will use the last-known locale.
-    if (!locale.empty() && has_cache) {
-        LOG(INFO) << "Saving locale \"" << locale << "\"";
-
-        FILE* fp = fopen_path(LOCALE_FILE, "w");
-        if (!android::base::WriteStringToFd(locale, fileno(fp))) {
-            PLOG(ERROR) << "Failed to save locale to " << LOCALE_FILE;
+    if (locale != NULL) {
+        size_t len = strlen(locale);
+        __pmsg_write(LOCALE_FILE, locale, len);
+        if (has_cache) {
+            LOG(INFO) << "Saving locale \"" << locale << "\"";
+            FILE* fp = fopen_path(LOCALE_FILE, "w");
+            if (fp != NULL) {
+                fwrite(locale, 1, len, fp);
+                fflush(fp);
+                fsync(fileno(fp));
+                check_and_fclose(fp, LOCALE_FILE);
+            }
         }
-        check_and_fclose(fp, LOCALE_FILE);
     }
 
     copy_logs();
@@ -1280,32 +1282,40 @@
     printf("%s=%s\n", key, name);
 }
 
-static std::string load_locale_from_cache() {
-    if (ensure_path_mounted(LOCALE_FILE) != 0) {
-        LOG(ERROR) << "Can't mount " << LOCALE_FILE;
-        return "";
+static void
+load_locale_from_cache() {
+    FILE* fp = fopen_path(LOCALE_FILE, "r");
+    char buffer[80];
+    if (fp != NULL) {
+        fgets(buffer, sizeof(buffer), fp);
+        int j = 0;
+        unsigned int i;
+        for (i = 0; i < sizeof(buffer) && buffer[i]; ++i) {
+            if (!isspace(buffer[i])) {
+                buffer[j++] = buffer[i];
+            }
+        }
+        buffer[j] = 0;
+        locale = strdup(buffer);
+        check_and_fclose(fp, LOCALE_FILE);
     }
-
-    std::string content;
-    if (!android::base::ReadFileToString(LOCALE_FILE, &content)) {
-        PLOG(ERROR) << "Can't read " << LOCALE_FILE;
-        return "";
-    }
-
-    return android::base::Trim(content);
 }
 
-void ui_print(const char* format, ...) {
-    std::string buffer;
+static RecoveryUI* gCurrentUI = NULL;
+
+void
+ui_print(const char* format, ...) {
+    char buffer[256];
+
     va_list ap;
     va_start(ap, format);
-    android::base::StringAppendV(&buffer, format, ap);
+    vsnprintf(buffer, sizeof(buffer), format, ap);
     va_end(ap);
 
-    if (ui != nullptr) {
-        ui->Print("%s", buffer.c_str());
+    if (gCurrentUI != NULL) {
+        gCurrentUI->Print("%s", buffer);
     } else {
-        fputs(buffer.c_str(), stdout);
+        fputs(buffer, stdout);
     }
 }
 
@@ -1314,8 +1324,8 @@
 void UiLogger(android::base::LogId id, android::base::LogSeverity severity,
                const char* tag, const char* file, unsigned int line,
                const char* message) {
-    if (severity >= android::base::ERROR && ui != nullptr) {
-        ui->Print("E:%s\n", message);
+    if (severity >= android::base::ERROR && gCurrentUI != NULL) {
+        gCurrentUI->Print("E:%s\n", message);
     } else {
         fprintf(stdout, "%c:%s\n", log_characters[severity], message);
     }
@@ -1411,7 +1421,7 @@
     };
     std::string log_content = android::base::Join(log_buffer, "\n");
     if (!android::base::WriteStringToFile(log_content, TEMPORARY_INSTALL_FILE)) {
-        PLOG(ERROR) << "failed to write " << TEMPORARY_INSTALL_FILE;
+      PLOG(ERROR) << "failed to write " << TEMPORARY_INSTALL_FILE;
     }
 
     // Also write the info into last_log.
@@ -1563,24 +1573,18 @@
         }
     }
 
-    if (locale.empty()) {
-        if (has_cache) {
-            locale = load_locale_from_cache();
-        }
-
-        if (locale.empty()) {
-            locale = DEFAULT_LOCALE;
-        }
+    if (locale == nullptr && has_cache) {
+        load_locale_from_cache();
     }
-
-    printf("locale is [%s]\n", locale.c_str());
+    printf("locale is [%s]\n", locale);
     printf("stage is [%s]\n", stage);
     printf("reason is [%s]\n", reason);
 
     Device* device = make_device();
     ui = device->GetUI();
+    gCurrentUI = ui;
 
-    ui->SetLocale(locale.c_str());
+    ui->SetLocale(locale);
     ui->Init();
     // Set background string to "installing security update" for security update,
     // otherwise set it to "installing system update".
@@ -1595,7 +1599,7 @@
     if (show_text) ui->ShowText(true);
 
     struct selinux_opt seopts[] = {
-        { SELABEL_OPT_PATH, "/file_contexts" }
+      { SELABEL_OPT_PATH, "/file_contexts" }
     };
 
     sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1);
@@ -1767,7 +1771,7 @@
             break;
     }
     while (true) {
-        pause();
+      pause();
     }
     // Should be unreachable.
     return EXIT_SUCCESS;
diff --git a/roots.h b/roots.h
index 542f03b..a14b7d9 100644
--- a/roots.h
+++ b/roots.h
@@ -17,7 +17,7 @@
 #ifndef RECOVERY_ROOTS_H_
 #define RECOVERY_ROOTS_H_
 
-typedef struct fstab_rec Volume;
+#include "common.h"
 
 // Load and parse volume data from /etc/recovery.fstab.
 void load_volume_table();
diff --git a/verifier.cpp b/verifier.cpp
index 44098f7..82cdd3b 100644
--- a/verifier.cpp
+++ b/verifier.cpp
@@ -14,11 +14,9 @@
  * limitations under the License.
  */
 
-#include "verifier.h"
-
 #include <errno.h>
+#include <malloc.h>
 #include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
 
 #include <algorithm>
@@ -33,6 +31,9 @@
 #include "common.h"
 #include "print_sha1.h"
 #include "ui.h"
+#include "verifier.h"
+
+extern RecoveryUI* ui;
 
 static constexpr size_t MiB = 1024 * 1024;
 
