diff --git a/Pages/Accounting b/Pages/Accounting
index f176446..22d8275 100644
--- a/Pages/Accounting
+++ b/Pages/Accounting
@@ -30,7 +30,7 @@
         browser.sleep(1000);
     },
     clickLinkShowForAccountWithName: function(identifier) {
-        browser.sleep(1000);
+        browser.sleep(2000);
         browser.wait(EC.invisibilityOf($("div[class='md-padding'] h3")), 5000);
         browser.wait(EC.textToBePresentInElement($$("tbody tr .td-data-table-cell").last(), "SHOW"), 5000);
         $$('tbody tr').filter(function(elem, index) {
diff --git a/Pages/Customers.js b/Pages/Customers.js
index ba6b7d2..be912c5 100644
--- a/Pages/Customers.js
+++ b/Pages/Customers.js
@@ -3,6 +3,8 @@
 //Actions specific to the Customers section
 
 var EC = protractor.ExpectedConditions;
+
+//customer creation
 var accountInput = $(".mat-input-infix input[placeholder='Account']");
 var firstNameInput = $(".mat-input-infix input[formcontrolname='firstName']");
 var middleNameInput = $(".mat-input-infix input[formcontrolname='middleName']");
@@ -17,16 +19,30 @@
 var mobileInput = $(".mat-input-infix input[formcontrolname='mobile']");
 var linkCustomers = $$("a[href='/customers']");
 var titleRow = $("fims-layout-card-over .mat-toolbar-row div");
+
+//deposit account assignment
 var productSelect = $("md-select[formcontrolname='productIdentifier']");
 var beneficiaryInput = $("td-chips[formcontrolname='beneficiaries'] input");
-var primaryButton =  $(".mat-raised-button.mat-primary");
+var primaryButton =  $$(".mat-raised-button.mat-primary");
 var continueButton = $$(".mat-raised-button.mat-accent");
+
+//loan account assignment
 var shortNameInput = $("fims-id-input[controlname='identifier'] input");
 var principalAmountInput = $("fims-number-input[controlname='principalAmount'] input");
+var interestRateInput = $("fims-number-input[controlname='interest'] input");
 var termInput = $("input[formcontrolname='term']");
 var paymentPeriod = $("input[formcontrolname='paymentPeriod']");
+//day 1.-30.
+var dayForMonthlyPaymentSelect = $("md-select[formcontrolname='monthSettingDay']");
+//first, second, third, last
+var dayForMonthlyPaymentSelect2 = $$("md-select[formcontrolname='monthSettingDay']").get(1);
+// Monday, Tuesday, ...
+var weekdaySelect = $("md-select[formcontrolname='monthSettingDayInWeek']");
 var depositAccountSelect = $("md-select[formcontrolname='depositAccountIdentifier'] .mat-select-trigger");
 
+//tasks
+var checkboxExecuteTask = $("md-checkbox[title='Execute task']");
+
 
 module.exports = {
     verifyCardHasTitleManageCustomers: function () {
@@ -86,11 +102,13 @@
         continueButton.get(2).click();
     },
     clickEnabledCreateCustomerButton: function () {
-        browser.executeScript("arguments[0].scrollIntoView();", primaryButton.getWebElement());
-        browser.wait(EC.elementToBeClickable(primaryButton), 5000);
-        expect(primaryButton.isEnabled()).toBeTruthy();
-        browser.wait(EC.elementToBeClickable(primaryButton), 5000);
-        primaryButton.click();
+        browser.executeScript("arguments[0].scrollIntoView();", primaryButton.first().getWebElement());
+        browser.wait(EC.elementToBeClickable(primaryButton.first()), 3000);
+        primaryButton.filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === "CREATE CUSTOMER";
+            });
+        }).click();
     },
     clickButtonOrLinkCreateNewCustomer: function () {
         browser.wait(EC.visibilityOf($("a[href='/customers/create']")), 5000);
@@ -132,6 +150,11 @@
         status = $("fims-state-display .mat-list-text .mat-line").getText();
         expect(status).toEqual("ACTIVE");
     },
