diff --git a/gradle/variables.gradle b/gradle/variables.gradle
index 89e95b3b2526d28a8b93c80efb250629e78027cf..e7e2535b81ed25698102b864f5b961d08c53a475 100644
--- a/gradle/variables.gradle
+++ b/gradle/variables.gradle
@@ -8,5 +8,5 @@ ext {
     junit_version = '5.7.2'
     mockk_version = '1.10.4'
     ktlint_plugin_version = '10.2.1'
-    onionwrapper_version = '0.0.2'
+    onionwrapper_version = '0.0.4'
 }
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 5eef64ae7a97325b7a2a71dbdf83139f2f8f0623..8068b7ed4b23e4dd13efad28da71c236b412f701 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -2841,41 +2841,50 @@
       </component>
       <component group="net.java" name="jvnet-parent" version="1">
          <artifact name="jvnet-parent-1.pom">
-            <sha256 value="281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf" origin="Generated by Gradle"/>
+            <sha256 value="281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
       <component group="net.java" name="jvnet-parent" version="3">
          <artifact name="jvnet-parent-3.pom">
-            <sha256 value="30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a" origin="Generated by Gradle"/>
+            <sha256 value="30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
-      <component group="net.java.dev.jna" name="jna" version="4.5.2">
-         <artifact name="jna-4.5.2.jar">
-            <sha256 value="0c8eb7acf67261656d79005191debaba3b6bf5dd60a43735a245429381dbecff" origin="Generated by Gradle"/>
+      <component group="net.java.dev.jna" name="jna" version="5.13.0">
+         <artifact name="jna-5.13.0.jar">
+            <sha256 value="66d4f819a062a51a1d5627bffc23fac55d1677f0e0a1feba144aabdd670a64bb"
+                origin="Generated by Gradle" />
          </artifact>
-         <artifact name="jna-4.5.2.pom">
-            <sha256 value="9df42b4ccef7045d6e4fb64b8376dd092dd74d9737cc6495c7698eeccbd3c44f" origin="Generated by Gradle"/>
+         <artifact name="jna-5.13.0.pom">
+            <sha256 value="f515c2578178f45247ecca7a9e1db109531b1c42f2424e253ceeb0f6b8d42374"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
       <component group="net.java.dev.jna" name="jna" version="5.6.0">
          <artifact name="jna-5.6.0.jar">
-            <sha256 value="5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf" origin="Generated by Gradle"/>
+            <sha256 value="5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf"
+                origin="Generated by Gradle" />
          </artifact>
          <artifact name="jna-5.6.0.pom">
-            <sha256 value="5fe81b0255978f24616d37b10608b79498a5f3073e1d9b2038d8736a831f2608" origin="Generated by Gradle"/>
+            <sha256 value="5fe81b0255978f24616d37b10608b79498a5f3073e1d9b2038d8736a831f2608"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
-      <component group="net.java.dev.jna" name="jna-platform" version="4.5.2">
-         <artifact name="jna-platform-4.5.2.jar">
-            <sha256 value="f1d00c167d8921c6e23c626ef9f1c3ae0be473c95c68ffa012bc7ae55a87e2d6" origin="Generated by Gradle"/>
+      <component group="net.java.dev.jna" name="jna-platform" version="5.13.0">
+         <artifact name="jna-platform-5.13.0.jar">
+            <sha256 value="474d7b88f6e97009b6ec1d98c3024dd95c23187c65dabfbc35331bcac3d173dd"
+                origin="Generated by Gradle" />
          </artifact>
-         <artifact name="jna-platform-4.5.2.pom">
-            <sha256 value="fa62e1efcbd19071be4b37ed1053dadc0ca60880b3980f58abd497f2a9f13d05" origin="Generated by Gradle"/>
+         <artifact name="jna-platform-5.13.0.pom">
+            <sha256 value="63b20c8af057c98196f8789e1a21a6dddf02aa8f385e6b04b4b4f9f0df257066"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
       <component group="net.java.dev.jna" name="jna-platform" version="5.6.0">
          <artifact name="jna-platform-5.6.0.jar">
