diff --git a/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java b/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java
index 16b9789d744c7fad8359a50550c77f45a000b4f9..ca6700f51ed1f1d2afab616e647b508b8c7c38fc 100644
--- a/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java
+++ b/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java
@@ -360,6 +360,18 @@ class WifiDirectServiceImpl implements WifiDirectService, Service {
 	}
 
 	private void releaseDiscovery() {
+		if (connectionInProgress) {
+			cancelConnection();
+			removeGroup();
+		}
+		if (SDK_INT >= 27) requireNonNull(channel).close();
+		channel = null;
+		releaseLock();
+		discoveryStatus.postValue(STOPPED);
+		LOG.info("Released peer discovery");
+	}
+
+	private void cancelConnection() {
 		ActionListener listener = new ActionListener() {
 			@Override
 			public void onSuccess() {
@@ -374,11 +386,23 @@ class WifiDirectServiceImpl implements WifiDirectService, Service {
 			}
 		};
 		requireNonNull(wifiP2pManager).cancelConnect(requireNonNull(channel), listener);
-		if (SDK_INT >= 27) requireNonNull(channel).close();
-		channel = null;
-		releaseLock();
-		discoveryStatus.postValue(STOPPED);
-		LOG.info("Released peer discovery");
+	}
+
+	private void removeGroup() {
+		ActionListener listener = new ActionListener() {
+			@Override
+			public void onSuccess() {
+				LOG.info("Removed group");
+				connectionInProgress = false;
+			}
+
+			@Override
+			public void onFailure(int reason) {
+				LOG.info("Failed to remove group: " + reason);
+				connectionInProgress = false;
+			}
+		};
+		requireNonNull(wifiP2pManager).removeGroup(requireNonNull(channel), listener);
 	}
 
 	@Override