+    verifyLoanAccountHasStatus: function (expectedStatus) {
+        browser.wait(EC.visibilityOf($("fims-state-display")), 2000);
+        status = $("fims-state-display .mat-list-text .mat-line").getText();
+        expect(status).toEqual(expectedStatus);
+    },
     clickManageDepositAccountsForCustomer: function (customer) {
         link = "/customers/detail/" + customer + "/deposits";
         browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 6000);
@@ -160,6 +183,7 @@
         browser.executeScript("arguments[0].scrollIntoView();", opt.getWebElement());
         browser.wait(EC.elementToBeClickable(opt), 2000);
         opt.click();
+        browser.wait(EC.invisibilityOf($("md-tooltip-component")), 3000);
     },
     clickEnabledButtonCreateDepositAccount: function () {
         browser.wait(EC.elementToBeClickable($(".mat-raised-button.mat-primary")), 5000);
@@ -186,7 +210,17 @@
             return text === expectedBalance;
         });
     },
-    verifyStateOfDepositAccountWithIdIs: function (identifier, expectedState) {
+    verifyStateOfDepositAccountWithId: function (identifier, expectedState) {
+        browser.wait(EC.visibilityOf($("tbody tr")), 5000);
+        //if > page of entries, need to implement way to page in order to find correct row
+        actualState = $$('tbody tr').filter(function (elem, index) {
+            return elem.$(".td-data-table-cell").getText().then(function (text) {
+                return text === identifier;
+            });
+        }).$$(".td-data-table-cell").get(3).getText();
+        expect(actualState).toEqual(expectedState);
+    },
+    verifyStateOfLoanAccountWithId: function (identifier, expectedState) {
         browser.wait(EC.visibilityOf($("tbody tr")), 5000);
         //if > page of entries, need to implement way to page in order to find correct row
         actualState = $$('tbody tr').filter(function (elem, index) {
@@ -204,10 +238,10 @@
         shortNameInput.click().sendKeys(text);
     },
     enterTextIntoPrincipalAmountInputField: function (text) {
-        principalAmountInput.click().sendKeys(protractor.Key.ARROW_LEFT);
-        principalAmountInput.sendKeys(protractor.Key.ARROW_LEFT);
-        principalAmountInput.sendKeys(protractor.Key.ARROW_LEFT);
-        principalAmountInput.sendKeys(protractor.Key.ARROW_LEFT);
+        principalAmountInput.click().sendKeys(protractor.Key.BACK_SPACE);
+        principalAmountInput.sendKeys(protractor.Key.BACK_SPACE);
+        principalAmountInput.sendKeys(protractor.Key.BACK_SPACE);
+        principalAmountInput.sendKeys(protractor.Key.BACK_SPACE);
         principalAmountInput.sendKeys(text);
     },
     enterTextIntoTermInputField: function (text) {
@@ -216,7 +250,7 @@
     selectDepositAccount: function (depositAccount) {
         browser.executeScript("arguments[0].scrollIntoView();", depositAccountSelect.getWebElement());
         browser.wait(EC.visibilityOf(depositAccountSelect), 2000);
-        productSelect.click();
+        depositAccountSelect.click();
         browser.wait(EC.visibilityOf($(".mat-option")), 5000);
         opt = element(by.cssContainingText('.mat-option', depositAccount));
         browser.executeScript("arguments[0].scrollIntoView();", opt.getWebElement());
@@ -232,4 +266,63 @@
             });
         }).click();
     },
