diff --git a/packages/mana/balance.go b/packages/mana/balance.go
index 95e6e857dcb99ebdb9c4906c21c7327c5de40bfc..8c36a628cefd738c3da55c351b857ba457124b8d 100644
--- a/packages/mana/balance.go
+++ b/packages/mana/balance.go
@@ -2,6 +2,7 @@ package mana
 
 import (
 	"github.com/iotaledger/goshimmer/packages/datastructure"
+	"github.com/iotaledger/goshimmer/packages/errors"
 )
 
 type Balance struct {
@@ -17,12 +18,30 @@ func NewBalance(calculator *Calculator) *Balance {
 }
 
 // Returns the current mana balance.
-func (balance *Balance) GetValue() uint64 {
-	if lastBalanceHistoryEntry, err := balance.transferHistory.GetLast(); datastructure.ErrNoSuchElement.Equals(err) {
-		return 0
+func (balance *Balance) GetValue(now ...uint64) (result uint64, err errors.IdentifiableError) {
+	if lastBalanceHistoryEntry, historyErr := balance.transferHistory.GetLast(); historyErr != nil {
+		if !datastructure.ErrNoSuchElement.Equals(historyErr) {
+			err = historyErr
+		}
 	} else {
-		return lastBalanceHistoryEntry.(*BalanceHistoryEntry).balance
+		switch len(now) {
+		case 0:
+			result = lastBalanceHistoryEntry.(*BalanceHistoryEntry).balance
+
+		case 1:
+			lastErosionTime := lastBalanceHistoryEntry.(*BalanceHistoryEntry).transfer.spentTime
+			if lastErosionTime > now[0] {
+				panic("watt")
+			} else {
+				result, _ = balance.calculator.ErodeMana(lastBalanceHistoryEntry.(*BalanceHistoryEntry).balance, now[0]-lastErosionTime)
+			}
+
+		default:
+			err = errors.New("Test")
+		}
 	}
+
+	return
 }
 
 // Returns the timestamp of the last mana erosion.
@@ -109,7 +128,7 @@ func (balance *Balance) applyTransfer(transfer *Transfer) {
 	// store results
 	balance.transferHistory.AddLast(&BalanceHistoryEntry{
 		transfer:                 transfer,
-		balance:                  currentBalance + gainedMana,
+		balance:                  currentBalance + gainedMana - transfer.burnedMana,
 		accumulatedRoundingError: roundingError,
 	})
 }
diff --git a/packages/mana/balance_test.go b/packages/mana/balance_test.go
index 5aa0b3f1e7f4384d4ac4e8f8e7730dd9d341df02..e38b15150935c7e2c1ba0bbd0126066ef80dcf9d 100644
--- a/packages/mana/balance_test.go
+++ b/packages/mana/balance_test.go
@@ -11,15 +11,37 @@ func TestBalance_AddTransfer(t *testing.T) {
 
 	// spend coins multiple times
 	balance1 := NewBalance(calculator)
-	balance1.AddTransfer(NewTransfer(1000, 1000, 1700))
-	balance1.AddTransfer(NewTransfer(1000, 700, 1000))
-	balance1.AddTransfer(NewTransfer(1000, 0, 700))
+	balance1.AddTransfer(&Transfer{
+		movedCoins:   1000,
+		burnedMana:   10,
+		receivedTime: 1000,
+		spentTime:    1700,
+	})
+	balance1.AddTransfer(&Transfer{
+		movedCoins:   1000,
+		burnedMana:   0,
+		receivedTime: 700,
+		spentTime:    1000,
+	})
+	balance1.AddTransfer(&Transfer{
+		movedCoins:   1000,
+		burnedMana:   0,
+		receivedTime: 0,
+		spentTime:    700,
+	})
 
 	// hold coins for the full time
 	balance2 := NewBalance(calculator)
-	balance2.AddTransfer(NewTransfer(1000, 0, 1700))
+	balance2.AddTransfer(&Transfer{
+		movedCoins:   1000,
+		burnedMana:   10,
+		receivedTime: 0,
+		spentTime:    1700,
+	})
 
 	// check result
-	assert.Equal(t, balance1.GetValue(), uint64(301))
-	assert.Equal(t, balance2.GetValue(), uint64(301))
+	val1, _ := balance1.GetValue()
+	assert.Equal(t, val1, uint64(291))
+	val2, _ := balance2.GetValue()
+	assert.Equal(t, val2, uint64(291))
 }
diff --git a/packages/mana/errors.go b/packages/mana/errors.go
new file mode 100644
index 0000000000000000000000000000000000000000..e462aad43529f4c59f902abf4c35b79e75f1a54f
--- /dev/null
+++ b/packages/mana/errors.go
@@ -0,0 +1 @@
+package mana
diff --git a/packages/mana/transfer.go b/packages/mana/transfer.go
index eae37e0df564885fbc095a907c8439fadbb4b213..cb8da44dd9826b48f21dd23714f4ed09f4346890 100644
--- a/packages/mana/transfer.go
+++ b/packages/mana/transfer.go
@@ -2,13 +2,15 @@ package mana
 
 type Transfer struct {
 	movedCoins   uint64
+	burnedMana   uint64
 	receivedTime uint64
 	spentTime    uint64
 }
 
-func NewTransfer(movedCoins uint64, receivedTime uint64, spentTime uint64) *Transfer {
+func NewTransfer(movedCoins uint64, burnedMana uint64, receivedTime uint64, spentTime uint64) *Transfer {
 	return &Transfer{
 		movedCoins:   movedCoins,
+		burnedMana:   burnedMana,
 		receivedTime: receivedTime,
 		spentTime:    spentTime,
 	}