diff --git a/plugins/bundleprocessor/bundleprocessor_test.go b/plugins/bundleprocessor/bundleprocessor_test.go
index b8cdd9dff394698e397c85f7a7ff09915a825d10..6505583f451516b7db36c7d5a0c20d90d56fa490 100644
--- a/plugins/bundleprocessor/bundleprocessor_test.go
+++ b/plugins/bundleprocessor/bundleprocessor_test.go
@@ -68,74 +68,66 @@ func TestValidateSignatures(t *testing.T) {
 	assert.Equal(t, successful, true, "validation failed")
 }
 
-func TestProcessSolidBundleHead_Data(t *testing.T) {
+func TestProcessSolidBundleHead(t *testing.T) {
 	// start a test node
 	node.Start(node.Plugins(tangle.PLUGIN, PLUGIN))
 	defer node.Shutdown()
 
-	bundleFactory := client.NewBundleFactory()
-	bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
-	bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
+	t.Run("data", func(t *testing.T) {
+		bundleFactory := client.NewBundleFactory()
+		bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
+		bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
 
-	generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
+		generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
+		for _, transaction := range generatedBundle.GetTransactions() {
+			tangle.StoreTransaction(transaction)
+		}
 
-	for _, transaction := range generatedBundle.GetTransactions() {
-		tangle.StoreTransaction(transaction)
-	}
+		var wg sync.WaitGroup
+		testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
+			assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
+			assert.Equal(t, bundle.IsValueBundle(), false, "invalid value bundle status")
 
-	var wg sync.WaitGroup
+			wg.Done()
+		})
+		Events.BundleSolid.Attach(testResults)
+		defer Events.BundleSolid.Detach(testResults)
 
-	testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
-		assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
-		assert.Equal(t, bundle.IsValueBundle(), false, "invalid value bundle status")
+		wg.Add(1)
+		if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
+			t.Error(err)
+		}
 
-		wg.Done()
+		wg.Wait()
 	})
-	Events.BundleSolid.Attach(testResults)
-	defer Events.BundleSolid.Detach(testResults)
-
-	wg.Add(1)
 
-	if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
-		t.Error(err)
-	}
-
-	wg.Wait()
-}
-
-func TestProcessSolidBundleHead_Value(t *testing.T) {
-	// start a test node
-	node.Start(node.Plugins(tangle.PLUGIN, PLUGIN))
-	defer node.Shutdown()
+	t.Run("value", func(t *testing.T) {
+		bundleFactory := client.NewBundleFactory()
+		bundleFactory.AddInput(seed.GetAddress(0), -400)
+		bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
+		bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
 
-	bundleFactory := client.NewBundleFactory()
-	bundleFactory.AddInput(seed.GetAddress(0), -400)
-	bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
-	bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
+		generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
+		for _, transaction := range generatedBundle.GetTransactions() {
+			tangle.StoreTransaction(transaction)
+		}
 
-	generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
+		var wg sync.WaitGroup
+		testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
+			assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
+			assert.Equal(t, bundle.IsValueBundle(), true, "invalid value bundle status")
 
-	for _, transaction := range generatedBundle.GetTransactions() {
-		tangle.StoreTransaction(transaction)
-	}
+			wg.Done()
+		})
 
-	var wg sync.WaitGroup
+		wg.Add(1)
+		Events.BundleSolid.Attach(testResults)
+		defer Events.BundleSolid.Detach(testResults)
 
-	testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
-		assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
-		assert.Equal(t, bundle.IsValueBundle(), true, "invalid value bundle status")
+		if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
+			t.Error(err)
+		}
 
-		wg.Done()
+		wg.Wait()
 	})
-
-	Events.BundleSolid.Attach(testResults)
-	defer Events.BundleSolid.Detach(testResults)
-
-	wg.Add(1)
-
-	if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
-		t.Error(err)
-	}
-
-	wg.Wait()
 }
