diff --git a/pkg/backend/api.go b/pkg/backend/api.go
index ea148f77de2ef3d89c9e5554ecd66802a3380d67..9706bdf9304678ad1cc4c269825c9350fc597a03 100644
--- a/pkg/backend/api.go
+++ b/pkg/backend/api.go
@@ -11,6 +11,7 @@ import (
 
 	"0xacab.org/leap/bitmask-vpn/pkg/bitmask"
 	"0xacab.org/leap/bitmask-vpn/pkg/config/version"
+	"0xacab.org/leap/bitmask-vpn/pkg/pid"
 	"0xacab.org/leap/bitmask-vpn/pkg/pickle"
 )
 
@@ -56,6 +57,7 @@ func Quit() {
 	if ctx.bm != nil {
 		ctx.bm.Close()
 	}
+	pid.ReleasePID()
 }
 
 func DonateAccepted() {
diff --git a/pkg/backend/init.go b/pkg/backend/init.go
index aabc720b9d8e02bc21f91f32e29641fe571b6957..c0d8f37b63e7ea3b1c1e5b9af15c0111f00064f0 100644
--- a/pkg/backend/init.go
+++ b/pkg/backend/init.go
@@ -7,6 +7,7 @@ import (
 	"0xacab.org/leap/bitmask-vpn/pkg/bitmask"
 	"0xacab.org/leap/bitmask-vpn/pkg/config"
 	"0xacab.org/leap/bitmask-vpn/pkg/config/version"
+	"0xacab.org/leap/bitmask-vpn/pkg/pid"
 )
 
 // initializeContext initializes an empty connStatus and assigns it to the
@@ -52,6 +53,13 @@ func initializeBitmask(errCh chan string, opts *InitOpts) {
 	bitmask.InitializeLogger()
 	ctx.cfg = config.ParseConfig()
 
+	err := pid.AcquirePID()
+	if err != nil {
+		log.Println("Error acquiring PID:", err)
+		errCh <- err.Error()
+		return
+	}
+
 	b, err := bitmask.InitializeBitmask(opts.SkipLaunch)
 	if err != nil {
 		log.Println("error: cannot initialize bitmask")
diff --git a/pkg/bitmask/init.go b/pkg/bitmask/init.go
index 7ac6f766b5a15fbd570995ae933040ac58dbaeca..401f8a7dff72a19a89fe9e372fb0fd56db94caa2 100644
--- a/pkg/bitmask/init.go
+++ b/pkg/bitmask/init.go
@@ -26,7 +26,6 @@ import (
 	"golang.org/x/text/message"
 
 	"0xacab.org/leap/bitmask-vpn/pkg/config"
-	"0xacab.org/leap/bitmask-vpn/pkg/pid"
 	"0xacab.org/leap/bitmask-vpn/pkg/vpn"
 )
 
@@ -107,13 +106,6 @@ func InitializeBitmask(skipLaunch bool) (Bitmask, error) {
 		os.MkdirAll(config.Path, os.ModePerm)
 	}
 
-	err := pid.AcquirePID()
-	if err != nil {
-		log.Println("Error acquiring PID:", err)
-		return nil, err
-	}
-	defer pid.ReleasePID()
-
 	conf := config.ParseConfig()
 	conf.Printer = initPrinter()
 
diff --git a/pkg/pid/pid.go b/pkg/pid/pid.go
index 1124210610a8a8f0bff5893f6d5eed1faaf5a1b5..b6e694773a0865ed75ac9829a63749ad30809535 100644
--- a/pkg/pid/pid.go
+++ b/pkg/pid/pid.go
@@ -35,7 +35,7 @@ func AcquirePID() error {
 	pid := syscall.Getpid()
 	current, err := getPID()
 	if err != nil {
-		return err
+		log.Print("Error reading pid file:", err)
 	}
 
 	if current != pid && pidRunning(current) {