diff --git a/packages/binary/spammer/spammer.go b/packages/binary/spammer/spammer.go
index f41499e28aaae3c84f06b3249d7a0a1efe1e8fba..e59cf9df343a5d1451a3625c3cc846834ffb7fc1 100644
--- a/packages/binary/spammer/spammer.go
+++ b/packages/binary/spammer/spammer.go
@@ -53,7 +53,7 @@ func (spammer *Spammer) run(tps int, processId int64) {
 
 		trunkTransactionId, branchTransactionId := spammer.tipSelector.GetTips()
 		spammer.transactionParser.Parse(
-			transaction.New(trunkTransactionId, branchTransactionId, spammingIdentity, data.New([]byte("SPAM"))).Bytes(),
+			transaction.New(trunkTransactionId, branchTransactionId, spammingIdentity, time.Now(), 0, data.New([]byte("SPAM"))).Bytes(),
 			nil,
 		)
 
@@ -83,7 +83,7 @@ func (spammer *Spammer) sendBurst(transactions int, processId int64) {
 			return
 		}
 
-		spamTransaction := transaction.New(previousTransactionId, previousTransactionId, spammingIdentity, data.New([]byte("SPAM")))
+		spamTransaction := transaction.New(previousTransactionId, previousTransactionId, spammingIdentity, time.Now(), 0, data.New([]byte("SPAM")))
 		previousTransactionId = spamTransaction.GetId()
 		burstBuffer[i] = spamTransaction.Bytes()
 	}
diff --git a/packages/binary/tangle/model/transaction/test/transaction_test.go b/packages/binary/tangle/model/transaction/test/transaction_test.go
index 0d88e5d6954c6b3de751016bcd89d8e927f8661c..172e6509428b25e2803ebe9f738153b5b4772221 100644
--- a/packages/binary/tangle/model/transaction/test/transaction_test.go
+++ b/packages/binary/tangle/model/transaction/test/transaction_test.go
@@ -4,6 +4,7 @@ import (
 	"runtime"
 	"sync"
 	"testing"
+	"time"
 
 	"github.com/iotaledger/hive.go/async"
 
@@ -20,7 +21,7 @@ func BenchmarkVerifyDataTransactions(b *testing.B) {
 
 	transactions := make([][]byte, b.N)
 	for i := 0; i < b.N; i++ {
-		tx := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), data.New([]byte("some data")))
+		tx := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("some data")))
 
 		if marshaledTransaction, err := tx.MarshalBinary(); err != nil {
 			b.Error(err)
@@ -50,7 +51,7 @@ func BenchmarkVerifySignature(b *testing.B) {
 
 	transactions := make([]*transaction.Transaction, b.N)
 	for i := 0; i < b.N; i++ {
-		transactions[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), data.New([]byte("test")))
+		transactions[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("test")))
 		transactions[i].Bytes()
 	}
 
