diff --git a/swarm/fuse/swarmfs_unix.go b/swarm/fuse/swarmfs_unix.go
index f4eecef245d169a7b351ab148ee27fc4c9e4fea8..1a8390a4b9eb099ae4218834aaa481be3c14a7f6 100644
--- a/swarm/fuse/swarmfs_unix.go
+++ b/swarm/fuse/swarmfs_unix.go
@@ -19,18 +19,19 @@
 package fuse
 
 import (
-	"bazil.org/fuse"
-	"bazil.org/fuse/fs"
 	"errors"
 	"fmt"
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/log"
-	"github.com/ethereum/go-ethereum/swarm/api"
 	"os"
 	"path/filepath"
 	"strings"
 	"sync"
 	"time"
+
+	"bazil.org/fuse"
+	"bazil.org/fuse/fs"
+	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/log"
+	"github.com/ethereum/go-ethereum/swarm/api"
 )
 
 var (
@@ -203,7 +204,7 @@ func (self *SwarmFS) Unmount(mountpoint string) (*MountInfo, error) {
 	}
 	err = fuse.Unmount(cleanedMountPoint)
 	if err != nil {
-		err1 := externalUnMount(cleanedMountPoint)
+		err1 := externalUnmount(cleanedMountPoint)
 		if err1 != nil {
 			errStr := fmt.Sprintf("UnMount error: %v", err)
 			log.Warn(errStr)
diff --git a/swarm/fuse/swarmfs_util.go b/swarm/fuse/swarmfs_util.go
index d20ab258ee4593e78605da57f6c831427003aeba..d39966c0e3ebdc562bbdc97fa178e317c22b0efa 100644
--- a/swarm/fuse/swarmfs_util.go
+++ b/swarm/fuse/swarmfs_util.go
@@ -19,47 +19,31 @@
 package fuse
 
 import (
+	"context"
 	"fmt"
-	"github.com/ethereum/go-ethereum/log"
 	"os/exec"
 	"runtime"
-	"time"
-)
 
-func externalUnMount(mountPoint string) error {
+	"github.com/ethereum/go-ethereum/log"
+)
 
-	var cmd *exec.Cmd
+func externalUnmount(mountPoint string) error {
+	ctx, cancel := context.WithTimeout(context.Background(), unmountTimeout)
+	defer cancel()
 
+	// Try generic umount.
+	if err := exec.CommandContext(ctx, "umount", mountPoint).Run(); err == nil {
+		return nil
+	}
+	// Try FUSE-specific commands if umount didn't work.
 	switch runtime.GOOS {
-
 	case "darwin":
-		cmd = exec.Command("/usr/bin/diskutil", "umount", "force", mountPoint)
-
+		return exec.CommandContext(ctx, "diskutil", "umount", "force", mountPoint).Run()
 	case "linux":
-		cmd = exec.Command("fusermount", "-u", mountPoint)
-
+		return exec.CommandContext(ctx, "fusermount", "-u", mountPoint).Run()
 	default:
 		return fmt.Errorf("unmount: unimplemented")
 	}
-
-	errc := make(chan error, 1)
-	go func() {
-		defer close(errc)
-
-		if err := exec.Command("umount", mountPoint).Run(); err == nil {
-			return
-		}
-		errc <- cmd.Run()
-	}()
-
-	select {
-
-	case <-time.After(unmountTimeout):
-		return fmt.Errorf("umount timeout")
-
-	case err := <-errc:
-		return err
-	}
 }
 
 func addFileToSwarm(sf *SwarmFile, content []byte, size int) error {