diff --git a/plugins/tangle/misc.go b/plugins/tangle/misc.go
new file mode 100644
index 0000000000000000000000000000000000000000..08fc8de9334f214beebda36ba810fdd7a6961027
--- /dev/null
+++ b/plugins/tangle/misc.go
@@ -0,0 +1,11 @@
+package tangle
+
+import "github.com/iotaledger/iota.go/trinary"
+
+func databaseKeyForHashPrefixedHash(address trinary.Hash, transactionHash trinary.Hash) []byte {
+	return append(databaseKeyForHashPrefix(address), trinary.MustTrytesToBytes(transactionHash)...)
+}
+
+func databaseKeyForHashPrefix(hash trinary.Hash) []byte {
+	return trinary.MustTrytesToBytes(hash)
+}
diff --git a/plugins/tangle/tx_per_address.go b/plugins/tangle/tx_per_address.go
new file mode 100644
index 0000000000000000000000000000000000000000..87a568284b8f6bd770392dcf509cd40b3e69688f
--- /dev/null
+++ b/plugins/tangle/tx_per_address.go
@@ -0,0 +1,62 @@
+package tangle
+
+import (
+	"github.com/iotaledger/goshimmer/packages/database"
+	"github.com/iotaledger/iota.go/trinary"
+)
+
+var (
+	transactionsHashesForAddressDatabase database.Database
+)
+
+func configureTransactionHashesForAddressDatabase() {
+	if db, err := database.Get("transactionsHashesForAddress"); err != nil {
+		panic(err)
+	} else {
+		transactionsHashesForAddressDatabase = db
+	}
+}
+
+type TxHashForAddress struct {
+	Address trinary.Hash
+	TxHash  trinary.Hash
+}
+
+func StoreTransactionHashForAddressInDatabase(address *TxHashForAddress) error {
+	if err := transactionsHashesForAddressDatabase.Set(
+		databaseKeyForHashPrefixedHash(address.Address, address.TxHash),
+		[]byte{},
+	); err != nil {
+		return ErrDatabaseError.Derive(err, "failed to store tx for address in database")
+	}
+	log.Info("Stored Address:", address.Address)
+	log.Info("TxHash:", address.TxHash)
+	log.Info("txForAddr: ", trinary.MustBytesToTrytes(databaseKeyForHashPrefixedHash(address.Address, address.TxHash), 81))
+	return nil
+}
+
+func DeleteTransactionHashForAddressInDatabase(address *TxHashForAddress) error {
+	if err := transactionsHashesForAddressDatabase.Delete(
+		databaseKeyForHashPrefixedHash(address.Address, address.TxHash),
+	); err != nil {
+		return ErrDatabaseError.Derive(err, "failed to delete tx for address")
+	}
+
+	return nil
+}
+
+func ReadTransactionHashesForAddressFromDatabase(address trinary.Hash) ([]trinary.Hash, error) {
+	var transactionHashes []trinary.Hash
+	err := transactionsHashesForAddressDatabase.ForEachWithPrefix(databaseKeyForHashPrefix(address), func(key []byte, value []byte) {
+		log.Info("Len key:", len(key))
+		txHash := trinary.MustBytesToTrytes(key)[81:]
+		log.Info("Len ALL:", len(txHash))
+		transactionHashes = append(transactionHashes, txHash)
+	})
+
+	if err != nil {
+		return nil, ErrDatabaseError.Derive(err, "failed to read tx per address from database")
+	} else {
+		return transactionHashes, nil
+	}
+}