diff --git a/dapps/faucet/dapp.go b/dapps/faucet/dapp.go
index a4f736552d70bdd39b5429d0b9e6ddca0d2904be..fff78faa8d426dd150777ced9f246bc736df744a 100644
--- a/dapps/faucet/dapp.go
+++ b/dapps/faucet/dapp.go
@@ -91,12 +91,12 @@ func configure(*node.Plugin) {
 	fundingWorkerPool = workerpool.New(func(task workerpool.Task) {
 		msg := task.Param(0).(*message.Message)
 		addr := msg.Payload().(*faucetpayload.Payload).Address()
-		_, txID, err := Faucet().SendFunds(msg)
+		msg, txID, err := Faucet().SendFunds(msg)
 		if err != nil {
 			log.Errorf("couldn't fulfill funding request to %s: %s", addr, err)
 			return
 		}
-		log.Infof("sent funds to address %s via tx %s", addr, txID)
+		log.Infof("sent funds to address %s via tx %s and msg %s", addr, txID, msg.Id().String())
 	}, workerpool.WorkerCount(fundingWorkerCount), workerpool.QueueSize(fundingWorkerQueueSize))
 
 	configureEvents()
diff --git a/dapps/faucet/packages/faucet.go b/dapps/faucet/packages/faucet.go
index 88df115a6c6c74f4575be8ebd5f81b86efea4cf7..dd40e51fffa73802939bc5881ffed6fd8089dc6b 100644
--- a/dapps/faucet/packages/faucet.go
+++ b/dapps/faucet/packages/faucet.go
@@ -7,16 +7,16 @@ import (
 	"time"
 
 	faucetpayload "github.com/iotaledger/goshimmer/dapps/faucet/packages/payload"
-	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
-	"github.com/iotaledger/hive.go/events"
-
 	"github.com/iotaledger/goshimmer/dapps/valuetransfers"
 	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address"
+	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address/signaturescheme"
 	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/balance"
 	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/tangle"
 	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/transaction"
 	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/wallet"
+	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
 	"github.com/iotaledger/goshimmer/plugins/issuer"
+	"github.com/iotaledger/hive.go/events"
 )
 
 var (
@@ -55,7 +55,7 @@ func (f *Faucet) SendFunds(msg *message.Message) (m *message.Message, txID strin
 	addr := msg.Payload().(*faucetpayload.Payload).Address()
 
 	// get the output ids for the inputs and remainder balance
-	outputIds, remainder := f.collectUTXOsForFunding()
+	outputIds, addrsIndices, remainder := f.collectUTXOsForFunding()
 
 	tx := transaction.New(
 		// inputs
@@ -75,6 +75,10 @@ func (f *Faucet) SendFunds(msg *message.Message) (m *message.Message, txID strin
 		tx.Outputs().Add(remainAddr, []*balance.Balance{balance.New(balance.ColorIOTA, remainder)})
 	}
 
+	for index := range addrsIndices {
+		tx.Sign(signaturescheme.ED25519(*f.wallet.Seed().KeyPair(index)))
+	}
+
 	// prepare value payload with value factory
 	payload := valuetransfers.ValueObjectFactory().IssueTransaction(tx)
 
@@ -125,9 +129,10 @@ func (f *Faucet) awaitTransactionBooked(txID transaction.ID, maxAwait time.Durat
 
 // collectUTXOsForFunding iterates over the faucet's UTXOs until the token threshold is reached.
 // this function also returns the remainder balance for the given outputs.
-func (f *Faucet) collectUTXOsForFunding() (outputIds []transaction.OutputID, remainder int64) {
+func (f *Faucet) collectUTXOsForFunding() (outputIds []transaction.OutputID, addrsIndices map[uint64]struct{}, remainder int64) {
 	var total = f.tokensPerRequest
 	var i uint64
+	addrsIndices = map[uint64]struct{}{}
 
 	// get a list of address for inputs
 	for i = 0; total > 0; i++ {
@@ -141,6 +146,7 @@ func (f *Faucet) collectUTXOsForFunding() (outputIds []transaction.OutputID, rem
 			for _, coloredBalance := range output.Balances() {
 				val += coloredBalance.Value
 			}
+			addrsIndices[i] = struct{}{}
 
 			// get unspent output ids and check if it's conflict
 			if val <= total {