diff --git a/packages/binary/tangle/events.go b/packages/binary/tangle/events.go
new file mode 100644
index 0000000000000000000000000000000000000000..0f4a24ebdd80ef8680dafb25f78cbb690837d8a1
--- /dev/null
+++ b/packages/binary/tangle/events.go
@@ -0,0 +1,9 @@
+package tangle
+
+import (
+	"github.com/iotaledger/hive.go/events"
+)
+
+type tangleEvents struct {
+	TransactionSolid *events.Event
+}
diff --git a/packages/binary/tangle/solidifier.go b/packages/binary/tangle/solidifier.go
index 417b6033fff4b4ce617b21a62c300f7986df7e2c..14e0f0bc3f610df0e0ecdcfa9151c720bab3a925 100644
--- a/packages/binary/tangle/solidifier.go
+++ b/packages/binary/tangle/solidifier.go
@@ -71,7 +71,7 @@ func (solidifier *solidifier) solidify(cachedTransaction *objectstorage.CachedOb
 
 		// if current transaction is solid and was not marked as solid before: mark as solid and propagate
 		if solidifier.isTransactionSolid(currentTransaction, currentTransactionMetadata) && currentTransactionMetadata.SetSolid(true) {
-			// fmt.Println("SOLID", currentTransaction.GetId())
+			solidifier.tangle.Events.TransactionSolid.Trigger(currentCachedTransaction, currentCachedTransactionMetadata)
 
 			solidifier.tangle.GetApprovers(currentTransaction.GetId()).Consume(func(object objectstorage.StorableObject) {
 				for approverTransactionId := range object.(*approvers.Approvers).Get() {
diff --git a/packages/binary/tangle/tangle.go b/packages/binary/tangle/tangle.go
index ee1e9cee68f7f389026bc12a3fd022c0274f1990..edaf55e104902a4057d588851d0f9b31aaeccad0 100644
--- a/packages/binary/tangle/tangle.go
+++ b/packages/binary/tangle/tangle.go
@@ -6,6 +6,7 @@ import (
 	"github.com/iotaledger/goshimmer/packages/binary/transactionmetadata"
 	"github.com/iotaledger/goshimmer/packages/storageprefix"
 	"github.com/iotaledger/hive.go/async"
+	"github.com/iotaledger/hive.go/events"
 	"github.com/iotaledger/hive.go/objectstorage"
 )
 
@@ -15,6 +16,8 @@ type Tangle struct {
 	transactionMetadataStorage *objectstorage.ObjectStorage
 	approversStorage           *objectstorage.ObjectStorage
 
+	Events tangleEvents
+
 	verifyTransactionsWorkerPool async.WorkerPool
 	storeTransactionsWorkerPool  async.WorkerPool
 }
@@ -24,6 +27,18 @@ func New(storageId []byte) (result *Tangle) {
 		transactionStorage:         objectstorage.New(append(storageId, storageprefix.TangleTransaction...), transactionFactory),
 		transactionMetadataStorage: objectstorage.New(append(storageId, storageprefix.TangleTransactionMetadata...), transactionFactory),
 		approversStorage:           objectstorage.New(append(storageId, storageprefix.TangleApprovers...), approversFactory),
+
+		Events: tangleEvents{
+			TransactionSolid: events.NewEvent(func(handler interface{}, params ...interface{}) {
+				cachedTransaction := params[0].(*objectstorage.CachedObject)
+				cachedTransactionMetadata := params[1].(*objectstorage.CachedObject)
+
+				cachedTransaction.RegisterConsumer()
+				cachedTransactionMetadata.RegisterConsumer()
+
+				handler.(func(*objectstorage.CachedObject, *objectstorage.CachedObject))(cachedTransaction, cachedTransactionMetadata)
+			}),
+		},
 	}
 
 	result.solidifier = newSolidifier(result)
diff --git a/packages/binary/tangle/tangle_test.go b/packages/binary/tangle/tangle_test.go
index 94e19ba97788e7f87bbfd7a25b0a7fd0727db456..a0b7d51c62e363d5860924cc2eec293eb3a70276 100644
--- a/packages/binary/tangle/tangle_test.go
+++ b/packages/binary/tangle/tangle_test.go
@@ -17,9 +17,11 @@ func BenchmarkTangle_AttachTransaction(b *testing.B) {
 		return
 	}
 
+	testIdentity := identity.Generate()
+
 	transactionBytes := make([][]byte, b.N)
 	for i := 0; i < b.N; i++ {
-		transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, identity.Generate(), data.New([]byte("some data"))).GetBytes()
+		transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, testIdentity, data.New([]byte("some data"))).GetBytes()
 	}
 
 	b.ResetTimer()