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 3bd4dda..892a27d 100644
--- a/component-test/src/main/java/io/mifos/portfolio/AccountingFixture.java
+++ b/component-test/src/main/java/io/mifos/portfolio/AccountingFixture.java
@@ -611,12 +611,21 @@
                              final String productIdentifier,
                              final String caseIdentifier,
                              final Action action) {
-    final Set<Debtor> filteredDebtors = debtors.stream().filter(x -> BigDecimal.valueOf(Double.valueOf(x.getAmount())).compareTo(BigDecimal.ZERO) != 0).collect(Collectors.toSet());
-    final Set<Creditor> filteredCreditors = creditors.stream().filter(x -> BigDecimal.valueOf(Double.valueOf(x.getAmount())).compareTo(BigDecimal.ZERO) != 0).collect(Collectors.toSet());
+    final Set<Debtor> filteredDebtors = debtors.stream()
+        .filter(x -> BigDecimal.valueOf(Double.valueOf(x.getAmount())).compareTo(BigDecimal.ZERO) != 0)
+        .collect(Collectors.toSet());
+    final Set<Creditor> filteredCreditors = creditors.stream()
+        .filter(x -> BigDecimal.valueOf(Double.valueOf(x.getAmount())).compareTo(BigDecimal.ZERO) != 0)
+        .collect(Collectors.toSet());
     if (filteredCreditors.size() == 0 && filteredDebtors.size() == 0)
       return;
-    final JournalEntryMatcher specifiesCorrectJournalEntry = new JournalEntryMatcher(filteredDebtors, filteredCreditors, productIdentifier, caseIdentifier, action);
-    Mockito.verify(ledgerManager, Mockito.atLeastOnce()).createJournalEntry(AdditionalMatchers.and(argThat(isValid()), argThat(specifiesCorrectJournalEntry)));
-
+    final JournalEntryMatcher specifiesCorrectJournalEntry = new JournalEntryMatcher(
+        filteredDebtors,
+        filteredCreditors,
+        productIdentifier,
+        caseIdentifier,
+        action);
+    Mockito.verify(ledgerManager, Mockito.atLeastOnce())
+        .createJournalEntry(AdditionalMatchers.and(argThat(isValid()), argThat(specifiesCorrectJournalEntry)));
   }
 }
\ No newline at end of file
