diff --git a/core/internal/node/BUILD.bazel b/core/internal/node/BUILD.bazel
index 763df36..39b1aca 100644
--- a/core/internal/node/BUILD.bazel
+++ b/core/internal/node/BUILD.bazel
@@ -14,7 +14,6 @@
         "//core/internal/common:go_default_library",
         "//core/internal/consensus:go_default_library",
         "//core/internal/storage:go_default_library",
-        "@com_github_casbin_casbin//:go_default_library",
         "@com_github_google_uuid//:go_default_library",
         "@org_uber_go_zap//:go_default_library",
     ],
diff --git a/core/internal/node/main.go b/core/internal/node/main.go
index 7494f7a..76a5cf2 100644
--- a/core/internal/node/main.go
+++ b/core/internal/node/main.go
@@ -22,8 +22,8 @@
 	"git.monogon.dev/source/nexantic.git/core/internal/common"
 	"git.monogon.dev/source/nexantic.git/core/internal/consensus"
 	"git.monogon.dev/source/nexantic.git/core/internal/storage"
+	"os"
 
-	"github.com/casbin/casbin"
 	"github.com/google/uuid"
 	"go.uber.org/zap"
 )
@@ -35,9 +35,9 @@
 		Storage   *storage.Manager
 
 		logger       *zap.Logger
-		ruleEnforcer *casbin.Enforcer
 		state        common.SmalltownState
 		joinToken    string
+		hostname     string
 	}
 )
 
@@ -45,6 +45,11 @@
 	flag.Parse()
 	logger.Info("Creating Smalltown node")
 
+	hostname, err := os.Hostname()
+	if err != nil {
+		panic(err)
+	}
+
 	storageManager, err := storage.Initialize(logger.With(zap.String("component", "storage")))
 	if err != nil {
 		logger.Error("Failed to initialize storage manager", zap.Error(err))
@@ -52,10 +57,9 @@
 	}
 
 	consensusService, err := consensus.NewConsensusService(consensus.Config{
-		Name:         "test",
-		ExternalHost: "0.0.0.0",
-		ListenPort:   consensusPort,
-		ListenHost:   "0.0.0.0",
+		Name:       hostname,
+		ListenPort: consensusPort,
+		ListenHost: "0.0.0.0",
 	}, logger.With(zap.String("module", "consensus")))
 	if err != nil {
 		return nil, err
@@ -63,8 +67,9 @@
 
 	s := &SmalltownNode{
 		Consensus: consensusService,
-		logger:    logger,
 		Storage:   storageManager,
+		logger:    logger,
+		hostname:  hostname,
 	}
 
 	apiService, err := api.NewApiServer(&api.Config{
@@ -91,7 +96,7 @@
 			return err
 		}
 	} else {
-		s.logger.Info("Consensus is not provisioned")
+		s.logger.Info("Consensus is not provisioned, starting provisioning...")
 		err := s.startForSetup()
 		if err != nil {
 			return err
diff --git a/core/internal/node/setup.go b/core/internal/node/setup.go
index 5d8953d..efc72d3 100644
--- a/core/internal/node/setup.go
+++ b/core/internal/node/setup.go
@@ -19,6 +19,7 @@
 import (
 	"git.monogon.dev/source/nexantic.git/core/generated/api"
 	"git.monogon.dev/source/nexantic.git/core/internal/common"
+	"git.monogon.dev/source/nexantic.git/core/internal/storage"
 
 	"errors"
 
@@ -41,19 +42,18 @@
 	return s.joinToken
 }
 
-func (s *SmalltownNode) SetupNewCluster(name string, externalHost string) error {
+func (s *SmalltownNode) SetupNewCluster() error {
 	if s.state == common.StateConfigured {
 		return ErrAlreadySetup
 	}
-	dataPath, err := s.Storage.GetPathInPlace(common.PlaceData, "etcd")
-	if err == common.ErrNotInitialized {
+	dataPath, err := s.Storage.GetPathInPlace(storage.PlaceData, "etcd")
+	if err == storage.ErrNotInitialized {
 		return ErrStorageNotInitialized
 	} else if err != nil {
 		return err
 	}
 
-	s.logger.Info("Setting up a new cluster", zap.String("name", name), zap.String("external_host", externalHost))
-
+	s.logger.Info("Setting up a new cluster")
 	s.logger.Info("Provisioning consensus")
 
 	// Make sure etcd is not yet provisioned
@@ -64,11 +64,11 @@
 	// Spin up etcd
 	config := s.Consensus.GetConfig()
 	config.NewCluster = true
-	config.Name = name
-	config.ExternalHost = externalHost
+	config.Name = s.hostname
 	config.DataDir = dataPath
 	s.Consensus.SetConfig(config)
 
+	// Generate the cluster CA and store it to local storage.
 	if err := s.Consensus.PrecreateCA(); err != nil {
 		return err
 	}
@@ -78,6 +78,7 @@
 		return err
 	}
 
+	// Now that the cluster is up and running, we can persist the CA to the cluster.
 	if err := s.Consensus.InjectCA(); err != nil {
 		return err
 	}
@@ -101,12 +102,12 @@
 	return nil
 }
 
-func (s *SmalltownNode) JoinCluster(name string, clusterString string, externalHost string, certs *api.ConsensusCertificates) error {
+func (s *SmalltownNode) JoinCluster(clusterString string, certs *api.ConsensusCertificates) error {
 	if s.state != common.StateClusterJoinMode {
 		return ErrNotInJoinMode
 	}
 
-	s.logger.Info("Joining cluster", zap.String("cluster", clusterString), zap.String("name", name))
+	s.logger.Info("Joining cluster", zap.String("cluster", clusterString))
 
 	err := s.SetupBackend()
 	if err != nil {
@@ -114,11 +115,10 @@
 	}
 
 	config := s.Consensus.GetConfig()
-	config.Name = name
+	config.Name = s.hostname
 	config.InitialCluster = clusterString
-	config.ExternalHost = externalHost
 	s.Consensus.SetConfig(config)
-	if err := s.Consensus.SetupCertificates(certs); err != nil {
+	if err := s.Consensus.WriteCertificateFiles(certs); err != nil {
 		return err
 	}
 