-            <sha256 value="9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7" origin="Generated by Gradle"/>
+            <sha256 value="9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7"
+                origin="Generated by Gradle" />
          </artifact>
          <artifact name="jna-platform-5.6.0.pom">
             <sha256 value="1beb35cb4184e6c906a7e32eaebd852dd3da0a263962e99134ab945832394e28" origin="Generated by Gradle"/>
@@ -3127,39 +3136,48 @@
       </component>
       <component group="org.briarproject" name="obfs4proxy-linux" version="0.0.14-tor2">
          <artifact name="obfs4proxy-linux-0.0.14-tor2.jar">
-            <sha256 value="bb2431092b5ad998ad620b0223e725c0f7e43f1b02af2f097a2544edc1fd9738" origin="Generated by Gradle"/>
+            <sha256 value="bb2431092b5ad998ad620b0223e725c0f7e43f1b02af2f097a2544edc1fd9738"
+                origin="Generated by Gradle" />
          </artifact>
          <artifact name="obfs4proxy-linux-0.0.14-tor2.pom">
-            <sha256 value="9feb0d95ecef6e394b2a55ec4e451ec659f84a705345976053de166b157a0460" origin="Generated by Gradle"/>
+            <sha256 value="9feb0d95ecef6e394b2a55ec4e451ec659f84a705345976053de166b157a0460"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
-      <component group="org.briarproject" name="onionwrapper-android" version="0.0.2">
-         <artifact name="onionwrapper-android-0.0.2.aar">
-            <sha256 value="d196f1fe5d8b750866ea09d80509716aae7645d39b2c85433994718dbebeb4d1" origin="Generated by Gradle"/>
+      <component group="org.briarproject" name="onionwrapper-android" version="0.0.4">
+         <artifact name="onionwrapper-android-0.0.4.aar">
+            <sha256 value="d761854dac454616b3e0ca099b2cd17060365ce4316afe495cc7ae86b6c81d15"
+                origin="Generated by Gradle" />
          </artifact>
-         <artifact name="onionwrapper-android-0.0.2.module">
-            <sha256 value="53b951f528bcd09804c98be99933160beaea329f64c9d691a971ce61d67b4497" origin="Generated by Gradle"/>
+         <artifact name="onionwrapper-android-0.0.4.module">
+            <sha256 value="fd552ff3c8b76c1012ce25f9a2ccc428ee98634b5ce1d911cd3ca07abe487a1f"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
-      <component group="org.briarproject" name="onionwrapper-core" version="0.0.2">
-         <artifact name="onionwrapper-core-0.0.2.jar">
-            <sha256 value="7038e960c9e59803f0e2c19444dbb5214cd99e5a7463c0a01c45318e07a0eb80" origin="Generated by Gradle"/>
+      <component group="org.briarproject" name="onionwrapper-core" version="0.0.4">
+         <artifact name="onionwrapper-core-0.0.4.jar">
+            <sha256 value="28a01a62e96aa763989a8afc325abd3bee54f8021269f91aa48b247a6e717870"
+                origin="Generated by Gradle" />
          </artifact>
-         <artifact name="onionwrapper-core-0.0.2.module">
-            <sha256 value="71b6e4713dff5920a85585232ebe9909024885c9178b8ca5cf391bbcbe0f30b8" origin="Generated by Gradle"/>
+         <artifact name="onionwrapper-core-0.0.4.module">
+            <sha256 value="f1be40175fe2f5e2a492af54966f4b9d57865f4fc9ca6b74384efb1771e9863a"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
-      <component group="org.briarproject" name="onionwrapper-java" version="0.0.2">
-         <artifact name="onionwrapper-java-0.0.2.jar">
-            <sha256 value="87a3f4082174dbbd32c4f5f062b46af1d3fedd8cfa1ec84f6ce6ccb6e3674fb6" origin="Generated by Gradle"/>
+      <component group="org.briarproject" name="onionwrapper-java" version="0.0.4">
+         <artifact name="onionwrapper-java-0.0.4.jar">
+            <sha256 value="7806ef878074498653b557e26eb70e6007df3450d6a910a2e9a322f7eb4df442"
+                origin="Generated by Gradle" />
          </artifact>
