diff --git a/main.go b/main.go
index 9f832c04c6b713eab21abe6365185a9c9d4b69dc..c51e880060dd135c8f4aa88b159bff8bf0595a96 100644
--- a/main.go
+++ b/main.go
@@ -22,6 +22,7 @@ import (
 	"github.com/iotaledger/goshimmer/plugins/spa"
 	"github.com/iotaledger/goshimmer/plugins/tangle"
 	"github.com/iotaledger/goshimmer/plugins/webapi"
+	webapi_broadcastData "github.com/iotaledger/goshimmer/plugins/webapi/broadcastData"
 	webapi_gtta "github.com/iotaledger/goshimmer/plugins/webapi/gtta"
 	webapi_spammer "github.com/iotaledger/goshimmer/plugins/webapi/spammer"
 	webapi_auth "github.com/iotaledger/goshimmer/plugins/webauth"
@@ -60,11 +61,11 @@ func main() {
 			webapi_auth.PLUGIN,
 			webapi_gtta.PLUGIN,
 			webapi_spammer.PLUGIN,
+			webapi_broadcastData.PLUGIN,
 
 			spa.PLUGIN,
 
 			/*
-				webapi_broadcastData.PLUGIN,
 				webapi_getTransactionTrytesByHash.PLUGIN,
 				webapi_getTransactionObjectsByHash.PLUGIN,
 				webapi_findTransactionHashes.PLUGIN,
diff --git a/out.png b/out.png
index 791e95508b8a43cf8e9c0cc509a1f15ef5a53ed7..bd230abdd676a7fec1b003bc17ec6c0189d20dd0 100644
Binary files a/out.png and b/out.png differ
diff --git a/packages/binary/tangle/transactionparser/builtinfilters/recently_seen_bytes_filter.go b/packages/binary/tangle/transactionparser/builtinfilters/recently_seen_bytes_filter.go
index 8dec31ea41c4575574c161869586d5fbaffa50d7..fbcc969816af831da14d62ad0b6a2d9699c9a174 100644
--- a/packages/binary/tangle/transactionparser/builtinfilters/recently_seen_bytes_filter.go
+++ b/packages/binary/tangle/transactionparser/builtinfilters/recently_seen_bytes_filter.go
@@ -14,7 +14,7 @@ var ErrReceivedDuplicateBytes = fmt.Errorf("received duplicate bytes")
 type RecentlySeenBytesFilter struct {
 	bytesFilter      *bytesfilter.BytesFilter
 	onAcceptCallback func(bytes []byte, peer *peer.Peer)
-	onRejectCallback func(bytes []byte, err error)
+	onRejectCallback func(bytes []byte, err error, peer *peer.Peer)
 	workerPool       async.WorkerPool
 
 	onAcceptCallbackMutex sync.RWMutex
@@ -34,7 +34,7 @@ func (filter *RecentlySeenBytesFilter) Filter(bytes []byte, peer *peer.Peer) {
 		if filter.bytesFilter.Add(bytes) {
 			filter.getAcceptCallback()(bytes, peer)
 		} else {
-			filter.getRejectCallback()(bytes, ErrReceivedDuplicateBytes)
+			filter.getRejectCallback()(bytes, ErrReceivedDuplicateBytes, peer)
 		}
 	})
 }
@@ -45,7 +45,7 @@ func (filter *RecentlySeenBytesFilter) OnAccept(callback func(bytes []byte, peer
 	filter.onAcceptCallbackMutex.Unlock()
 }
 
-func (filter *RecentlySeenBytesFilter) OnReject(callback func(bytes []byte, err error)) {
+func (filter *RecentlySeenBytesFilter) OnReject(callback func(bytes []byte, err error, peer *peer.Peer)) {
 	filter.onRejectCallbackMutex.Lock()
 	filter.onRejectCallback = callback
 	filter.onRejectCallbackMutex.Unlock()
@@ -59,7 +59,7 @@ func (filter *RecentlySeenBytesFilter) getAcceptCallback() (result func(bytes []
 	return
 }
 
-func (filter *RecentlySeenBytesFilter) getRejectCallback() (result func(bytes []byte, err error)) {
+func (filter *RecentlySeenBytesFilter) getRejectCallback() (result func(bytes []byte, err error, peer *peer.Peer)) {
 	filter.onRejectCallbackMutex.Lock()
 	result = filter.onRejectCallback
 	filter.onRejectCallbackMutex.Unlock()
diff --git a/packages/binary/tangle/transactionparser/builtinfilters/transaction_signature_filter.go b/packages/binary/tangle/transactionparser/builtinfilters/transaction_signature_filter.go
index 469864ba8b8f7f529df9c8e5db4911f73349b82b..132ca46ece65ecfc6c2bc6ebc6fa50bb64b29171 100644
--- a/packages/binary/tangle/transactionparser/builtinfilters/transaction_signature_filter.go
+++ b/packages/binary/tangle/transactionparser/builtinfilters/transaction_signature_filter.go
@@ -14,7 +14,7 @@ var ErrInvalidSignature = fmt.Errorf("invalid signature")
 
 type TransactionSignatureFilter struct {
 	onAcceptCallback func(tx *transaction.Transaction, peer *peer.Peer)
-	onRejectCallback func(tx *transaction.Transaction, err error)
+	onRejectCallback func(tx *transaction.Transaction, err error, peer *peer.Peer)
 	workerPool       async.WorkerPool
 
 	onAcceptCallbackMutex sync.RWMutex
@@ -32,7 +32,7 @@ func (filter *TransactionSignatureFilter) Filter(tx *transaction.Transaction, pe
 		if tx.VerifySignature() {
 			filter.getAcceptCallback()(tx, peer)
 		} else {
-			filter.getRejectCallback()(tx, ErrInvalidSignature)
+			filter.getRejectCallback()(tx, ErrInvalidSignature, peer)
 		}
 	})
 }
@@ -43,7 +43,7 @@ func (filter *TransactionSignatureFilter) OnAccept(callback func(tx *transaction
 	filter.onAcceptCallbackMutex.Unlock()
 }
 
-func (filter *TransactionSignatureFilter) OnReject(callback func(tx *transaction.Transaction, err error)) {
+func (filter *TransactionSignatureFilter) OnReject(callback func(tx *transaction.Transaction, err error, peer *peer.Peer)) {
 	filter.onRejectCallbackMutex.Lock()
 	filter.onRejectCallback = callback
 	filter.onRejectCallbackMutex.Unlock()
@@ -61,7 +61,7 @@ func (filter *TransactionSignatureFilter) getAcceptCallback() (result func(tx *t
 	return
 }
 
-func (filter *TransactionSignatureFilter) getRejectCallback() (result func(tx *transaction.Transaction, err error)) {
+func (filter *TransactionSignatureFilter) getRejectCallback() (result func(tx *transaction.Transaction, err error, peer *peer.Peer)) {
 	filter.onRejectCallbackMutex.RLock()
 	result = filter.onRejectCallback
 	filter.onRejectCallbackMutex.RUnlock()
diff --git a/packages/binary/tangle/transactionparser/bytes_filter.go b/packages/binary/tangle/transactionparser/bytes_filter.go
index 277c2da119fdd8ea355ab18ef7ce599ffe38250a..2a84169ce7d19dcc3f5f66cbcafc7d7a04eb8811 100644
--- a/packages/binary/tangle/transactionparser/bytes_filter.go
+++ b/packages/binary/tangle/transactionparser/bytes_filter.go
@@ -7,6 +7,6 @@ import (
 type BytesFilter interface {
 	Filter(bytes []byte, peer *peer.Peer)
 	OnAccept(callback func(bytes []byte, peer *peer.Peer))
-	OnReject(callback func(bytes []byte, err error))
+	OnReject(callback func(bytes []byte, err error, peer *peer.Peer))
 	Shutdown()
 }
diff --git a/packages/binary/tangle/transactionparser/transaction_filter.go b/packages/binary/tangle/transactionparser/transaction_filter.go
index 2898afde8b30468ed2b1041126395436f18686f7..ac63d23c5bc21fa673bdd4c8dd0062ac7aa23431 100644
--- a/packages/binary/tangle/transactionparser/transaction_filter.go
+++ b/packages/binary/tangle/transactionparser/transaction_filter.go
@@ -9,6 +9,6 @@ import (
 type TransactionFilter interface {
 	Filter(tx *transaction.Transaction, peer *peer.Peer)
 	OnAccept(callback func(tx *transaction.Transaction, peer *peer.Peer))
-	OnReject(callback func(tx *transaction.Transaction, err error))
+	OnReject(callback func(tx *transaction.Transaction, err error, peer *peer.Peer))
 	Shutdown()
 }
diff --git a/packages/binary/tangle/transactionparser/transactionparser.go b/packages/binary/tangle/transactionparser/transactionparser.go
index a144746d28f73cf16b9eca88cf5fee6005f7172f..f1568d49796a6b1dd9fc16917b3fdac6daeade91 100644
--- a/packages/binary/tangle/transactionparser/transactionparser.go
+++ b/packages/binary/tangle/transactionparser/transactionparser.go
@@ -30,13 +30,13 @@ func New() (result *TransactionParser) {
 
 		Events: transactionParserEvents{
 			BytesRejected: events.NewEvent(func(handler interface{}, params ...interface{}) {
-				handler.(func([]byte, error))(params[0].([]byte), params[1].(error))
+				handler.(func([]byte, error, *peer.Peer))(params[0].([]byte), params[1].(error), params[2].(*peer.Peer))
 			}),
 			TransactionParsed: events.NewEvent(func(handler interface{}, params ...interface{}) {
 				handler.(func(*transaction.Transaction, *peer.Peer))(params[0].(*transaction.Transaction), params[1].(*peer.Peer))
 			}),
 			TransactionRejected: events.NewEvent(func(handler interface{}, params ...interface{}) {
-				handler.(func(*transaction.Transaction, error))(params[0].(*transaction.Transaction), params[1].(error))
+				handler.(func(*transaction.Transaction, error, *peer.Peer))(params[0].(*transaction.Transaction), params[1].(error), params[2].(*peer.Peer))
 			}),
 		},
 	}
@@ -101,8 +101,8 @@ func (transactionParser *TransactionParser) setupBytesFilterDataFlow() {
 			} else {
 				transactionParser.bytesFilters[i].OnAccept(transactionParser.bytesFilters[i+1].Filter)
 			}
-			transactionParser.bytesFilters[i].OnReject(func(bytes []byte, err error) {
-				transactionParser.Events.BytesRejected.Trigger(bytes, err)
+			transactionParser.bytesFilters[i].OnReject(func(bytes []byte, err error, peer *peer.Peer) {
+				transactionParser.Events.BytesRejected.Trigger(bytes, err, peer)
 			})
 		}
 	}
@@ -127,8 +127,8 @@ func (transactionParser *TransactionParser) setupTransactionsFilterDataFlow() {
 			} else {
 				transactionParser.transactionFilters[i].OnAccept(transactionParser.transactionFilters[i+1].Filter)
 			}
-			transactionParser.transactionFilters[i].OnReject(func(tx *transaction.Transaction, err error) {
-				transactionParser.Events.TransactionRejected.Trigger(tx, err)
+			transactionParser.transactionFilters[i].OnReject(func(tx *transaction.Transaction, err error, peer *peer.Peer) {
+				transactionParser.Events.TransactionRejected.Trigger(tx, err, peer)
 			})
 		}
 	}
@@ -137,7 +137,7 @@ func (transactionParser *TransactionParser) setupTransactionsFilterDataFlow() {
 
 func (transactionParser *TransactionParser) parseTransaction(bytes []byte, peer *peer.Peer) {
 	if parsedTransaction, err := transaction.FromBytes(bytes); err != nil {
-		transactionParser.Events.BytesRejected.Trigger(bytes, err)
+		transactionParser.Events.BytesRejected.Trigger(bytes, err, peer)
 	} else {
 		transactionParser.transactionFilters[0].Filter(parsedTransaction, peer)
 	}
diff --git a/plugins/tangle/plugin.go b/plugins/tangle/plugin.go
index acc998fe3a0e6801f6337f0a120a91683fb0bab7..4afcbb6c40d8b2c2dacc9e1fdae0308a3419c01d 100644
--- a/plugins/tangle/plugin.go
+++ b/plugins/tangle/plugin.go
@@ -42,6 +42,7 @@ func configure(*node.Plugin) {
 
 	// setup TransactionParser
 	TransactionParser.Events.TransactionParsed.Attach(events.NewClosure(func(transaction *transaction.Transaction, peer *peer.Peer) {
+		peer.PublicKey()
 		// TODO: ADD PEER
 
 		Instance.AttachTransaction(transaction)
diff --git a/plugins/webapi/broadcastData/plugin.go b/plugins/webapi/broadcastData/plugin.go
index 180144daece29905658d1e667c5521ed0cb838c2..ab2631a54d6aae375f58f13d64a10f4c1762e6b4 100644
--- a/plugins/webapi/broadcastData/plugin.go
+++ b/plugins/webapi/broadcastData/plugin.go
@@ -29,7 +29,6 @@ func configure(plugin *node.Plugin) {
 // broadcastData creates a data (0-value) transaction given an input of bytes and
 // broadcasts it to the node's neighbors. It returns the transaction hash if successful.
 func broadcastData(c echo.Context) error {
-
 	var request Request
 	if err := c.Bind(&request); err != nil {
 		log.Info(err.Error())