diff --git a/base/src/org/compiere/model/MPayment.java b/base/src/org/compiere/model/MPayment.java
index 43e0c3e9d4..c220e8f6c4 100644
--- a/base/src/org/compiere/model/MPayment.java
+++ b/base/src/org/compiere/model/MPayment.java
@@ -1770,10 +1770,29 @@ public final class MPayment extends X_C_Payment
 		//	MProject project = new MProject(getCtx(), getC_Project_ID());
 		}
 		//	Update BP for Prepayments
-		if (getC_BPartner_ID() != 0 && getC_Invoice_ID() == 0)
+		if (getC_BPartner_ID() != 0 && getC_Invoice_ID() == 0 && getC_Charge_ID() == 0)
 		{
 			MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName());
-			bp.setTotalOpenBalance();
+			//	Update total balance to include this payment 
+			BigDecimal payAmt = MConversionRate.convertBase(getCtx(), getPayAmt(), 
+				getC_Currency_ID(), getDateAcct(), getC_ConversionType_ID(), getAD_Client_ID(), getAD_Org_ID());
+			if (payAmt == null)
+			{
+				m_processMsg = "Could not convert C_Currency_ID=" + getC_Currency_ID()
+					+ " to base C_Currency_ID=" + MClient.get(Env.getCtx()).getC_Currency_ID();
+				return DocAction.STATUS_Invalid;
+			}
+			//	Total Balance
+			BigDecimal newBalance = bp.getTotalOpenBalance(false);
+			if (newBalance == null)
+				newBalance = Env.ZERO;
+			if (isReceipt())
+				newBalance = newBalance.subtract(payAmt);
+			else
+				newBalance = newBalance.add(payAmt);
+				
+			bp.setTotalOpenBalance(newBalance);
+			bp.setSOCreditStatus();
 			bp.save();
 		}