diff --git a/packages/binary/tangle/model/transaction/transaction.go b/packages/binary/tangle/model/transaction/transaction.go
index 4abed904ff65a5cdea8e5bec1017ca1a69d2452a..d24202247602394f82ddf028ba65bc452384f723 100644
--- a/packages/binary/tangle/model/transaction/transaction.go
+++ b/packages/binary/tangle/model/transaction/transaction.go
@@ -2,6 +2,7 @@ package transaction
 
 import (
 	"sync"
+	"time"
 
 	"github.com/iotaledger/hive.go/stringify"
 
@@ -24,6 +25,8 @@ type Transaction struct {
 	trunkTransactionId  Id
 	branchTransactionId Id
 	issuerPublicKey     ed25119.PublicKey
+	issuingTime         time.Time
+	sequenceNumber      uint64
 	payload             payload.Payload
 	bytes               []byte
 	bytesMutex          sync.RWMutex
@@ -40,14 +43,17 @@ type Transaction struct {
 	issuerPrivateKey ed25119.PrivateKey
 }
 
-// Allows us to "issue" a transaction.
-func New(trunkTransactionId Id, branchTransactionId Id, issuerKeyPair ed25119.KeyPair, payload payload.Payload) (result *Transaction) {
+// New creates a new transaction with the details provided by the issuer.
+func New(trunkTransactionId Id, branchTransactionId Id, issuerKeyPair ed25119.KeyPair, issuingTime time.Time, sequenceNumber uint64, payload payload.Payload) (result *Transaction) {
 	return &Transaction{
 		trunkTransactionId:  trunkTransactionId,
 		branchTransactionId: branchTransactionId,
 		issuerPublicKey:     issuerKeyPair.PublicKey,
-		issuerPrivateKey:    issuerKeyPair.PrivateKey,
+		issuingTime:         issuingTime,
+		sequenceNumber:      sequenceNumber,
 		payload:             payload,
+
+		issuerPrivateKey: issuerKeyPair.PrivateKey,
 	}
 }
 
@@ -88,6 +94,12 @@ func FromBytes(bytes []byte, optionalTargetObject ...*Transaction) (result *Tran
 	if result.issuerPublicKey, err = ed25119.ParsePublicKey(marshalUtil); err != nil {
 		return
 	}
+	if result.issuingTime, err = marshalUtil.ReadTime(); err != nil {
+		return
+	}
+	if result.sequenceNumber, err = marshalUtil.ReadUint64(); err != nil {
+		return
+	}
 	if result.payload, err = payload.Parse(marshalUtil); err != nil {
 		return
 	}
@@ -146,6 +158,16 @@ func (transaction *Transaction) GetBranchTransactionId() Id {
 	return transaction.branchTransactionId
 }
 
+// IssuingTime returns the time when the transaction was created.
+func (transaction *Transaction) IssuingTime() time.Time {
+	return transaction.issuingTime
+}
+
+// SequenceNumber returns the sequence number of this transaction.
+func (transaction *Transaction) SequenceNumber() uint64 {
+	return transaction.sequenceNumber
+}
+
 func (transaction *Transaction) GetPayload() payload.Payload {
 	return transaction.payload
 }
@@ -218,6 +240,8 @@ func (transaction *Transaction) Bytes() []byte {
 	marshalUtil.WriteBytes(transaction.trunkTransactionId.Bytes())
 	marshalUtil.WriteBytes(transaction.branchTransactionId.Bytes())
 	marshalUtil.WriteBytes(transaction.issuerPublicKey.Bytes())
+	marshalUtil.WriteTime(transaction.issuingTime)
+	marshalUtil.WriteUint64(transaction.sequenceNumber)
 	marshalUtil.WriteBytes(transaction.payload.Bytes())
 	marshalUtil.WriteBytes(transaction.issuerPrivateKey.Sign(marshalUtil.Bytes()).Bytes())
 
diff --git a/packages/binary/tangle/tangle_test.go b/packages/binary/tangle/tangle_test.go
index be15e7e3b701e1385ba71d15399c6e9659f8c5eb..6ba20cc720c737df8127ccf2322ec1a9599ea4dc 100644
--- a/packages/binary/tangle/tangle_test.go
+++ b/packages/binary/tangle/tangle_test.go
@@ -36,7 +36,7 @@ func BenchmarkTangle_AttachTransaction(b *testing.B) {
 
 	transactionBytes := make([]*transaction.Transaction, b.N)
 	for i := 0; i < b.N; i++ {
-		transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, testIdentity, data.New([]byte("some data")))
+		transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, testIdentity, time.Now(), 0, data.New([]byte("some data")))
 		transactionBytes[i].Bytes()
 	}
 
@@ -91,8 +91,8 @@ func TestTangle_AttachTransaction(t *testing.T) {
 		fmt.Println("REMOVED:", transactionId)
 	}))
 
-	newTransaction1 := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), data.New([]byte("some data")))
-	newTransaction2 := transaction.New(newTransaction1.GetId(), newTransaction1.GetId(), ed25119.GenerateKeyPair(), data.New([]byte("some other data")))
+	newTransaction1 := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("some data")))
+	newTransaction2 := transaction.New(newTransaction1.GetId(), newTransaction1.GetId(), ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("some other data")))
 
 	tangle.AttachTransaction(newTransaction2)
 
