diff --git a/component-test/src/main/java/io/mifos/portfolio/AccountingFixture.java b/component-test/src/main/java/io/mifos/portfolio/AccountingFixture.java
index 58a06a8..595d2b4 100644
--- a/component-test/src/main/java/io/mifos/portfolio/AccountingFixture.java
+++ b/component-test/src/main/java/io/mifos/portfolio/AccountingFixture.java
@@ -19,6 +19,7 @@
 import io.mifos.accounting.api.v1.domain.*;
 import io.mifos.core.api.util.NotFoundException;
 import io.mifos.core.lang.DateConverter;
+import io.mifos.individuallending.api.v1.domain.workflow.Action;
 import org.hamcrest.Description;
 import org.mockito.AdditionalMatchers;
 import org.mockito.ArgumentMatcher;
@@ -335,13 +336,18 @@
   private static class JournalEntryMatcher extends ArgumentMatcher<JournalEntry> {
     private final Set<Debtor> debtors;
     private final Set<Creditor> creditors;
+    private final String transactionPrefix;
     private JournalEntry checkedArgument;
 
     private JournalEntryMatcher(final Set<Debtor> debtors,
-                                final Set<Creditor> creditors) {
+                                final Set<Creditor> creditors,
+                                final String productIdentifier,
+                                final String caseIdentifier,
+                                final Action action) {
       this.debtors = debtors;
       this.creditors = creditors;
       this.checkedArgument = null; //Set when matches called.
+      this.transactionPrefix = "portfolio." + productIdentifier + "." + caseIdentifier + "." + action.name();
     }
 
     @Override
@@ -354,7 +360,8 @@
       checkedArgument = (JournalEntry) argument;
 
       return this.debtors.equals(checkedArgument.getDebtors()) &&
-              this.creditors.equals(checkedArgument.getCreditors());
+          this.creditors.equals(checkedArgument.getCreditors()) &&
+          checkedArgument.getTransactionIdentifier().startsWith(transactionPrefix);
     }
 
     @Override
@@ -470,17 +477,24 @@
   static void verifyTransfer(final LedgerManager ledgerManager,
                              final String fromAccountIdentifier,
                              final String toAccountIdentifier,
-                             final BigDecimal amount) {
+                             final BigDecimal amount,
+                             final String productIdentifier,
+                             final String caseIdentifier,
+                             final Action action) {
     final JournalEntryMatcher specifiesCorrectJournalEntry = new JournalEntryMatcher(
-            Collections.singleton(new Debtor(fromAccountIdentifier, amount.toPlainString())),
-            Collections.singleton(new Creditor(toAccountIdentifier, amount.toPlainString())));
+        Collections.singleton(new Debtor(fromAccountIdentifier, amount.toPlainString())),
+        Collections.singleton(new Creditor(toAccountIdentifier, amount.toPlainString())),
+        productIdentifier, caseIdentifier, action);
     Mockito.verify(ledgerManager).createJournalEntry(AdditionalMatchers.and(argThat(isValid()), argThat(specifiesCorrectJournalEntry)));
   }
 
   static void verifyTransfer(final LedgerManager ledgerManager,
                              final Set<Debtor> debtors,
-                             final Set<Creditor> creditors) {
-    final JournalEntryMatcher specifiesCorrectJournalEntry = new JournalEntryMatcher(debtors, creditors);
+                             final Set<Creditor> creditors,
+                             final String productIdentifier,
+                             final String caseIdentifier,
+                             final Action action) {
+    final JournalEntryMatcher specifiesCorrectJournalEntry = new JournalEntryMatcher(debtors, creditors, productIdentifier, caseIdentifier, action);
     Mockito.verify(ledgerManager).createJournalEntry(AdditionalMatchers.and(argThat(isValid()), argThat(specifiesCorrectJournalEntry)));
 
   }
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java b/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java
index 785627a..739e354 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java
@@ -157,7 +157,7 @@
 
     AccountingFixture.verifyTransfer(ledgerManager,
         AccountingFixture.TELLER_ONE_ACCOUNT_IDENTIFIER, AccountingFixture.PROCESSING_FEE_INCOME_ACCOUNT_IDENTIFIER,
-        PROCESSING_FEE_AMOUNT
+        PROCESSING_FEE_AMOUNT, product.getIdentifier(), customerCase.getIdentifier(), Action.OPEN
     );
   }
 
@@ -203,7 +203,7 @@
     final Set<Creditor> creditors = new HashSet<>();
     creditors.add(new Creditor(pendingDisbursalAccountIdentifier, caseParameters.getMaximumBalance().toPlainString()));
     creditors.add(new Creditor(AccountingFixture.LOAN_ORIGINATION_FEES_ACCOUNT_IDENTIFIER, LOAN_ORIGINATION_FEE_AMOUNT.toPlainString()));
-    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors);
+    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors, product.getIdentifier(), customerCase.getIdentifier(), Action.APPROVE);
 
     expectedCurrentBalance = BigDecimal.ZERO;
   }
@@ -232,7 +232,7 @@
     creditors.add(new Creditor(customerLoanAccountIdentifier, caseParameters.getMaximumBalance().toPlainString()));
     creditors.add(new Creditor(AccountingFixture.TELLER_ONE_ACCOUNT_IDENTIFIER, caseParameters.getMaximumBalance().toPlainString()));
     creditors.add(new Creditor(AccountingFixture.DISBURSEMENT_FEE_INCOME_ACCOUNT_IDENTIFIER, DISBURSEMENT_FEE_AMOUNT.toPlainString()));
