diff --git a/pkg/helper/windows.go b/pkg/helper/windows.go
index 70c6d6ab0f083b561f09e9b8a96adf86dc091960..0962fef9195ce546e26df23fb27789b41a29365c 100644
--- a/pkg/helper/windows.go
+++ b/pkg/helper/windows.go
@@ -114,6 +114,7 @@ func initializeService(preferredPort int) {
 
 func daemonize() {}
 
+// runServer does nothing, serveHTTP is called from within Execute in windows
 func runServer(port int) {}
 
 func getOpenvpnPath() string {
diff --git a/pkg/standalone/launcher.go b/pkg/standalone/launcher.go
index ed9ea5dc4f76298904c6176ed90dcde98470bfe6..621ba4c35883b46d2388e4e932b9bcb6aaa6078c 100644
--- a/pkg/standalone/launcher.go
+++ b/pkg/standalone/launcher.go
@@ -22,21 +22,64 @@ import (
 	"fmt"
 	"io"
 	"io/ioutil"
+	"log"
 	"net/http"
 	"strconv"
+	"strings"
+	"time"
 
+	"0xacab.org/leap/bitmask-vpn/pkg/config"
 	"0xacab.org/leap/bitmask-vpn/pkg/standalone/bonafide"
 )
 
-const (
-	helperAddr = "http://localhost:7171"
-)
-
 type launcher struct {
+	helperAddr string
+}
+
+const initialHelperPort = 7171
+
+func probeHelperPort(port int) int {
+	// this should be enough for a local reply
+	timeout := time.Duration(500 * time.Millisecond)
+	c := http.Client{Timeout: timeout}
+	for {
+		if smellsLikeOurHelperSpirit(port, &c) {
+			return port
+		}
+		port++
+		if port > 65535 {
+			break
+		}
+	}
+	return 0
+}
+
+func smellsLikeOurHelperSpirit(port int, c *http.Client) bool {
+	uri := "http://localhost:" + strconv.Itoa(port) + "/version"
+	log.Println("probing for helper at", uri)
+	resp, err := c.Get(uri)
+	if err != nil {
+		return false
+	}
+	if resp.StatusCode == 200 {
+		ver, err := ioutil.ReadAll(resp.Body)
+		defer resp.Body.Close()
+		if err != nil {
+			return false
+		}
+		if strings.Contains(string(ver), config.ApplicationName) {
+			return true
+		} else {
+			log.Println("Another helper replied to our version request:", string(ver))
+		}
+	}
+	return false
 }
 
 func newLauncher() (*launcher, error) {
-	return &launcher{}, nil
+	helperPort := probeHelperPort(initialHelperPort)
+	helperAddr := "http://localhost:" + strconv.Itoa(helperPort)
+	return &launcher{helperAddr}, nil
 }
 
 func (l *launcher) close() error {
@@ -77,7 +120,7 @@ func (l *launcher) firewallStop() error {
 
 func (l *launcher) firewallIsUp() bool {
 	var isup bool = false
-	res, err := http.Post(helperAddr+"/firewall/isup", "", nil)
+	res, err := http.Post(l.helperAddr+"/firewall/isup", "", nil)
 	if err != nil {
 		return false
 	}
@@ -106,7 +149,7 @@ func (l *launcher) send(path string, body []byte) error {
 	if body != nil {
 		reader = bytes.NewReader(body)
 	}
-	res, err := http.Post(helperAddr+path, "", reader)
+	res, err := http.Post(l.helperAddr+path, "", reader)
 	if err != nil {
 		return err
 	}