diff --git a/packages/binary/tangle/tipselector/tipselector_test.go b/packages/binary/tangle/tipselector/tipselector_test.go
index 05329cc3e71770858f8606ca19554db4d8c653ae..fe565bd18ec900d3de305abcc849cb91258e3d09 100644
--- a/packages/binary/tangle/tipselector/tipselector_test.go
+++ b/packages/binary/tangle/tipselector/tipselector_test.go
@@ -2,6 +2,7 @@ package tipselector
 
 import (
 	"testing"
+	"time"
 
 	"github.com/stretchr/testify/assert"
 
@@ -20,7 +21,7 @@ func Test(t *testing.T) {
 	assert.Equal(t, transaction.EmptyId, branch1)
 
 	// create a transaction and attach it
-	transaction1 := transaction.New(trunk1, branch1, ed25119.GenerateKeyPair(), data.New([]byte("testtransaction")))
+	transaction1 := transaction.New(trunk1, branch1, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("testtransaction")))
 	tipSelector.AddTip(transaction1)
 
 	// check if the tip shows up in the tip count
@@ -32,7 +33,7 @@ func Test(t *testing.T) {
 	assert.Equal(t, transaction1.GetId(), branch2)
 
 	// create a 2nd transaction and attach it
-	transaction2 := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), data.New([]byte("testtransaction")))
+	transaction2 := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("testtransaction")))
 	tipSelector.AddTip(transaction2)
 
 	// check if the tip shows up in the tip count
@@ -40,7 +41,7 @@ func Test(t *testing.T) {
 
 	// attach a transaction to our two tips
 	trunk3, branch3 := tipSelector.GetTips()
-	transaction3 := transaction.New(trunk3, branch3, ed25119.GenerateKeyPair(), data.New([]byte("testtransaction")))
+	transaction3 := transaction.New(trunk3, branch3, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("testtransaction")))
 	tipSelector.AddTip(transaction3)
 
 	// check if the tip shows replaces the current tips
diff --git a/packages/binary/tangle/transactionparser/transactionparser_test.go b/packages/binary/tangle/transactionparser/transactionparser_test.go
index 8f31c0e9d101fd2fa03e3ef821ad84de5dc2da9e..85309414cc9643750348e7657098e22e29bc88d2 100644
--- a/packages/binary/tangle/transactionparser/transactionparser_test.go
+++ b/packages/binary/tangle/transactionparser/transactionparser_test.go
@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"strconv"
 	"testing"
+	"time"
 
 	"github.com/iotaledger/hive.go/events"
 
@@ -13,7 +14,7 @@ import (
 )
 
 func BenchmarkTransactionParser_ParseBytesSame(b *testing.B) {
-	txBytes := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), data.New([]byte("Test"))).Bytes()
+	txBytes := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("Test"))).Bytes()
 	txParser := New()
 
 	b.ResetTimer()
@@ -28,7 +29,7 @@ func BenchmarkTransactionParser_ParseBytesSame(b *testing.B) {
 func BenchmarkTransactionParser_ParseBytesDifferent(b *testing.B) {
 	transactionBytes := make([][]byte, b.N)
 	for i := 0; i < b.N; i++ {
-		transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), data.New([]byte("Test"+strconv.Itoa(i)))).Bytes()
+		transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("Test"+strconv.Itoa(i)))).Bytes()
 	}
 
 	txParser := New()
@@ -43,7 +44,7 @@ func BenchmarkTransactionParser_ParseBytesDifferent(b *testing.B) {
 }
 
 func TestTransactionParser_ParseTransaction(t *testing.T) {
-	tx := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), data.New([]byte("Test")))
+	tx := transaction.New(transaction.EmptyId, transaction.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, data.New([]byte("Test")))
 
 	txParser := New()
 	txParser.Parse(tx.Bytes(), nil)
diff --git a/packages/binary/valuetransfer/test/payload_test.go b/packages/binary/valuetransfer/test/payload_test.go
index 11b8e1454c34d50be8a0037aca9a3a26947fbfcf..f5e9f9d1dd5c4eab2378087849de3d7a3dd22aba 100644
--- a/packages/binary/valuetransfer/test/payload_test.go
+++ b/packages/binary/valuetransfer/test/payload_test.go
@@ -3,6 +3,7 @@ package test
 import (
 	"fmt"
 	"testing"
+	"time"
 
 	"github.com/stretchr/testify/assert"
 
@@ -61,6 +62,12 @@ func ExamplePayload() {
 		// issuer of the transaction (signs automatically)
 		ed25119.GenerateKeyPair(),
 
+		// the time when the transaction was created
+		time.Now(),
+
+		// the ever increasing sequence number of this transaction
+		0,
+
 		// payload
 		valuePayload,
 	)