+    verifyInterestRateSetTo: function(interestRate){
+        expect(interestRateInput.getAttribute("value")).toEqual(interestRate);
+    },
+    verifyInterestRateCannotBeChanged: function(){
+        expect(interestRateInput.isEnabled).toBe(false);
+    },
+    selectDayForMonthlyRepayment: function(day){
+        dayForMonthlyPaymentSelect.click();
+        browser.wait(EC.visibilityOf($(".mat-option")), 5000);
+        opt = element(by.cssContainingText('.mat-option', day));
+        browser.executeScript("arguments[0].scrollIntoView();", opt.getWebElement());
+        browser.wait(EC.elementToBeClickable(opt), 2000);
+        opt.click();
+    },
+    clickLinkTasks: function(){
+        browser.wait(EC.elementToBeClickable($("a[ng-reflect-router-link='./tasks']")), 2000);
+        $("a[ng-reflect-router-link='./tasks']").click();
+    },
+    selectCheckboxToExecuteMandatoryTask: function(){
+        browser.wait(EC.elementToBeClickable(checkboxExecuteTask), 2000);
+        checkboxExecuteTask.click();
+        expect(checkboxExecuteTask.getAttribute("class")).toMatch("mat-checkbox-checked");
+    },
+    verifyCheckboxExecuteTaskIsChecked: function(){
+        browser.wait(EC.visibilityOf(checkboxExecuteTask), 2000);
+        expect(checkboxExecuteTask.getAttribute("class")).toMatch("mat-checkbox-checked");
+    },
+    deselectCheckboxToExecuteMandatoryTask: function(){
+        expect(checkboxExecuteTask.getAttribute("class")).toMatch("mat-checkbox-checked");
+        browser.wait(EC.elementToBeClickable(checkboxExecuteTask), 2000);
+        checkboxExecuteTask.click();
+    },
+    clickButtonForAction: function(action){
+        browser.wait(EC.elementToBeClickable(continueButton.first()), 5000);
+        continueButton.filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === action;
+            });
+        }).click();
+    },
+    clickButtonForTransaction: function(action){
+        browser.wait(EC.elementToBeClickable(primaryButton.first()), 3000);
+        primaryButton.filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === action;
+            });
+        }).click();
+    },
+    verifyTransactionCharge: function(chargeName, chargeAmount){
+        browser.wait(EC.visibilityOf($("fims-case-command-confirmation-form table tbody")), 2000);
+        browser.sleep(2000);
+        expect($$("fims-case-command-confirmation-form table tbody .td-data-table-row").filter(function(elem, index){
+            return elem.$(".td-data-table-cell").getText().then(function(text){
+                return text === chargeName;
+            });
+        }).$$(".td-data-table-cell").last().getText().then(function(text){
+            return text === chargeAmount;
+        })).toBe(true);
+    }
 };
