diff --git a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
index 6070945..e77b523 100644
--- a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
@@ -161,6 +161,13 @@ public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, Account, A
if (currentAccount == null) {
throw new EntityPersistenceException(ErrorCode.ACCOUNT_DOES_NOT_EXIST_FOR_ID, accountId);
}
+
+ // Check if an update is really needed. If not, bail early to avoid sending an extra event on the bus
+ if ((currentAccount.getPaymentMethodId() == null && paymentMethodId == null) ||
+ (currentAccount.getPaymentMethodId() != null && currentAccount.getPaymentMethodId().equals(paymentMethodId))) {
+ return null;
+ }
+
final String thePaymentMethodId = paymentMethodId != null ? paymentMethodId.toString() : null;
transactional.updatePaymentMethod(accountId.toString(), thePaymentMethodId, context);
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
index 7ce25cf..007a773 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
@@ -363,6 +363,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
return;
}
+ // Note that the code below is a no-op if the default payment method hasn't changed
if (defaultPaymentMethodId != null) {
accountInternalApi.updatePaymentMethod(account.getId(), defaultPaymentMethodId, context);
} else {