diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go
index 102dadfc11d29c6dfd603784ce58ab131e65dba5..d39ef3c48ec6e5fcba295f26b8c3130ebafccc64 100644
--- a/cmd/ipfs/daemon.go
+++ b/cmd/ipfs/daemon.go
@@ -9,6 +9,7 @@ import (
 
 	cmds "github.com/jbenet/go-ipfs/commands"
 	cmdsHttp "github.com/jbenet/go-ipfs/commands/http"
+	"github.com/jbenet/go-ipfs/core"
 	"github.com/jbenet/go-ipfs/daemon"
 )
 
@@ -20,10 +21,15 @@ var Daemon = &cmds.Command{
 }
 
 func daemonFunc(req cmds.Request, res cmds.Response) {
-	// TODO: spin up a core.IpfsNode
-
 	ctx := req.Context()
 
+	node, err := core.NewIpfsNode(ctx.Config, true)
+	if err != nil {
+		res.SetError(err, cmds.ErrNormal)
+		return
+	}
+	ctx.Node = node
+
 	lk, err := daemon.Lock(ctx.ConfigRoot)
 	if err != nil {
 		res.SetError(fmt.Errorf("Couldn't obtain lock. Is another daemon already running?"), cmds.ErrNormal)
diff --git a/cmd/ipfs/ipfs.go b/cmd/ipfs/ipfs.go
index e847e623f891bf38574dd67284666acf2a449632..6fae87cdb130e279dbfe1b562fbaf71a1926b7c5 100644
--- a/cmd/ipfs/ipfs.go
+++ b/cmd/ipfs/ipfs.go
@@ -10,6 +10,7 @@ import (
 	cmdsCli "github.com/jbenet/go-ipfs/commands/cli"
 	cmdsHttp "github.com/jbenet/go-ipfs/commands/http"
 	"github.com/jbenet/go-ipfs/config"
+	"github.com/jbenet/go-ipfs/core"
 	"github.com/jbenet/go-ipfs/core/commands"
 	"github.com/jbenet/go-ipfs/daemon"
 	u "github.com/jbenet/go-ipfs/util"
@@ -110,7 +111,13 @@ func main() {
 			}
 
 		} else {
-			// TODO: spin up node
+			node, err := core.NewIpfsNode(conf, false)
+			if err != nil {
+				fmt.Println(err)
+				os.Exit(1)
+			}
+			ctx.Node = node
+
 			res = root.Call(req)
 		}
 	}