diff --git a/gui/blanktimer.cpp b/gui/blanktimer.cpp
new file mode 100644
index 0000000..f64bb5f
--- /dev/null
+++ b/gui/blanktimer.cpp
@@ -0,0 +1,128 @@
+/*
+        Copyright 2012 bigbiff/Dees_Troy TeamWin
+        This file is part of TWRP/TeamWin Recovery Project.
+
+        TWRP is free software: you can redistribute it and/or modify
+        it under the terms of the GNU General Public License as published by
+        the Free Software Foundation, either version 3 of the License, or
+        (at your option) any later version.
+
+        TWRP is distributed in the hope that it will be useful,
+        but WITHOUT ANY WARRANTY; without even the implied warranty of
+        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+        GNU General Public License for more details.
+
+        You should have received a copy of the GNU General Public License
+        along with TWRP.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+using namespace std;
+#include "rapidxml.hpp"
+using namespace rapidxml;
+extern "C" {
+#include "../minzip/Zip.h"
+#include "../minuitwrp/minui.h"
+}
+#include <string>
+#include <vector>
+#include <map>
+#include "resources.hpp"
+#include <pthread.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+#include <pixelflinger/pixelflinger.h>
+#include <linux/kd.h>
+#include <linux/fb.h>
+#include <sstream>
+#include "pages.hpp"
+#include "blanktimer.hpp"
+extern "C" {
+#include "../common.h"
+#include "../recovery_ui.h"
+}
+#include "../twrp-functions.hpp"
+#include "../variables.h"
+
+blanktimer::blanktimer(void) {
+	blanked = 0;
+	sleepTimer = 60;
+	orig_brightness = getBrightness();
+}
+
+int blanktimer::setTimerThread(void) {
+	pthread_t thread;
+	ThreadPtr blankptr = &blanktimer::setClockTimer;
+	PThreadPtr p = *(PThreadPtr*)&blankptr;
+	pthread_create(&thread, NULL, p, this);
+	return 0;
+}
+
+void blanktimer::setBlank(int blank) {
+	pthread_mutex_lock(&blankmutex);
+	conblank = blank;
+	pthread_mutex_unlock(&blankmutex);
+}
+
+int blanktimer::getBlank(void) {
+	return conblank;
+}
+
+void blanktimer::setTimer(void) {
+	pthread_mutex_lock(&timermutex);
+	clock_gettime(CLOCK_MONOTONIC, &btimer);
+	pthread_mutex_unlock(&timermutex);
+}
+
+timespec blanktimer::getTimer(void) {
+	return btimer;
+}
+
+int  blanktimer::setClockTimer(void) {
+	timespec curTime, diff;
+	while(1) {
+		usleep(1000);
+		clock_gettime(CLOCK_MONOTONIC, &curTime);
+		diff = TWFunc::timespec_diff(btimer, curTime);
+		if (diff.tv_sec > sleepTimer && conblank != 1)
+			setBlank(1);
+		if (conblank == 1 && blanked != 1) {
+			blanked = 1;
+			gr_fb_blank(conblank);
+			setBrightness(0);
+			PageManager::ChangeOverlay("lock");
+		}
+	}
+	return -1;
+}
+
+int blanktimer::getBrightness(void) {
+	string results;
+	string brightness_path = EXPAND(TW_BRIGHTNESS_PATH);
+	if ((TWFunc::read_file(brightness_path, results)) != 0)
+		return -1;
+	return atoi(results.c_str());
+
+}
+
+int blanktimer::setBrightness(int brightness) {
+	string brightness_path = EXPAND(TW_BRIGHTNESS_PATH);
+	string bstring;
+	char buff[100];
+	sprintf(buff, "%d", brightness);
+	bstring = buff;
+	if ((TWFunc::write_file(brightness_path, bstring)) != 0)
+		return -1;
+	return 0;
+}
+
+void blanktimer::resetTimerAndUnblank(void) {
+	setTimer();
+	if (blanked) {
+		setBrightness(orig_brightness);
+		blanked = 0;
+		setBlank(0);
+		gr_fb_blank(conblank);
+		gui_forceRender();
+	}
+}
