diff --git a/gui/gui.cpp b/gui/gui.cpp
index fecc032..6b3b9c9 100644
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -51,6 +51,7 @@
 #include "../openrecoveryscript.hpp"
 #include "../orscmd/orscmd.h"
 #include "blanktimer.hpp"
+#include "../tw_atomic.hpp"
 
 // Enable to print render time of each frame to the log file
 //#define PRINT_RENDER_TIME 1
@@ -62,11 +63,10 @@
 // Global values
 static gr_surface gCurtain = NULL;
 static int gGuiInitialized = 0;
-static int gGuiConsoleRunning = 0;
-static int gGuiConsoleTerminate = 0;
-static int gForceRender = 0;
-pthread_mutex_t gForceRendermutex;
-static int gNoAnimation = 1;
+static TWAtomicInt gGuiConsoleRunning;
+static TWAtomicInt gGuiConsoleTerminate;
+static TWAtomicInt gForceRender;
+const int gNoAnimation = 1;
 static int gGuiInputRunning = 0;
 blanktimer blankTimer;
 int ors_read_fd = -1;
@@ -480,7 +480,7 @@
 					OpenRecoveryScript::run_script_file();
 				}
 				gui_set_FILE(NULL);
-				gGuiConsoleTerminate = 1;
+				gGuiConsoleTerminate.set_value(1);
 			}
 		}
 		fclose(orsout);
@@ -581,11 +581,11 @@
 		}
 #endif
 
-		if (gGuiConsoleRunning) {
+		if (gGuiConsoleRunning.get_value()) {
 			continue;
 		}
 
-		if (!gForceRender)
+		if (!gForceRender.get_value())
 		{
 			int ret;
 
@@ -617,9 +617,7 @@
 		}
 		else
 		{
-			pthread_mutex_lock(&gForceRendermutex);
-			gForceRender = 0;
-			pthread_mutex_unlock(&gForceRendermutex);
+			gForceRender.set_value(0);
 			PageManager::Render();
 			flip();
 		}
@@ -642,9 +640,7 @@
 
 int gui_forceRender(void)
 {
-	pthread_mutex_lock(&gForceRendermutex);
-	gForceRender = 1;
-	pthread_mutex_unlock(&gForceRendermutex);
+	gForceRender.set_value(1);
 	return 0;
 }
 
@@ -652,27 +648,21 @@
 {
 	LOGINFO("Set page: '%s'\n", newPage.c_str());
 	PageManager::ChangePage(newPage);
-	pthread_mutex_lock(&gForceRendermutex);
-	gForceRender = 1;
-	pthread_mutex_unlock(&gForceRendermutex);
+	gForceRender.set_value(1);
 	return 0;
 }
 
 int gui_changeOverlay(std::string overlay)
 {
 	PageManager::ChangeOverlay(overlay);
-	pthread_mutex_lock(&gForceRendermutex);
-	gForceRender = 1;
-	pthread_mutex_unlock(&gForceRendermutex);
+	gForceRender.set_value(1);
 	return 0;
 }
 
 int gui_changePackage(std::string newPackage)
 {
 	PageManager::SelectPackage(newPackage);
-	pthread_mutex_lock(&gForceRendermutex);
-	gForceRender = 1;
-	pthread_mutex_unlock(&gForceRendermutex);
+	gForceRender.set_value(1);
 	return 0;
 }
 
@@ -836,9 +826,9 @@
 	if (!gGuiInitialized)
 		return -1;
 
-	gGuiConsoleTerminate = 1;
+	gGuiConsoleTerminate.set_value(1);
 
-	while (gGuiConsoleRunning)
+	while (gGuiConsoleRunning.get_value())
 		loopTimer();
 
 	// Set the default package
@@ -871,11 +861,11 @@
 {
 	PageManager::SwitchToConsole();
 
-	while (!gGuiConsoleTerminate)
+	while (!gGuiConsoleTerminate.get_value())
 	{
 		loopTimer();
 
-		if (!gForceRender)
+		if (!gForceRender.get_value())
 		{
 			int ret;
 
@@ -891,15 +881,13 @@
 		}
 		else
 		{
-			pthread_mutex_lock(&gForceRendermutex);
-			gForceRender = 0;
-			pthread_mutex_unlock(&gForceRendermutex);
+			gForceRender.set_value(0);
 			PageManager::Render();
 			flip();
 		}
 	}
-	gGuiConsoleRunning = 0;
-	gForceRender = 1; // this will kickstart the GUI to render again
+	gGuiConsoleRunning.set_value(0);
+	gForceRender.set_value(1); // this will kickstart the GUI to render again
 	PageManager::EndConsole();
 	LOGINFO("Console stopping\n");
 	return NULL;
@@ -910,12 +898,12 @@
 	if (!gGuiInitialized)
 		return -1;
 
-	gGuiConsoleTerminate = 0;
+	gGuiConsoleTerminate.set_value(0);
 
-	if (gGuiConsoleRunning)
+	if (gGuiConsoleRunning.get_value())
 		return 0;
 
-	gGuiConsoleRunning = 1;
+	gGuiConsoleRunning.set_value(1);
 
 	// Start by spinning off an input handler.
 	pthread_t t;