-    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors);
+    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors, product.getIdentifier(), customerCase.getIdentifier(), Action.DISBURSE);
 
     expectedCurrentBalance = expectedCurrentBalance.add(caseParameters.getMaximumBalance());
   }
@@ -243,7 +243,7 @@
     final String beatIdentifier = "alignment0";
     final String midnightTimeStamp = DateConverter.toIsoString(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));
 
-    AccountingFixture.mockBalance(customerLoanAccountIdentifier, expectedCurrentBalance);
+    AccountingFixture.mockBalance(customerLoanAccountIdentifier, expectedCurrentBalance.negate());
 
     final BeatPublish interestBeat = new BeatPublish(beatIdentifier, midnightTimeStamp);
     portfolioBeatListener.publishBeat(interestBeat);
@@ -270,7 +270,7 @@
     creditors.add(new Creditor(
         AccountingFixture.LOAN_INTEREST_ACCRUAL_ACCOUNT_IDENTIFIER,
         calculatedInterest.toPlainString()));
-    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors);
+    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors, product.getIdentifier(), customerCase.getIdentifier(), Action.APPLY_INTEREST);
 
     expectedCurrentBalance = expectedCurrentBalance.add(calculatedInterest);
   }
@@ -278,7 +278,7 @@
   private void step7PaybackPartialAmount(final BigDecimal amount) throws InterruptedException {
     logger.info("step7PaybackPartialAmount");
 
-    AccountingFixture.mockBalance(customerLoanAccountIdentifier, expectedCurrentBalance);
+    AccountingFixture.mockBalance(customerLoanAccountIdentifier, expectedCurrentBalance.negate());
 
     checkStateTransfer(
         product.getIdentifier(),
@@ -305,7 +305,7 @@
     if (interestAccrued.compareTo(BigDecimal.ZERO) != 0)
       creditors.add(new Creditor(AccountingFixture.CONSUMER_LOAN_INTEREST_ACCOUNT_IDENTIFIER, interestAccrued.toPlainString()));
 
-    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors);
+    AccountingFixture.verifyTransfer(ledgerManager, debtors, creditors, product.getIdentifier(), customerCase.getIdentifier(), Action.ACCEPT_PAYMENT);
 
     expectedCurrentBalance = expectedCurrentBalance.subtract(amount);
     interestAccrued = BigDecimal.ZERO;
@@ -314,7 +314,7 @@
   private void step8Close() throws InterruptedException {
     logger.info("step8Close");
 
-    AccountingFixture.mockBalance(customerLoanAccountIdentifier, expectedCurrentBalance);
+    AccountingFixture.mockBalance(customerLoanAccountIdentifier, expectedCurrentBalance.negate());
 
     checkStateTransfer(
         product.getIdentifier(),
diff --git a/service/src/main/java/io/mifos/individuallending/internal/service/CostComponentService.java b/service/src/main/java/io/mifos/individuallending/internal/service/CostComponentService.java
index d84fc63..cc20d09 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/service/CostComponentService.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/service/CostComponentService.java
@@ -186,7 +186,7 @@
     final DesignatorToAccountIdentifierMapper designatorToAccountIdentifierMapper
         = new DesignatorToAccountIdentifierMapper(dataContextOfAction);
     final String customerLoanAccountIdentifier = designatorToAccountIdentifierMapper.mapOrThrow(AccountDesignators.CUSTOMER_LOAN);
-    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier);
+    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier).negate();
 
     if (dataContextOfAction.getCaseParameters().getMaximumBalance().compareTo(
         currentBalance.add(requestedDisbursalSize)) < 0)
@@ -237,7 +237,7 @@
     final DesignatorToAccountIdentifierMapper designatorToAccountIdentifierMapper
         = new DesignatorToAccountIdentifierMapper(dataContextOfAction);
     final String customerLoanAccountIdentifier = designatorToAccountIdentifierMapper.mapOrThrow(AccountDesignators.CUSTOMER_LOAN);
-    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier);
+    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier).negate();
 
     final LocalDate startOfTerm = getStartOfTermOrThrow(dataContextOfAction, customerLoanAccountIdentifier);
 
@@ -277,7 +277,7 @@
     final DesignatorToAccountIdentifierMapper designatorToAccountIdentifierMapper
         = new DesignatorToAccountIdentifierMapper(dataContextOfAction);
     final String customerLoanAccountIdentifier = designatorToAccountIdentifierMapper.mapOrThrow(AccountDesignators.CUSTOMER_LOAN);
-    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier);
+    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier).negate();
 
     final LocalDate startOfTerm = getStartOfTermOrThrow(dataContextOfAction, customerLoanAccountIdentifier);
 
@@ -377,7 +377,7 @@
     final DesignatorToAccountIdentifierMapper designatorToAccountIdentifierMapper
         = new DesignatorToAccountIdentifierMapper(dataContextOfAction);
     final String customerLoanAccountIdentifier = designatorToAccountIdentifierMapper.mapOrThrow(AccountDesignators.CUSTOMER_LOAN);
-    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier);
+    final BigDecimal currentBalance = accountingAdapter.getCurrentBalance(customerLoanAccountIdentifier).negate();
     if (currentBalance.compareTo(BigDecimal.ZERO) != 0)
       throw ServiceException.conflict("Cannot close loan until the balance is zero.");
 