-         <artifact name="onionwrapper-java-0.0.2.module">
-            <sha256 value="80baa417137ebe8069c846a63d6dff03b90eb9d075d3975a305e92a6773220f4" origin="Generated by Gradle"/>
+         <artifact name="onionwrapper-java-0.0.4.module">
+            <sha256 value="aee891efd5481afe0a8a4fac16a46405f02040939fc78c5613880c5424139b56"
+                origin="Generated by Gradle" />
          </artifact>
       </component>
       <component group="org.briarproject" name="snowflake-android" version="2.5.1">
          <artifact name="snowflake-android-2.5.1.jar">
-            <sha256 value="88ec81c17b1b6fa884d06839dec0330e328b45c89f88c970a213ce91ca8eac87" origin="Generated by Gradle"/>
+            <sha256 value="88ec81c17b1b6fa884d06839dec0330e328b45c89f88c970a213ce91ca8eac87"
+                origin="Generated by Gradle" />
          </artifact>
          <artifact name="snowflake-android-2.5.1.pom">
             <sha256 value="982c1b2e81d7f8e8e82013a3b5de3501cb24cece1411a5cd834965d5b40634b3" origin="Generated by Gradle"/>
diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java
index 23a6e53a7cbecc80bebd3a4d7bf6742b9868d043..3a39b7febbaf05e6b76051fe9ed9dfb83a59aa18 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java
@@ -27,6 +27,7 @@ import org.briarproject.mailbox.core.lifecycle.IoExecutor;
 import org.briarproject.mailbox.core.lifecycle.ServiceException;
 import org.briarproject.mailbox.core.settings.Settings;
 import org.briarproject.mailbox.core.settings.SettingsManager;
+import org.briarproject.nullsafety.InterfaceNotNullByDefault;
 import org.briarproject.onionwrapper.CircumventionProvider;
 import org.briarproject.onionwrapper.CircumventionProvider.BridgeType;
 import org.briarproject.onionwrapper.LocationUtils;
@@ -43,7 +44,6 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.IntSupplier;
 
-import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.GuardedBy;
 import javax.annotation.concurrent.ThreadSafe;
@@ -75,6 +75,7 @@ import static org.briarproject.onionwrapper.CircumventionProvider.BridgeType.SNO
 import static org.briarproject.onionwrapper.CircumventionProvider.BridgeType.VANILLA;
 import static org.slf4j.LoggerFactory.getLogger;
 
+@InterfaceNotNullByDefault
 public abstract class AbstractTorPlugin implements TorPlugin, EventListener {
 
 	private static final Logger LOG = getLogger(AbstractTorPlugin.class);
@@ -124,7 +125,7 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener {
 		tor.setObserver(new Observer() {
 
 			@Override
-			public void onState(@Nonnull TorState s) {
+			public void onState(TorState s) {
 				state.onStateChanged(s);
 			}
 
@@ -134,7 +135,7 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener {
 			}
 
 			@Override
-			public void onHsDescriptorUpload(@Nonnull String onion) {
+			public void onHsDescriptorUpload(String onion) {
 				state.onServiceDescriptorUploaded();
 			}
 
@@ -244,6 +245,9 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener {
 		} catch (IOException e) {
 			logException(LOG, e,
 					"Error while sending tor shutdown instructions");
+		} catch (InterruptedException e) {
+			LOG.warn("Interrupted while stopping Tor");
+			Thread.currentThread().interrupt();
 		}
 	}
 
@@ -424,7 +428,14 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener {
 		}
 
 		private synchronized TorPluginState getCurrentState(TorState torState) {
-			if (torState == TorState.STARTING_STOPPING) {
+			// Treat TorState.STARTED as TorPluginState.STARTING_STOPPING
+			// because it's only seen during startup, before
+			// TorWrapper#enableNetwork() is called for the first time
+			if (torState == TorState.NOT_STARTED ||
+					torState == TorState.STARTING ||
+					torState == TorState.STARTED ||
+					torState == TorState.STOPPING ||
+					torState == TorState.STOPPED) {
 				return TorPluginState.StartingStopping.INSTANCE;
 			} else if (torState == TorState.DISABLED) {
 				return TorPluginState.Inactive.INSTANCE;