diff --git a/standalone/launcher_windows.go b/standalone/launcher.go
similarity index 56%
rename from standalone/launcher_windows.go
rename to standalone/launcher.go
index c8e79b91f400af42d347f5749371ee419961b539..03178c513fbc61f663852b9254107e0af59f604d 100644
--- a/standalone/launcher_windows.go
+++ b/standalone/launcher.go
@@ -1,4 +1,4 @@
-// +build windows
+// +build !linux
 // Copyright (C) 2018 LEAP
 //
 // This program is free software: you can redistribute it and/or modify
@@ -17,57 +17,71 @@
 package bitmask
 
 import (
+	"bytes"
 	"encoding/json"
-	"net/textproto"
-	"strings"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"net/http"
 )
 
 const (
-	helperAddr = "localhost:7171"
+	helperAddr = "http://localhost:7171"
 )
 
 type launcher struct {
-	conn *textproto.Conn
 }
 
 func newLauncher() (*launcher, error) {
-	conn, err := textproto.Dial("tcp", helperAddr)
-	return &launcher{conn}, err
+	return &launcher{}, nil
 }
 
 func (l *launcher) close() error {
-	return l.conn.Close()
+	return nil
 }
 
 func (l *launcher) openvpnStart(flags ...string) error {
-	return l.send("openvpn_start", flags...)
+	byteFlags, err := json.Marshal(flags)
+	if err != nil {
+		return err
+	}
+	return l.send("/openvpn/start", byteFlags)
 }
 
 func (l *launcher) openvpnStop() error {
-	return l.send("openvpn_stop")
+	return l.send("/openvpn/stop", nil)
 }
 
 func (l *launcher) firewallStart(gateways []gateway) error {
-	return nil
+	ipList := make([]string, len(gateways))
+	for i, gw := range gateways {
+		ipList[i] = gw.IPAddress
+	}
+	byteIPs, err := json.Marshal(ipList)
+	if err != nil {
+		return err
+	}
+	return l.send("/firewall/start", byteIPs)
 }
 
 func (l *launcher) firewallStop() error {
-	return nil
+	return l.send("/firewall/stop", nil)
 }
 
-func (l *launcher) send(cmd string, args ...string) error {
-	if args == nil {
-		args = []string{"null"}
+func (l *launcher) send(path string, body []byte) error {
+	var reader io.Reader
+	if body != nil {
+		reader = bytes.NewReader(body)
 	}
-	command := struct {
-		Cmd  string `json:"cmd"`
-		Args string `json:"args"`
-	}{cmd, strings.Join(args, " ")}
-	bytesCmd, err := json.Marshal(command)
+	res, err := http.Post(helperAddr+path, "", reader)
 	if err != nil {
 		return err
 	}
+	defer res.Body.Close()
 
-	_, err = l.conn.Cmd(string(bytesCmd))
+	resErr, err := ioutil.ReadAll(res.Body)
+	if len(resErr) > 0 {
+		return fmt.Errorf("Helper returned an error: %q", resErr)
+	}
 	return err
 }