diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp
index cf35f65..d7a6fff 100644
--- a/gui/blanktimer.cpp
+++ b/gui/blanktimer.cpp
@@ -46,7 +46,8 @@
 #include "../variables.h"
 
 blanktimer::blanktimer(void) {
-	blanked = 0;
+	setTime(0);
+	setConBlank(0);
 	orig_brightness = getBrightness();
 }
 
@@ -62,14 +63,10 @@
 	return 0;
 }
 
-void blanktimer::setBlank(int blank) {
-	pthread_mutex_lock(&blankmutex);
+void blanktimer::setConBlank(int blank) {
+	pthread_mutex_lock(&conblankmutex);
 	conblank = blank;
-	pthread_mutex_unlock(&blankmutex);
-}
-
-int blanktimer::getBlank(void) {
-	return conblank;
+	pthread_mutex_unlock(&conblankmutex);
 }
 
 void blanktimer::setTimer(void) {
@@ -84,22 +81,25 @@
 
 int  blanktimer::setClockTimer(void) {
 	timespec curTime, diff;
-	while(1) {
-		usleep(1000);
+	for(;;) {
+		usleep(1000000);
 		clock_gettime(CLOCK_MONOTONIC, &curTime);
 		diff = TWFunc::timespec_diff(btimer, curTime);
-		if (sleepTimer && diff.tv_sec > sleepTimer && conblank != 1) {
+		if (sleepTimer > 2 && diff.tv_sec > (sleepTimer - 2) && conblank == 0) {
 			orig_brightness = getBrightness();
-			setBlank(1);
+			setConBlank(1);
+			setBrightness(5);
+		}
+		if (sleepTimer && diff.tv_sec > sleepTimer && conblank < 2) {
+			setConBlank(2);
+			setBrightness(0);
 			PageManager::ChangeOverlay("lock");
 		}
-		if (conblank == 1 && blanked != 1) {
-			blanked = 1;
-			gr_fb_blank(conblank);
-			setBrightness(0);
+		if (conblank == 2 && gr_fb_blank(1) >= 0) {
+			setConBlank(3);
 		}
 	}
-	return -1;
+	return -1; //shouldn't get here
 }
 
 int blanktimer::getBrightness(void) {
@@ -124,11 +124,19 @@
 
 void blanktimer::resetTimerAndUnblank(void) {
 	setTimer();
-	if (blanked) {
-		setBrightness(orig_brightness);
-		blanked = 0;
-		setBlank(0);
-		gr_fb_blank(conblank);
-		gui_forceRender();
+	switch (conblank) {
+		case 3:
+			if (gr_fb_blank(0) < 0) {
+				LOGI("blanktimer::resetTimerAndUnblank failed to gr_fb_blank(0)\n");
+				break;
+			}
+			// No break here, we want to keep going
+		case 2:
+			gui_forceRender();
+			// No break here, we want to keep going
+		case 1:
+			setBrightness(orig_brightness);
+			setConBlank(0);
+			break;
 	}
 }
diff --git a/gui/blanktimer.hpp b/gui/blanktimer.hpp
index 4135635..2d83c4d 100644
--- a/gui/blanktimer.hpp
+++ b/gui/blanktimer.hpp
@@ -32,8 +32,7 @@
 		void setTime(int newtime);
 
 	private:
-		void setBlank(int blank);
-		int getBlank(void);
+		void setConBlank(int blank);
 		void setTimer(void);
 		timespec getTimer(void);
 		int getBrightness(void);
@@ -42,13 +41,12 @@
 		int setClockTimer(void);
 		typedef int (blanktimer::*ThreadPtr)(void);
 		typedef void* (*PThreadPtr)(void*);
-		pthread_mutex_t blankmutex;
+		pthread_mutex_t conblankmutex;
 		pthread_mutex_t timermutex;
 		int conblank;
 		timespec btimer;
 		unsigned long long sleepTimer;
 		int orig_brightness;
-		int blanked;
 };
 
 extern blanktimer blankTimer;
diff --git a/minuitwrp/graphics.c b/minuitwrp/graphics.c
index dc79db8..61a98c3 100644
--- a/minuitwrp/graphics.c
+++ b/minuitwrp/graphics.c
@@ -685,13 +685,14 @@
     return (unsigned short *) gr_mem_surface.data;
 }
 
-void gr_fb_blank(int blank)
+int gr_fb_blank(int blank)
 {
     int ret;
 
     ret = ioctl(gr_fb_fd, FBIOBLANK, blank ? FB_BLANK_POWERDOWN : FB_BLANK_UNBLANK);
     if (ret < 0)
         perror("ioctl(): blank");
+	return ret;
 }
 
 int gr_get_surface(gr_surface* surface)
diff --git a/minuitwrp/minui.h b/minuitwrp/minui.h
index d66807c..03e15bb 100644
--- a/minuitwrp/minui.h
+++ b/minuitwrp/minui.h
@@ -27,7 +27,7 @@
 int gr_fb_height(void);
 gr_pixel *gr_fb_data(void);
 void gr_flip(void);
-void gr_fb_blank(int blank);
+int gr_fb_blank(int blank);
 
 void gr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
 void gr_fill(int x, int y, int w, int h);
