diff --git a/packages/binary/tangle/tangle.go b/packages/binary/tangle/tangle.go
index 9033cfdd65e7360ee3c364f2ed3e47705f6a7c47..185937043da051b0a1c8f1ea33db0a72726f48f8 100644
--- a/packages/binary/tangle/tangle.go
+++ b/packages/binary/tangle/tangle.go
@@ -4,6 +4,7 @@ import (
 	"container/list"
 	"time"
 
+	"github.com/dgraph-io/badger/v2"
 	"github.com/iotaledger/hive.go/types"
 
 	"github.com/iotaledger/goshimmer/packages/binary/storageprefix"
@@ -37,13 +38,13 @@ type Tangle struct {
 }
 
 // Constructor for the tangle.
-func New(storageId []byte) (result *Tangle) {
+func New(badgerInstance *badger.DB, storageId []byte) (result *Tangle) {
 	result = &Tangle{
 		storageId:                  storageId,
-		transactionStorage:         objectstorage.New(append(storageId, storageprefix.TangleTransaction...), transaction.FromStorage),
-		transactionMetadataStorage: objectstorage.New(append(storageId, storageprefix.TangleTransactionMetadata...), transactionmetadata.FromStorage),
-		approverStorage:            objectstorage.New(append(storageId, storageprefix.TangleApprovers...), approver.FromStorage, objectstorage.PartitionKey(transaction.IdLength, transaction.IdLength)),
-		missingTransactionsStorage: objectstorage.New(append(storageId, storageprefix.TangleMissingTransaction...), missingtransaction.FromStorage),
+		transactionStorage:         objectstorage.New(badgerInstance, append(storageId, storageprefix.TangleTransaction...), transaction.FromStorage, objectstorage.CacheTime(10*time.Second), objectstorage.LeakDetectionEnabled(false)),
+		transactionMetadataStorage: objectstorage.New(badgerInstance, append(storageId, storageprefix.TangleTransactionMetadata...), transactionmetadata.FromStorage, objectstorage.CacheTime(10*time.Second), objectstorage.LeakDetectionEnabled(false)),
+		approverStorage:            objectstorage.New(badgerInstance, append(storageId, storageprefix.TangleApprovers...), approver.FromStorage, objectstorage.CacheTime(10*time.Second), objectstorage.PartitionKey(transaction.IdLength, transaction.IdLength), objectstorage.LeakDetectionEnabled(false)),
+		missingTransactionsStorage: objectstorage.New(badgerInstance, append(storageId, storageprefix.TangleMissingTransaction...), missingtransaction.FromStorage, objectstorage.CacheTime(10*time.Second), objectstorage.LeakDetectionEnabled(false)),
 
 		Events: *newEvents(),
 	}
diff --git a/packages/binary/tangle/tangle_test.go b/packages/binary/tangle/tangle_test.go
index 33420e87dacbb7611078bcff3875665401de8e12..c8ff887c1f0659f340749dd564f3d7f001811be2 100644
--- a/packages/binary/tangle/tangle_test.go
+++ b/packages/binary/tangle/tangle_test.go
@@ -5,16 +5,28 @@ import (
 	"testing"
 	"time"
 
+	"github.com/dgraph-io/badger/v2"
 	"github.com/iotaledger/hive.go/events"
 
+	"github.com/iotaledger/hive.go/database"
+
 	"github.com/iotaledger/goshimmer/packages/binary/identity"
 	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
 	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/data"
 	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata"
+	"github.com/iotaledger/goshimmer/plugins/config"
 )
 
+var testDatabase *badger.DB
+
+var _ = config.PLUGIN
+
+func init() {
+	testDatabase = database.GetBadgerInstance()
+}
+
 func BenchmarkTangle_AttachTransaction(b *testing.B) {
-	tangle := New([]byte("TEST_BINARY_TANGLE"))
+	tangle := New(testDatabase, []byte("TEST_BINARY_TANGLE"))
 	if err := tangle.Prune(); err != nil {
 		b.Error(err)
 
@@ -39,7 +51,7 @@ func BenchmarkTangle_AttachTransaction(b *testing.B) {
 }
 
 func TestTangle_AttachTransaction(t *testing.T) {
-	tangle := New([]byte("TEST_BINARY_TANGLE"))
+	tangle := New(testDatabase, []byte("TEST_BINARY_TANGLE"))
 	if err := tangle.Prune(); err != nil {
 		t.Error(err)
 
diff --git a/plugins/config/config.go b/plugins/config/config.go
new file mode 100644
index 0000000000000000000000000000000000000000..70513880fa272a3878d840c6cb7211fa26eb8df6
--- /dev/null
+++ b/plugins/config/config.go
@@ -0,0 +1,64 @@
+package config
+
+import (
+	"github.com/iotaledger/hive.go/logger"
+	"github.com/iotaledger/hive.go/node"
+	"github.com/iotaledger/hive.go/parameter"
+	flag "github.com/spf13/pflag"
+	"github.com/spf13/viper"
+)
+
+var (
+	// flags
+	configName    = flag.StringP("config", "c", "config", "Filename of the config file without the file extension")
+	configDirPath = flag.StringP("config-dir", "d", ".", "Path to the directory containing the config file")
+
+	// viper
+	NodeConfig *viper.Viper
+
+	// logger
+	defaultLoggerConfig = logger.Config{
+		Level:             "info",
+		DisableCaller:     false,
+		DisableStacktrace: false,
+		Encoding:          "console",
+		OutputPaths:       []string{"goshimmer.log"},
+		DisableEvents:     false,
+	}
+)
+
+func init() {
+	// set the default logger config
+	NodeConfig = viper.New()
+	NodeConfig.SetDefault(logger.ViperKey, defaultLoggerConfig)
+
+	if err := Fetch(false); err != nil {
+		panic(err)
+	}
+	parseParameters()
+}
+
+func parseParameters() {
+	for _, pluginName := range NodeConfig.GetStringSlice(node.CFG_DISABLE_PLUGINS) {
+		node.DisabledPlugins[node.GetPluginIdentifier(pluginName)] = true
+	}
+	for _, pluginName := range NodeConfig.GetStringSlice(node.CFG_ENABLE_PLUGINS) {
+		node.EnabledPlugins[node.GetPluginIdentifier(pluginName)] = true
+	}
+}
+
+// Fetch fetches config values from a dir defined via CLI flag --config-dir (or the current working dir if not set).
+//
+// It automatically reads in a single config file starting with "config" (can be changed via the --config CLI flag)
+// and ending with: .json, .toml, .yaml or .yml (in this sequence).
+func Fetch(printConfig bool, ignoreSettingsAtPrint ...[]string) error {
+	err := parameter.LoadConfigFile(NodeConfig, *configDirPath, *configName, true, true)
+	if err != nil {
+		return err
+	}
+
+	if printConfig {
+		parameter.PrintConfig(NodeConfig, ignoreSettingsAtPrint...)
+	}
+	return nil
+}
diff --git a/plugins/config/plugin.go b/plugins/config/plugin.go
new file mode 100644
index 0000000000000000000000000000000000000000..0626fa17396b321ac567b28a3fb536bac9b39d42
--- /dev/null
+++ b/plugins/config/plugin.go
@@ -0,0 +1,12 @@
+package config
+
+import (
+	"github.com/iotaledger/hive.go/node"
+)
+
+// define the plugin as a placeholder, so the init methods get executed accordingly
+var PLUGIN = node.NewPlugin("Config", node.Enabled, run)
+
+func run(ctx *node.Plugin) {
+	// do nothing; everything is handled in the init method
+}