diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoModule.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoModule.java
index bcad98cda799701c0a742d8a38b270fcb0da3966..8f0299441ced948ad754374d1ed5c0d0280f0fd2 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/CryptoModule.java
@@ -39,7 +39,7 @@ public class CryptoModule {
 	 * The maximum number of executor threads.
 	 */
 	private static final int MAX_EXECUTOR_THREADS =
-			Runtime.getRuntime().availableProcessors();
+			Math.max(1, Runtime.getRuntime().availableProcessors() - 1);
 
 	private final ExecutorService cryptoExecutor;
 
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
index d4cc88881ff814cb898d247ea49315c2fa5ffbd1..eea0e2d3bb2299ae57b3f12c8df659e5dbdad3a0 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
@@ -36,7 +36,7 @@ public class SyncModule {
 	 * executor concurrently.
 	 */
 	private static final int MAX_CONCURRENT_VALIDATION_TASKS =
-			Runtime.getRuntime().availableProcessors();
+			Math.max(1, Runtime.getRuntime().availableProcessors() - 1);
 
 	@Provides
 	GroupFactory provideGroupFactory(CryptoComponent crypto) {