diff --git a/cmd/ipfs/init.go b/cmd/ipfs/init.go
index b868f2b91dcc9b5c4d4a47265f5471fd081f6b98..d70b6f3f9f98d16694c120dfbdf6a4d8da891d46 100644
--- a/cmd/ipfs/init.go
+++ b/cmd/ipfs/init.go
@@ -92,6 +92,12 @@ func initCmd(c *commander.Command, inp []string) error {
 		API:   "/ip4/127.0.0.1/tcp/5001",
 	}
 
+	// setup the node mount points.
+	cfg.Mounts = config.Mounts{
+		IPFS: "/ipfs",
+		IPNS: "/ipns",
+	}
+
 	nbits, ok := c.Flag.Lookup("b").Value.Get().(int)
 	if !ok {
 		return errors.New("failed to get bits flag")
diff --git a/cmd/ipfs/mount_unix.go b/cmd/ipfs/mount_unix.go
index 03515ad5fb7ec034e67937160c36fe77326c483d..1b4e8709a4291e848fa863a34d8c831772024cef 100644
--- a/cmd/ipfs/mount_unix.go
+++ b/cmd/ipfs/mount_unix.go
@@ -3,14 +3,12 @@
 package main
 
 import (
-	"errors"
 	"fmt"
 
 	"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag"
 	"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
-	ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
 
-	"github.com/jbenet/go-ipfs/daemon"
+	core "github.com/jbenet/go-ipfs/core"
 	ipns "github.com/jbenet/go-ipfs/fuse/ipns"
 	rofs "github.com/jbenet/go-ipfs/fuse/readonly"
 )
@@ -30,59 +28,64 @@ var cmdIpfsMount = &commander.Command{
 }
 
 func init() {
+	cmdIpfsMount.Flag.String("f", "", "specify a mountpoint for ipfs")
 	cmdIpfsMount.Flag.String("n", "", "specify a mountpoint for ipns")
-	cmdIpfsMount.Flag.String("f", "/ipfs", "specify a mountpoint for ipfs")
 }
 
 func mountCmd(c *commander.Command, inp []string) error {
-	conf, err := getConfigDir(c.Parent)
-	if err != nil {
-		fmt.Println("Couldnt get config dir")
-		return err
-	}
-	n, err := localNode(conf, true)
+
+	cc, err := setupCmdContext(c, true)
 	if err != nil {
-		fmt.Println("Local node creation failed.")
 		return err
 	}
+	defer cc.daemon.Close()
 
-	// launch the API RPC endpoint.
-	if n.Config.Addresses.API == "" {
-		return errors.New("no config.RPCAddress endpoint supplied")
+	// update fsdir with flag.
+	fsdir := cc.node.Config.Mounts.IPFS
+	if val, ok := c.Flag.Lookup("f").Value.Get().(string); ok && val != "" {
+		fsdir = val
 	}
+	fsdone := mountIpfs(cc.node, fsdir)
 
-	maddr, err := ma.NewMultiaddr(n.Config.Addresses.API)
-	if err != nil {
-		return err
+	// get default mount points
+	nsdir := cc.node.Config.Mounts.IPNS
+	if val, ok := c.Flag.Lookup("n").Value.Get().(string); ok && val != "" {
+		nsdir = val
 	}
+	nsdone := mountIpns(cc.node, nsdir, fsdir)
 
-	dl, err := daemon.NewDaemonListener(n, maddr, conf)
-	if err != nil {
-		fmt.Println("Failed to create daemon listener.")
-		return err
-	}
-	go dl.Listen()
-	defer dl.Close()
-
-	mp := c.Flag.Lookup("f").Value.Get().(string)
-	fmt.Printf("Mounting at %s\n", mp)
-
-	var ipnsDone chan struct{}
-	ns, ok := c.Flag.Lookup("n").Value.Get().(string)
-	if ok && ns != "" {
-		ipnsDone = make(chan struct{})
-		go func() {
-			err = ipns.Mount(n, ns, mp)
-			if err != nil {
-				fmt.Printf("Error mounting ipns: %s\n", err)
-			}
-			ipnsDone <- struct{}{}
-		}()
-	}
+	// wait till mounts are done.
+	err1 := <-fsdone
+	err2 := <-nsdone
 
-	err = rofs.Mount(n, mp)
-	if ipnsDone != nil {
-		<-ipnsDone
+	if err1 != nil {
+		return err1
 	}
-	return err
+	return err2
+}
+
+func mountIpfs(node *core.IpfsNode, fsdir string) <-chan error {
+	done := make(chan error)
+	fmt.Printf("mounting ipfs at %s\n", fsdir)
+
+	go func() {
+		err := rofs.Mount(node, fsdir)
+		done <- err
+		close(done)
+	}()
+
+	return done
+}
+
+func mountIpns(node *core.IpfsNode, nsdir, fsdir string) <-chan error {
+	done := make(chan error)
+	fmt.Printf("mounting ipns at %s\n", nsdir)
+
+	go func() {
+		err := ipns.Mount(node, nsdir, fsdir)
+		done <- err
+		close(done)
+	}()
+
+	return done
 }
diff --git a/config/config.go b/config/config.go
index 5c8f202a7b98bbba2f130fc1b8bd09e0671c1acd..5a25118bdd307f2991c2c52e6fa40fff142b8eab 100644
--- a/config/config.go
+++ b/config/config.go
@@ -29,6 +29,12 @@ type Addresses struct {
 	API   string // address for the local API (RPC)
 }
 
+// Mounts stores the (string) mount points
+type Mounts struct {
+	IPFS string
+	IPNS string
+}
+
 // BootstrapPeer is a peer used to bootstrap the network.
 type BootstrapPeer struct {
 	Address string
@@ -40,6 +46,7 @@ type Config struct {
 	Identity  Identity         // local node's peer identity
 	Datastore Datastore        // local node's storage
 	Addresses Addresses        // local node's addresses
+	Mounts    Mounts           // local node's mount points
 	Bootstrap []*BootstrapPeer // local nodes's bootstrap peers
 }