diff --git a/Pages/Loans.js b/Pages/Loans.js
index 57e9d01..8b08bdd 100644
--- a/Pages/Loans.js
+++ b/Pages/Loans.js
@@ -159,6 +159,7 @@
     },
     enterTextIntoArrearsAllowanceAccountInputField: function(text) {
         browser.executeScript("arguments[0].scrollIntoView();", arrearsAllowanceAccountInput.getWebElement());
+        browser.wait(EC.elementToBeClickable(arrearsAllowanceAccountInput), 3000);
         arrearsAllowanceAccountInput.click().sendKeys(text);
     },
     clickEnabledCreateProductButton: function(){
diff --git a/Specs/gate1.js b/Specs/gate1.js
index e05d723..bd34a5e 100644
--- a/Specs/gate1.js
+++ b/Specs/gate1.js
@@ -264,7 +264,7 @@
         Common.clickLinkShowForRowWithId(customerAccount);
         Customers.clickManageDepositAccountsForCustomer(customerAccount);
         //test might be too fast, account still PENDING here and balance 0.00 (but on leaving and coming back, everything as expected)
-        Customers.verifyStateOfDepositAccountWithIdIs(depositIdentifier, "ACTIVE");
+        Customers.verifyStateOfDepositAccountWithId(depositIdentifier, "ACTIVE");
         Common.clickLinkShowForRowWithId(depositIdentifier);
         Customers.verifyDepositAccountHasStatus("ACTIVE");
         Customers.verifyDepositAccountBalanceIs("100.00");
@@ -344,116 +344,190 @@
         Common.verifyMessagePopupIsDisplayed("Transaction successfully confirmed");
     });
     it('transaction CWDL should have been booked as expected', function () {
-    Accounting.goToAccountingViaSidePanel();
-    //verify balance on customer's account is as expected
-    Common.clickLinkShowForRowWithId("9000");
-    Common.clickLinkShowForRowWithId("9100");
-    Accounting.clickLinkShowForAccountWithName(depositName);
-    Accounting.verifyAccountInfo("Balance", "48.5");
-    Accounting.viewAccountEntriesForAccount(customerAccount + ".9100.00001");
-    Accounting.verifyTransactionTypeForRow("DEBIT", 2);
-    Accounting.verifyTransactionMessageForRow("CWDL", 2);
-    Accounting.verifyTransactionAmountForRow("1.5", 2);
-    Accounting.verifyTransactionBalanceForRow("98.5", 2);
-    Accounting.verifyTransactionTypeForRow("DEBIT", 3);
-    Accounting.verifyTransactionMessageForRow("CWDL", 3);
-    Accounting.verifyTransactionAmountForRow("50", 3);
-    Accounting.verifyTransactionBalanceForRow("48.5", 3);
-    Accounting.goToAccountingViaSidePanel();
-    Common.clickLinkShowForRowWithId("7000");
-    Common.clickLinkShowForRowWithId("7300");
-    Common.clickLinkShowForRowWithId(tellerAccount);
-    Accounting.verifyAccountInfo("Balance", "55");
-    Accounting.viewAccountEntriesForAccount(tellerAccount);
-    Accounting.verifyTransactionTypeForRow("CREDIT", 2);
-    Accounting.verifyTransactionMessageForRow("CWDL", 2);
-    Accounting.verifyTransactionAmountForRow("50", 2);
-    Accounting.verifyTransactionBalanceForRow("55", 2);
-    //revenue account - check charges have been booked as expected
-    Accounting.goToAccountingViaSidePanel();
-    Common.clickLinkShowForRowWithId("1000");
-    Common.clickLinkShowForRowWithId("1300");
-    Common.clickLinkShowForRowWithId(revenueAccount);
-    Accounting.verifyAccountInfo("Balance", "6.5");
-    Accounting.viewAccountEntriesForAccount(revenueAccount);
-    Accounting.verifyTransactionTypeForRow("CREDIT", 2);
-    Accounting.verifyTransactionMessageForRow("CWDL", 2);
-    Accounting.verifyTransactionAmountForRow("1.5", 2);
-    Accounting.verifyTransactionBalanceForRow("6.5", 2);
+        Accounting.goToAccountingViaSidePanel();
+        //verify balance on customer's account is as expected
+        Common.clickLinkShowForRowWithId("9000");
+        Common.clickLinkShowForRowWithId("9100");
+        Accounting.clickLinkShowForAccountWithName(depositName);
+        Accounting.verifyAccountInfo("Balance", "48.5");
+        Accounting.viewAccountEntriesForAccount(customerAccount + ".9100.00001");
+        Accounting.verifyTransactionTypeForRow("DEBIT", 2);
+        Accounting.verifyTransactionMessageForRow("CWDL", 2);
+        Accounting.verifyTransactionAmountForRow("1.5", 2);
+        Accounting.verifyTransactionBalanceForRow("98.5", 2);
+        Accounting.verifyTransactionTypeForRow("DEBIT", 3);
+        Accounting.verifyTransactionMessageForRow("CWDL", 3);
+        Accounting.verifyTransactionAmountForRow("50", 3);
+        Accounting.verifyTransactionBalanceForRow("48.5", 3);
+        Accounting.goToAccountingViaSidePanel();
+        Common.clickLinkShowForRowWithId("7000");
+        Common.clickLinkShowForRowWithId("7300");
+        Common.clickLinkShowForRowWithId(tellerAccount);
+        Accounting.verifyAccountInfo("Balance", "55");
+        Accounting.viewAccountEntriesForAccount(tellerAccount);
+        Accounting.verifyTransactionTypeForRow("CREDIT", 2);
+        Accounting.verifyTransactionMessageForRow("CWDL", 2);
+        Accounting.verifyTransactionAmountForRow("50", 2);
+        Accounting.verifyTransactionBalanceForRow("55", 2);
+        //revenue account - check charges have been booked as expected
+        Accounting.goToAccountingViaSidePanel();
+        Common.clickLinkShowForRowWithId("1000");
+        Common.clickLinkShowForRowWithId("1300");
+        Common.clickLinkShowForRowWithId(revenueAccount);
+        Accounting.verifyAccountInfo("Balance", "6.5");
+        Accounting.viewAccountEntriesForAccount(revenueAccount);
+        Accounting.verifyTransactionTypeForRow("CREDIT", 2);
+        Accounting.verifyTransactionMessageForRow("CWDL", 2);
+        Accounting.verifyTransactionAmountForRow("1.5", 2);
+        Accounting.verifyTransactionBalanceForRow("6.5", 2);
     });
     it('create a loan product', function () {
-    Loans.goToLoanProductsViaSidePanel();
-    Loans.clickButtonCreateLoanProduct();
-    Loans.enterTextIntoShortNameInputField(loanShortName);
-    Loans.enterTextIntoNameInputField("My loan " + loanShortName);
-    Loans.enterTextIntoDescriptionInputField("My loan " + loanShortName);
-    Loans.enterTextIntoMinimumPrincipalInputField("200");
-    Loans.enterTextIntoMaximumPrincipalInputField("1000");
-    Loans.enterTextIntoTermInputField("12");
-    Loans.clickEnabledContinueButtonForProductDetails();
-    Loans.enterTextIntoCashAccountInputField(tellerAccount);
-    Loans.enterTextIntoLoanInProcessLedgerInputField("8100");
-    Loans.enterTextIntoCustomerLoanLedgerInputField("7900");
-    Loans.enterTextIntoPendingDisbursalAccountInputField("7013");
-    Loans.clickEnabledContinueButtonForLedgerAndAccountSettings("7810");
-    Loans.enterTextIntoInterestMinimumInputField("3.50");
-    Loans.enterTextIntoIncomeAccountAccountInputField(revenueAccount);
-    Loans.enterTextIntoAccrualAccountInputField("7015");
-    Loans.clickEnabledContinueButtonForInterestSettings();
-    Loans.enterTextIntoProcessingFeeIncomeAccountInputField("1312");
-    Loans.enterTextIntoOriginatingFeeIncomeAccountInputField("1310");
-    Loans.enterTextIntoDisbursementFeeIncomeAccountInputField("1390");
-    Loans.enterTextIntoLateFeeIncomeAccountInputField("1311");
-    Loans.enterTextIntoLateFeeAccrualAccountInputField("7840");
-    Loans.clickEnabledContinueButtonForFeeIncomeAccounts("");
-    Loans.enterTextIntoArrearsAllowanceAccountInputField("3040");
-    Loans.clickEnabledCreateProductButton();
-    Common.verifyMessagePopupIsDisplayed("Product is going to be saved");
+        Loans.goToLoanProductsViaSidePanel();
+        Loans.clickButtonCreateLoanProduct();
+        Loans.enterTextIntoShortNameInputField(loanShortName);
+        Loans.enterTextIntoNameInputField("My loan " + loanShortName);
+        Loans.enterTextIntoDescriptionInputField("My loan " + loanShortName);
+        Loans.enterTextIntoMinimumPrincipalInputField("200");
+        Loans.enterTextIntoMaximumPrincipalInputField("1000");
+        Loans.enterTextIntoTermInputField("12");
+        Loans.clickEnabledContinueButtonForProductDetails();
+        Loans.enterTextIntoCashAccountInputField(tellerAccount);
+        Loans.enterTextIntoLoanInProcessLedgerInputField("8100");
+        Loans.enterTextIntoCustomerLoanLedgerInputField("7900");
+        Loans.enterTextIntoPendingDisbursalAccountInputField("7013");
+        Loans.clickEnabledContinueButtonForLedgerAndAccountSettings("7810");
+        Loans.enterTextIntoInterestMinimumInputField("3.50");
+        Loans.enterTextIntoIncomeAccountAccountInputField(revenueAccount);
+        Loans.enterTextIntoAccrualAccountInputField("7015");
+        Loans.clickEnabledContinueButtonForInterestSettings();
+        Loans.enterTextIntoProcessingFeeIncomeAccountInputField("1312");
+        Loans.enterTextIntoOriginatingFeeIncomeAccountInputField("1310");
+        Loans.enterTextIntoDisbursementFeeIncomeAccountInputField("1390");
+        Loans.enterTextIntoLateFeeIncomeAccountInputField("1311");
+        Loans.enterTextIntoLateFeeAccrualAccountInputField("7840");
+        Loans.clickEnabledContinueButtonForFeeIncomeAccounts("");
+        Loans.enterTextIntoArrearsAllowanceAccountInputField("3040");
+        Loans.clickEnabledCreateProductButton();
+        Common.verifyMessagePopupIsDisplayed("Product is going to be saved");
     });
     it('should edit charges', function (){
-    Common.clickLinkShowForRowWithId(loanShortName);
-    Loans.clickLinkManageFeesForLoanProduct(loanShortName);
-    Common.clickLinkShowForRowWithId("processing-fee");
-    Loans.clickButtonEditProcessingFeeForLoanProduct(loanShortName);
-    Loans.enterTextIntoFeeAmountInputField("3");
-    Loans.clickEnabledUpdateChargeButton();
-    Common.verifyMessagePopupIsDisplayed("Charge is going to be saved");
-    Common.clickBackButtonInTitleBar();
-    Common.clickBackButtonInTitleBar();
+        Common.clickLinkShowForRowWithId(loanShortName);
+        Loans.clickLinkManageFeesForLoanProduct(loanShortName);
+        Common.clickLinkShowForRowWithId("processing-fee");
+        Loans.clickButtonEditProcessingFeeForLoanProduct(loanShortName);
+        Loans.enterTextIntoFeeAmountInputField("3");
+        Loans.clickEnabledUpdateChargeButton();
+        Common.verifyMessagePopupIsDisplayed("Charge is going to be saved");
+        Common.clickBackButtonInTitleBar();
+        Common.clickBackButtonInTitleBar();
     });
     it('should add task', function () {
-    Loans.clickLinkManageTasksForLoanProduct(loanShortName);
-    Loans.clickButtonCreateTaskForLoanProduct(loanShortName);
-    Loans.enterTextIntoTaskIdentifierInputField(taskIdentifier);
-    Loans.enterTextIntoTaskNameInputField("Loan opening task");
-    Loans.enterTextIntoTaskDescriptionInputField("Loan opening task - mandatory");
-    Loans.checkMandatoryCheckbox();
-    Loans.clickButtonAddAction();
-    Loans.selectSecondAction("can be approved");
-    Loans.clickEnabledCreateTaskButton();
-    Common.verifyMessagePopupIsDisplayed("Task is going to be created");
-    Common.clickBackButtonInTitleBar();
+        Loans.clickLinkManageTasksForLoanProduct(loanShortName);
+        Loans.clickButtonCreateTaskForLoanProduct(loanShortName);
+        Loans.enterTextIntoTaskIdentifierInputField(taskIdentifier);
+        Loans.enterTextIntoTaskNameInputField("Loan opening task");
+        Loans.enterTextIntoTaskDescriptionInputField("Loan opening task - mandatory");
+        Loans.checkMandatoryCheckbox();
+        Loans.clickButtonAddAction();
+        Loans.selectSecondAction("can be approved");
+        Loans.clickEnabledCreateTaskButton();
+        Common.verifyMessagePopupIsDisplayed("Task is going to be created");
+        Common.clickBackButtonInTitleBar();
     });
     it('should enable the loan product', function () {
-    Loans.clickButtonEnableProduct();
-    Common.verifyMessagePopupIsDisplayed("Product is going to be enabled");
+        Loans.clickButtonEnableProduct();
+        Common.verifyMessagePopupIsDisplayed("Product is going to be enabled");
     });
     it('should assign loan product to customer', function () {
-    Customers.goToManageCustomersViaSidePanel();
-    Common.clickSearchButtonToMakeSearchInputFieldAppear();
-    Common.enterTextInSearchInputFieldAndApplySearch(customerAccount);
-    Common.verifyFirstRowOfSearchResultHasTextAsId(customerAccount);
-    Common.clickLinkShowForRowWithId(customerAccount);
-    Customers.clickManageLoanAccountsForCustomer(customerAccount);
-    Customers.clickCreateLoanAccountForCustomer(customerAccount);
-    Customers.selectProduct("My loan " + loanShortName);
-    Customers.enterTextIntoShortNameInputField(loanAccountShortName);
-    Customers.enterTextIntoPrincipalAmountInputField("5000");
-    //verify interest rate as expected and cannot be changed; currently always 0.00 (bug)
-    Customers.enterTextIntoTermInputField("12");
-    //verify correct radio button selected
-    Customers.selectDepositAccount(customerAccount + ".9100.00001(" + depositIdentifier + ")");
-    Customers.clickEnabledCreateCustomerButton();
-    Common.verifyMessagePopupIsDisplayed("Case is going to be saved");
+        Customers.goToManageCustomersViaSidePanel();
+        Common.clickSearchButtonToMakeSearchInputFieldAppear();
+        Common.enterTextInSearchInputFieldAndApplySearch(customerAccount);
+        Common.verifyFirstRowOfSearchResultHasTextAsId(customerAccount);
+        Common.clickLinkShowForRowWithId(customerAccount);
+        Customers.clickManageLoanAccountsForCustomer(customerAccount);
+        Customers.clickCreateLoanAccountForCustomer(customerAccount);
+        Customers.selectProduct("My loan " + loanShortName);
+        Customers.enterTextIntoShortNameInputField(loanAccountShortName);
+        Customers.enterTextIntoPrincipalAmountInputField("5000");
+        //verify interest rate as expected and cannot be changed
+        Customers.verifyInterestRateSetTo("3.50");
+        //Customers.verifyInterestRateCannotBeChanged();
+        Customers.enterTextIntoTermInputField("12");
+        //verify correct radio button for repay period selected, BUG
+        Customers.selectDayForMonthlyRepayment("3.");
+        Customers.selectDepositAccount(customerAccount + ".9100.00001(" + depositIdentifier + ")");
+        Customers.clickEnabledCreateCustomerLoanButton();
+        Common.verifyMessagePopupIsDisplayed("Case is going to be saved");
+        Customers.verifyStateOfLoanAccountWithId(loanAccountShortName, "CREATED");
+    });
+    it('should open the loan account - mandatory task', function () {
+        Common.clickLinkShowForRowWithId(loanAccountShortName);
+        Customers.clickLinkTasks();
+        Customers.selectCheckboxToExecuteMandatoryTask();
+        Customers.clickButtonForAction("OPEN");
+        Customers.verifyTransactionCharge("processing-fee", "150.00");
+        Customers.clickButtonForTransaction("OPEN");
+        Common.verifyMessagePopupIsDisplayed("Case is going to be updated");
+        Customers.verifyLoanAccountHasStatus("PENDING");
+    });
+    it('should approve the loan account', function () {
+        Customers.clickLinkTasks();
+        Customers.clickButtonForAction("APPROVE");
+        Customers.verifyTransactionCharge("loan-origination-fee", "50.00");
+        Customers.clickButtonForTransaction("APPROVE");
+        Common.verifyMessagePopupIsDisplayed("Case is going to be updated");
+        Customers.verifyLoanAccountHasStatus("APPROVED");
+    });
+    it('should disburse the loan', function () {
+        Customers.clickLinkTasks();
+        Customers.clickButtonForAction("DISBURSE");
+        Customers.verifyTransactionCharge("disbursement-fee", "05.00");
+        Customers.clickButtonForTransaction("DISBURSE");
+        Common.verifyMessagePopupIsDisplayed("Case is going to be updated");
+        Customers.verifyLoanAccountHasStatus("ACTIVE");
+    });
+    it('transaction should have been booked as expected', function () {
+        Accounting.goToAccountingViaSidePanel();
+        Accounting.clickLinkShowForAccountWithName("1000");
+        Accounting.clickLinkShowForAccountWithName("1300");
+        Accounting.clickLinkShowForAccountWithName("1312");
+        Accounting.viewAccountEntriesForAccount("1312");
+        Accounting.verifyTransactionTypeForRow("CREDIT", 1);
+        Accounting.verifyTransactionAmountForRow("150", 1);
+        Accounting.verifyTransactionBalanceForRow("150", 1);
+        Common.clickBackButtonInTitleBar();
+        Common.clickBackButtonInTitleBar();
+        Accounting.clickLinkShowForAccountWithName("1310");
+        Accounting.viewAccountEntriesForAccount("1310");
+        Accounting.verifyTransactionTypeForRow("CREDIT", 1);
+        Accounting.verifyTransactionAmountForRow("50", 1);
+        Accounting.verifyTransactionBalanceForRow("50", 1);
+        Common.clickBackButtonInTitleBar();
+        Common.clickBackButtonInTitleBar();
+        Accounting.clickLinkShowForAccountWithName("1313");
+        Accounting.viewAccountEntriesForAccount("1313");
+        Accounting.verifyTransactionTypeForRow("CREDIT", 1);
+        Accounting.verifyTransactionAmountForRow("5", 1);
+        Accounting.verifyTransactionBalanceForRow("5", 1);
+        Common.clickBackButtonInTitleBar();
+        Common.clickBackButtonInTitleBar();
+        Common.clickBackButtonInTitleBar();
+        Common.clickBackButtonInTitleBar();
+        Accounting.clickLinkShowForAccountWithName("9000");
+        Accounting.clickLinkShowForAccountWithName("9100");
+        Accounting.clickLinkShowForAccountWithName(depositName);
+        Accounting.viewAccountEntriesForAccount(depositName);
+        Accounting.verifyTransactionTypeForRow("DEBIT", 4);
+        Accounting.verifyTransactionAmountForRow("150", 4);
+        Accounting.verifyTransactionBalanceForRow("101.5", 4);
+        Accounting.verifyTransactionTypeForRow("DEBIT", 5);
+        Accounting.verifyTransactionAmountForRow("50", 5);
+        Accounting.verifyTransactionBalanceForRow("-151.5", 5);
+        Accounting.verifyTransactionTypeForRow("DEBIT", 6);
+        Accounting.verifyTransactionAmountForRow("5", 6);
+        Accounting.verifyTransactionBalanceForRow("-156.5", 6);
+        Accounting.verifyTransactionTypeForRow("CREDIT", 7);
+        Accounting.verifyTransactionAmountForRow("5000", 7);
+        Accounting.verifyTransactionBalanceForRow("4843.5", 7);
     });
 });
\ No newline at end of file
