diff --git a/src/main/java/org/qora/block/BlockChain.java b/src/main/java/org/qora/block/BlockChain.java
index 7a3686bc..bf6c6b95 100644
--- a/src/main/java/org/qora/block/BlockChain.java
+++ b/src/main/java/org/qora/block/BlockChain.java
@@ -78,7 +78,8 @@ public class BlockChain {
 		arbitraryTimestamp,
 		powfixTimestamp,
 		v2Timestamp,
-		newAssetPricingTimestamp;
+		newAssetPricingTimestamp,
+		groupApprovalTimestamp;
 	}
 
 	/** Map of which blockchain features are enabled when (height/timestamp) */
@@ -299,6 +300,10 @@ public class BlockChain {
 		return featureTriggers.get("newAssetPricingTimestamp");
 	}
 
+	public long getGroupApprovalTimestamp() {
+		return featureTriggers.get("groupApprovalTimestamp");
+	}
+
 	// More complex getters for aspects that change by height or timestamp
 
 	public BigDecimal getRewardAtHeight(int ourHeight) {
diff --git a/src/main/java/org/qora/controller/Synchronizer.java b/src/main/java/org/qora/controller/Synchronizer.java
index f83dafc4..d124a084 100644
--- a/src/main/java/org/qora/controller/Synchronizer.java
+++ b/src/main/java/org/qora/controller/Synchronizer.java
@@ -26,7 +26,6 @@ import org.qora.repository.DataException;
 import org.qora.repository.Repository;
 import org.qora.repository.RepositoryManager;
 import org.qora.transaction.Transaction;
-import org.qora.transaction.Transaction.ApprovalStatus;
 
 public class Synchronizer {
 
@@ -252,6 +251,10 @@ public class Synchronizer {
 							return SynchronizationResult.INVALID_DATA;
 						}
 
+						// Transactions are transmitted without approval status so determine that now
+						for (Transaction transaction : newBlock.getTransactions())
+							transaction.setInitialApprovalStatus();
+
 						ValidationResult blockResult = newBlock.isValid();
 						if (blockResult != ValidationResult.OK) {
 							LOGGER.info(String.format("Peer %s sent invalid block for height %d: %s", peer, ourHeight, blockResult.name()));
@@ -261,14 +264,6 @@ public class Synchronizer {
 						// Save transactions attached to this block
 						for (Transaction transaction : newBlock.getTransactions()) {
 							TransactionData transactionData = transaction.getTransactionData();
-
-							// Fix up approval status
-							if (transaction.needsGroupApproval()) {
-								transactionData.setApprovalStatus(ApprovalStatus.PENDING);
-							} else {
-								transactionData.setApprovalStatus(ApprovalStatus.NOT_REQUIRED);
-							}
-
 							repository.getTransactionRepository().save(transactionData);
 						}
 
diff --git a/src/main/java/org/qora/transaction/Transaction.java b/src/main/java/org/qora/transaction/Transaction.java
index 12d7e18c..f8bf7ca2 100644
--- a/src/main/java/org/qora/transaction/Transaction.java
+++ b/src/main/java/org/qora/transaction/Transaction.java
@@ -778,6 +778,10 @@ public abstract class Transaction {
 		if (!this.transactionData.getType().needsApproval)
 			return false;
 
+		// Is group-approval even in effect yet?
+		if (this.transactionData.getTimestamp() < BlockChain.getInstance().getGroupApprovalTimestamp())
+			return false;
+
 		int txGroupId = this.transactionData.getTxGroupId();
 
 		if (txGroupId == Group.NO_GROUP)
@@ -797,6 +801,14 @@ public abstract class Transaction {
 		return true;
 	}
 
+	public void setInitialApprovalStatus() throws DataException {
+		if (this.needsGroupApproval()) {
+			transactionData.setApprovalStatus(ApprovalStatus.PENDING);
+		} else {
+			transactionData.setApprovalStatus(ApprovalStatus.NOT_REQUIRED);
+		}
+	}
+
 	public Boolean getApprovalDecision() throws DataException {
 		// Grab latest decisions from repository
 		GroupApprovalData groupApprovalData = this.repository.getTransactionRepository().getApprovalData(this.transactionData.getSignature());
@@ -841,17 +853,13 @@ public abstract class Transaction {
 			if (repository.getTransactionRepository().exists(transactionData.getSignature()))
 				return ValidationResult.TRANSACTION_ALREADY_EXISTS;
 
+			// Fix up approval status
+			this.setInitialApprovalStatus();
+
 			ValidationResult validationResult = this.isValidUnconfirmed();
 			if (validationResult != ValidationResult.OK)
 				return validationResult;
 
-			// Fix up approval status
-			if (this.needsGroupApproval()) {
-				transactionData.setApprovalStatus(ApprovalStatus.PENDING);
-			} else {
-				transactionData.setApprovalStatus(ApprovalStatus.NOT_REQUIRED);
-			}
-
 			repository.getTransactionRepository().save(transactionData);
 			repository.getTransactionRepository().unconfirmTransaction(transactionData);
 			repository.saveChanges();
diff --git a/src/main/resources/blockchain.json b/src/main/resources/blockchain.json
index dbd466d3..94a250fb 100644
--- a/src/main/resources/blockchain.json
+++ b/src/main/resources/blockchain.json
@@ -167,6 +167,7 @@
 		"arbitraryTimestamp": "1405702800000",
 		"powfixTimestamp": "1456426800000",
 		"v2Timestamp": "1559347200000",
-		"newAssetPricingTimestamp": "2000000000000"
+		"newAssetPricingTimestamp": "2000000000000",
+		"groupApprovalTimestamp": "2000000000000"
 	}
 }