diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
index 5ce2d8255830cccc798f8ea07482bf62e62816bd..4193fbd2a0804f9a08c83f5b08231bd0f081f797 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
@@ -36,6 +36,7 @@ import org.briarproject.bramble.api.settings.Settings;
 import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
 import org.briarproject.bramble.api.system.LocationUtils;
 import org.briarproject.bramble.util.IoUtils;
+import org.briarproject.bramble.util.ScheduledExecutorServiceWakeLock;
 import org.briarproject.bramble.util.StringUtils;
 
 import java.io.Closeable;
@@ -119,10 +120,12 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 	private final ConnectionStatus connectionStatus;
 	private final File torDirectory, torFile, geoIpFile, configFile;
 	private final File doneFile, cookieFile;
-	private final PowerManager.WakeLock wakeLock;
 	private final AtomicReference<Future<?>> connectivityCheck =
 			new AtomicReference<>();
 	private final AtomicBoolean used = new AtomicBoolean(false);
+	private final ScheduledExecutorServiceWakeLock scheduledExecutorServiceWakeLock;
+
+	private PowerManager.WakeLock wakeLock;
 
 	private volatile boolean running = false;
 	private volatile ServerSocket socket = null;
@@ -155,14 +158,27 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 		configFile = new File(torDirectory, "torrc");
 		doneFile = new File(torDirectory, "done");
 		cookieFile = new File(torDirectory, ".tor/control_auth_cookie");
-		Object o = appContext.getSystemService(POWER_SERVICE);
-		PowerManager pm = (PowerManager) o;
-		// This tag will prevent Huawei's powermanager from killing us.
-		wakeLock = pm.newWakeLock(PARTIAL_WAKE_LOCK, "LocationManagerService");
-		wakeLock.setReferenceCounted(false);
 		// Don't execute more than one connection status check at a time
 		connectionStatusExecutor = new PoliteExecutor("TorPlugin",
 				ioExecutor, 1);
+		scheduledExecutorServiceWakeLock =
+				new ScheduledExecutorServiceWakeLock(appContext);
+		scheduledExecutorServiceWakeLock.setRunnable((Runnable) () -> {
+			LOG.info("Renewing wake lock");
+			wakeLock.release();
+			aquireWakeLock();
+		});
+		aquireWakeLock();
+	}
+
+	private void aquireWakeLock(){
+		LOG.info("Aquiring wake lock");
+		PowerManager pm = (PowerManager)
+				appContext.getSystemService(POWER_SERVICE);
+		// This tag will prevent Huawei's powermanager from killing us.
+		wakeLock = pm.newWakeLock(PARTIAL_WAKE_LOCK, "LocationManagerService");
+		wakeLock.setReferenceCounted(false);
+		scheduledExecutorServiceWakeLock.setAlarm(1800000, MILLISECONDS);
 	}
 
 	@Override
@@ -514,6 +530,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 			}
 		}
 		wakeLock.release();
+		scheduledExecutorServiceWakeLock.cancelAlarm();
 	}
 
 	@Override
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/util/ScheduledExecutorServiceWakeLock.java b/bramble-android/src/main/java/org/briarproject/bramble/util/ScheduledExecutorServiceWakeLock.java
new file mode 100644
index 0000000000000000000000000000000000000000..4dff3946d0938b6a044ea26f4104f0751f7e0e0e
--- /dev/null
+++ b/bramble-android/src/main/java/org/briarproject/bramble/util/ScheduledExecutorServiceWakeLock.java
@@ -0,0 +1,47 @@
+package org.briarproject.bramble.util;
+
+import android.content.Context;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+
+public class ScheduledExecutorServiceWakeLock {
+
+	final Context appContext;
+
+	private static final ThreadFactory THREAD_FACTORY = new ThreadFactory() {
+		@Override
+		public Thread newThread(Runnable r) {
+			Thread t = new Thread(r);
+			t.setDaemon(true);
+			return t;
+		}
+	};
+
+	private ScheduledExecutorService scheduledExecutorService = null; // Locking: this
+	private Runnable runnable;
+
+	public ScheduledExecutorServiceWakeLock(Context appContext) {
+		this.appContext = appContext;
+	}
+
+	public void setRunnable(Runnable r){
+		runnable = r;
+	}
+
+	public synchronized void setAlarm(long delay, TimeUnit unit) {
+		if(runnable == null)
+			return;
+		if (scheduledExecutorService == null)
+			scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(THREAD_FACTORY);
+		scheduledExecutorService.schedule(runnable, delay, unit);
+	}
+
+	public synchronized void cancelAlarm() {
+		if (scheduledExecutorService == null) throw new IllegalStateException();
+		scheduledExecutorService.shutdownNow();
+		scheduledExecutorService = null;
+	}
+}