diff --git a/plugins/bundleprocessor/plugin.go b/plugins/bundleprocessor/plugin.go
index 0f013307ae34e8de1e86d1006dfbd3adfce4badf..ad4ecb52eb13fcb1ea3b03a6947a2e0e9f3fc52d 100644
--- a/plugins/bundleprocessor/plugin.go
+++ b/plugins/bundleprocessor/plugin.go
@@ -13,8 +13,9 @@ import (
 var PLUGIN = node.NewPlugin("Bundle Processor", node.Enabled, configure, run)
 var log *logger.Logger
 
-func configure(plugin *node.Plugin) {
+func configure(*node.Plugin) {
 	log = logger.NewLogger("Bundle Processor")
+
 	tangle.Events.TransactionSolid.Attach(events.NewClosure(func(tx *value_transaction.ValueTransaction) {
 		if tx.IsHead() {
 			workerPool.Submit(tx)
@@ -26,7 +27,7 @@ func configure(plugin *node.Plugin) {
 	}))
 }
 
-func run(plugin *node.Plugin) {
+func run(*node.Plugin) {
 	log.Info("Starting Bundle Processor ...")
 
 	daemon.BackgroundWorker("Bundle Processor", func(shutdownSignal <-chan struct{}) {
@@ -34,7 +35,7 @@ func run(plugin *node.Plugin) {
 		workerPool.Start()
 		<-shutdownSignal
 		log.Info("Stopping Bundle Processor ...")
-		workerPool.Stop()
+		workerPool.StopAndWait()
 		log.Info("Stopping Bundle Processor ... done")
 	})
 
@@ -45,7 +46,7 @@ func run(plugin *node.Plugin) {
 		valueBundleProcessorWorkerPool.Start()
 		<-shutdownSignal
 		log.Info("Stopping Value Bundle Processor ...")
-		valueBundleProcessorWorkerPool.Stop()
+		valueBundleProcessorWorkerPool.StopAndWait()
 		log.Info("Stopping Value Bundle Processor ... done")
 	})
 }
diff --git a/plugins/tangle/approvers.go b/plugins/tangle/approvers.go
index fd4461aa1e3cac8e3619652f1731df050f206b68..38d44aa9081d62e6f47710cf31c8c2c10110d042 100644
--- a/plugins/tangle/approvers.go
+++ b/plugins/tangle/approvers.go
@@ -5,7 +5,6 @@ import (
 	"github.com/iotaledger/goshimmer/packages/datastructure"
 	"github.com/iotaledger/goshimmer/packages/errors"
 	"github.com/iotaledger/goshimmer/packages/model/approvers"
-	"github.com/iotaledger/hive.go/node"
 	"github.com/iotaledger/hive.go/typeutils"
 	"github.com/iotaledger/iota.go/trinary"
 )
@@ -75,7 +74,7 @@ const (
 
 var approversDatabase database.Database
 
-func configureApproversDatabase(plugin *node.Plugin) {
+func configureApproversDatabase() {
 	if db, err := database.Get("approvers"); err != nil {
 		panic(err)
 	} else {
diff --git a/plugins/tangle/bundle.go b/plugins/tangle/bundle.go
index bd55c6e67e0cfd8eb22cc3a02d75fc142b4ac93c..fa607ba127fd374028bff25259ef55c92c9d96a5 100644
--- a/plugins/tangle/bundle.go
+++ b/plugins/tangle/bundle.go
@@ -5,7 +5,6 @@ import (
 	"github.com/iotaledger/goshimmer/packages/datastructure"
 	"github.com/iotaledger/goshimmer/packages/errors"
 	"github.com/iotaledger/goshimmer/packages/model/bundle"
-	"github.com/iotaledger/hive.go/node"
 	"github.com/iotaledger/hive.go/typeutils"
 	"github.com/iotaledger/iota.go/trinary"
 )
@@ -79,7 +78,7 @@ const (
 
 var bundleDatabase database.Database
 
-func configureBundleDatabase(plugin *node.Plugin) {
+func configureBundleDatabase() {
 	if db, err := database.Get("bundle"); err != nil {
 		panic(err)
 	} else {
diff --git a/plugins/tangle/plugin.go b/plugins/tangle/plugin.go
index 020480129d218141b376e2815c91a6cc41e80bdf..6684986c5514af244f8907153b3f64dc45e3e772 100644
--- a/plugins/tangle/plugin.go
+++ b/plugins/tangle/plugin.go
@@ -10,17 +10,18 @@ import (
 var PLUGIN = node.NewPlugin("Tangle", node.Enabled, configure, run)
 var log *logger.Logger
 
-func configure(plugin *node.Plugin) {
+func configure(*node.Plugin) {
 	log = logger.NewLogger("Tangle")
-	configureTransactionDatabase(plugin)
-	configureTransactionMetaDataDatabase(plugin)
-	configureApproversDatabase(plugin)
-	configureBundleDatabase(plugin)
-	configureSolidifier(plugin)
+
+	configureTransactionDatabase()
+	configureTransactionMetaDataDatabase()
+	configureApproversDatabase()
+	configureBundleDatabase()
+	configureSolidifier()
 }
 
-func run(plugin *node.Plugin) {
-	runSolidifier(plugin)
+func run(*node.Plugin) {
+	runSolidifier()
 }
 
 // endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go
index 696bd3d03b7b6ed6c31da36c13f776e1c2427fad..e30ae82e9a95e89b9fbcb164212fd7e27e5bdefa 100644
--- a/plugins/tangle/solidifier.go
+++ b/plugins/tangle/solidifier.go
@@ -13,7 +13,6 @@ import (
 	"github.com/iotaledger/goshimmer/packages/workerpool"
 	"github.com/iotaledger/hive.go/daemon"
 	"github.com/iotaledger/hive.go/events"
-	"github.com/iotaledger/hive.go/node"
 	"github.com/iotaledger/iota.go/trinary"
 )
 
@@ -26,9 +25,9 @@ var (
 	unsolidTxs *UnsolidTxs
 )
 
-func configureSolidifier(plugin *node.Plugin) {
+func configureSolidifier() {
 	workerPool = workerpool.New(func(task workerpool.Task) {
-		processMetaTransaction(plugin, task.Param(0).(*meta_transaction.MetaTransaction))
+		processMetaTransaction(task.Param(0).(*meta_transaction.MetaTransaction))
 
 		task.Return(nil)
 	}, workerpool.WorkerCount(WORKER_COUNT), workerpool.QueueSize(10000))
@@ -46,7 +45,7 @@ func configureSolidifier(plugin *node.Plugin) {
 	}))
 }
 
-func runSolidifier(plugin *node.Plugin) {
+func runSolidifier() {
 	log.Info("Starting Solidifier ...")
 
 	daemon.BackgroundWorker("Tangle Solidifier", func(shutdownSignal <-chan struct{}) {
@@ -54,7 +53,7 @@ func runSolidifier(plugin *node.Plugin) {
 		workerPool.Start()
 		<-shutdownSignal
 		log.Info("Stopping Solidifier ...")
-		workerPool.Stop()
+		workerPool.StopAndWait()
 		log.Info("Stopping Solidifier ... done")
 	})
 }
@@ -169,7 +168,7 @@ func propagateSolidity(transactionHash trinary.Trytes) errors.IdentifiableError
 	return nil
 }
 
-func processMetaTransaction(plugin *node.Plugin, metaTransaction *meta_transaction.MetaTransaction) {
+func processMetaTransaction(metaTransaction *meta_transaction.MetaTransaction) {
 	var newTransaction bool
 	if tx, err := GetTransaction(metaTransaction.GetHash(), func(transactionHash trinary.Trytes) *value_transaction.ValueTransaction {
 		newTransaction = true
@@ -179,11 +178,11 @@ func processMetaTransaction(plugin *node.Plugin, metaTransaction *meta_transacti
 		log.Errorf("Unable to load transaction %s: %s", metaTransaction.GetHash(), err.Error())
 	} else if newTransaction {
 		updateUnsolidTxs(tx)
-		processTransaction(plugin, tx)
+		processTransaction(tx)
 	}
 }
 
-func processTransaction(plugin *node.Plugin, transaction *value_transaction.ValueTransaction) {
+func processTransaction(transaction *value_transaction.ValueTransaction) {
 	Events.TransactionStored.Trigger(transaction)
 
 	transactionHash := transaction.GetHash()
diff --git a/plugins/tangle/transaction.go b/plugins/tangle/transaction.go
index aeb4c915affcddfbbae05a7c6594edccb96db7bf..31edfc4f8c478aa4dd927e226c719ad3dfc53699 100644
--- a/plugins/tangle/transaction.go
+++ b/plugins/tangle/transaction.go
@@ -5,7 +5,6 @@ import (
 	"github.com/iotaledger/goshimmer/packages/datastructure"
 	"github.com/iotaledger/goshimmer/packages/errors"
 	"github.com/iotaledger/goshimmer/packages/model/value_transaction"
-	"github.com/iotaledger/hive.go/node"
 	"github.com/iotaledger/hive.go/typeutils"
 	"github.com/iotaledger/iota.go/trinary"
 )
@@ -76,7 +75,7 @@ const (
 
 var transactionDatabase database.Database
 
-func configureTransactionDatabase(plugin *node.Plugin) {
+func configureTransactionDatabase() {
 	if db, err := database.Get("transaction"); err != nil {
 		panic(err)
 	} else {
diff --git a/plugins/tangle/transaction_metadata.go b/plugins/tangle/transaction_metadata.go
index e1032ed635b284814109bd0f1a4bcf86f3208635..6713ecc8b006496044a3c85e85d2e4a6a5124729 100644
--- a/plugins/tangle/transaction_metadata.go
+++ b/plugins/tangle/transaction_metadata.go
@@ -5,7 +5,6 @@ import (
 	"github.com/iotaledger/goshimmer/packages/datastructure"
 	"github.com/iotaledger/goshimmer/packages/errors"
 	"github.com/iotaledger/goshimmer/packages/model/transactionmetadata"
-	"github.com/iotaledger/hive.go/node"
 	"github.com/iotaledger/hive.go/typeutils"
 	"github.com/iotaledger/iota.go/trinary"
 )
@@ -76,7 +75,7 @@ const (
 
 var transactionMetadataDatabase database.Database
 
-func configureTransactionMetaDataDatabase(plugin *node.Plugin) {
+func configureTransactionMetaDataDatabase() {
 	if db, err := database.Get("transactionMetadata"); err != nil {
 		panic(err)
 	} else {