Protractor tests.
diff --git a/Pages/Accounting b/Pages/Accounting
index aea7be6..f176446 100644
--- a/Pages/Accounting
+++ b/Pages/Accounting
@@ -27,10 +27,10 @@
         link = "/accounting/accounts/detail/" + accountIdentifier + "/entries";
         browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
         $('a[href="'+ link + '"]').click();
-        browser.sleep(2000);
+        browser.sleep(1000);
     },
     clickLinkShowForAccountWithName: function(identifier) {
-        browser.sleep(2000);
+        browser.sleep(1000);
         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/Common.js b/Pages/Common.js
index 838b8d8..6f9bb76 100644
--- a/Pages/Common.js
+++ b/Pages/Common.js
@@ -17,7 +17,7 @@
         expect($(".td-data-table-row .td-data-table-cell").getText()).toEqual(text);
     },
     waitForThePageToFinishLoading: function(){
-        browser.wait(EC.not(EC.presenceOf($('.td-loading'))), 10000);
+        browser.wait(EC.not(EC.presenceOf($('.td-loading'))), 5000);
     },
     clickLinkShowForFirstRowInTable: function() {
         browser.wait(EC.visibilityOf($("tr td.td-data-table-cell button")), 5000);
@@ -28,8 +28,8 @@
         $$(".mat-toolbar .mat-toolbar-row .mat-icon-button").get(2).click();
     },
     clickLinkShowForRowWithId: function(identifier) {
-        browser.sleep(2000);
         browser.wait(EC.invisibilityOf($("div[class='md-padding'] h3")), 5000);
+        browser.sleep(1000);
         browser.wait(EC.textToBePresentInElement($$("tbody tr .td-data-table-cell").last(), "SHOW"), 5000);
         $$('tbody tr').filter(function (elem, index) {
             return elem.$(".td-data-table-cell").getText().then(function (text) {
diff --git a/Pages/Customers.js b/Pages/Customers.js
index 46e0f44..ba6b7d2 100644
--- a/Pages/Customers.js
+++ b/Pages/Customers.js
@@ -17,183 +17,219 @@
 var mobileInput = $(".mat-input-infix input[formcontrolname='mobile']");
 var linkCustomers = $$("a[href='/customers']");
 var titleRow = $("fims-layout-card-over .mat-toolbar-row div");
-var depositProductSelect = $("md-select[formcontrolname='productIdentifier']");
+var productSelect = $("md-select[formcontrolname='productIdentifier']");
 var beneficiaryInput = $("td-chips[formcontrolname='beneficiaries'] input");
 var primaryButton =  $(".mat-raised-button.mat-primary");
 var continueButton = $$(".mat-raised-button.mat-accent");
-var beneficiaryInput = $("td-chips[formcontrolname='beneficiaries'] input");
+var shortNameInput = $("fims-id-input[controlname='identifier'] input");
+var principalAmountInput = $("fims-number-input[controlname='principalAmount'] input");
+var termInput = $("input[formcontrolname='term']");
+var paymentPeriod = $("input[formcontrolname='paymentPeriod']");
+var depositAccountSelect = $("md-select[formcontrolname='depositAccountIdentifier'] .mat-select-trigger");
+
 
 module.exports = {
-    verifyCardHasTitleManageCustomers: function() {
+    verifyCardHasTitleManageCustomers: function () {
         browser.wait(EC.textToBePresentInElement(titleRow, 'Manage customers'), 5000);
     },
-    verifyCardHasTitleCreateCustomer: function() {
-        form_title=$("fims-layout-card-over .mat-toolbar-row div").getText();
+    verifyCardHasTitleCreateCustomer: function () {
+        form_title = $("fims-layout-card-over .mat-toolbar-row div").getText();
         expect(form_title).toEqual("Create new customer");
     },
-    enterTextIntoAccountInputField: function(text) {
+    enterTextIntoAccountInputField: function (text) {
         accountInput.click().sendKeys(text);
     },
-    enterTextIntoFirstNameInputField: function(text) {
+    enterTextIntoFirstNameInputField: function (text) {
         firstNameInput.click().sendKeys(text);
     },
-    enterTextIntoMiddleNameInputField: function(text){
+    enterTextIntoMiddleNameInputField: function (text) {
         middleNameInput.click().sendKeys(text);
     },
-    enterTextIntoLastNameInputField: function(text) {
+    enterTextIntoLastNameInputField: function (text) {
         lastNameInput.click().sendKeys(text);
     },
-   enterTextIntoDayOfBirthInputField: function(){
+    enterTextIntoDayOfBirthInputField: function () {
         birthDayInput.click().sendKeys(protractor.Key.ARROW_LEFT);
         birthDayInput.sendKeys(protractor.Key.ARROW_LEFT);
         birthDayInput.sendKeys("991978");
 
     },
-    enterTextIntoStreetInputField: function(text) {
-        browser.wait(EC.elementToBeClickable(streetInput),3000);
+    enterTextIntoStreetInputField: function (text) {
+        browser.wait(EC.elementToBeClickable(streetInput), 3000);
         streetInput.click().sendKeys(text);
     },
-    enterTextIntoCityInputField: function(text) {
+    enterTextIntoCityInputField: function (text) {
         cityInput.click().sendKeys(text);
     },
-    enterTextIntoEmailInputField: function(text) {
+    enterTextIntoEmailInputField: function (text) {
         emailInput.click().sendKeys(text);
     },
-    enterTextIntoPhoneInputField: function(text) {
+    enterTextIntoPhoneInputField: function (text) {
         phoneInput.click().sendKeys(text);
     },
-    enterTextIntoMobileInputField: function(text) {
+    enterTextIntoMobileInputField: function (text) {
         mobileInput.click().sendKeys(text);
     },
-    clickEnabledContinueButtonForCustomerDetails: function(){
+    clickEnabledContinueButtonForCustomerDetails: function () {
         browser.wait(EC.elementToBeClickable(continueButton.get(0)), 5000);
         expect(continueButton.get(0).isEnabled()).toBeTruthy();
         continueButton.get(0).click();
     },
-    clickEnabledContinueButtonForCustomerAddress: function(){
+    clickEnabledContinueButtonForCustomerAddress: function () {
         browser.wait(EC.elementToBeClickable(continueButton.get(1)), 5000);
         expect(continueButton.get(1).isEnabled()).toBeTruthy();
         continueButton.get(1).click();
     },
-    clickEnabledContinueButtonForCustomerContact: function(){
+    clickEnabledContinueButtonForCustomerContact: function () {
         browser.wait(EC.elementToBeClickable(continueButton.get(2)), 5000);
         expect(continueButton.get(2).isEnabled()).toBeTruthy();
         continueButton.get(2).click();
     },
-    clickEnabledCreateCustomerButton: function(){
+    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();
     },
-    clickButtonOrLinkCreateNewCustomer: function(){
+    clickButtonOrLinkCreateNewCustomer: function () {
         browser.wait(EC.visibilityOf($("a[href='/customers/create']")), 5000);
         $("a[href='/customers/create']").click();
     },
-    selectCountryByIndex: function(i){
+    selectCountryByIndex: function (i) {
         countrySelect.click();
         element.all(by.css('.mat-option')).get(i).click();
     },
-    selectCountryByName: function(name){
+    selectCountryByName: function (name) {
         countrySelect.click();
-        element(by.cssContainingText('.mat-option',name)).click();
+        element(by.cssContainingText('.mat-option', name)).click();
     },
-    goToManageCustomersViaSidePanel: function() {
+    goToManageCustomersViaSidePanel: function () {
         browser.wait(EC.visibilityOf(linkCustomers.first()), 5000);
         linkCustomers.first().click();
     },
-    clickViewCustomersFromQuickAccess: function() {
+    clickViewCustomersFromQuickAccess: function () {
         browser.wait(EC.visibilityOf(linkCustomers.get(1)), 5000);
         linkCustomer.get(1).click();
     },
-    verifyCustomerHasStatusInactive: function(){
+    verifyCustomerHasStatusInactive: function () {
         browser.wait(EC.visibilityOf($("td-message")), 2000);
         color = $("td-message").getAttribute("color");
         message = $("td-message .td-message-label").getText();
         expect(color).toEqual("warn");
         expect(message).toContain("Customer not active");
     },
-    clickButtonGoToTasks: function(){
+    clickButtonGoToTasks: function () {
         browser.wait(EC.elementToBeClickable($("td-message button")), 2000);
         $("td-message button").click();
     },
-    clickButtonActivate: function(){
+    clickButtonActivate: function () {
         browser.wait(EC.elementToBeClickable($(".mat-raised-button.mat-accent")), 2000);
         $(".mat-raised-button.mat-accent").click();
     },
-    verifyCustomerHasStatusActive: function(){
+    verifyCustomerHasStatusActive: function () {
         browser.wait(EC.visibilityOf($("fims-state-display")), 2000);
         status = $("fims-state-display .mat-list-text .mat-line").getText();
         expect(status).toEqual("ACTIVE");
     },
-    clickManageDepositAccountsForCustomer: function(customer){
+    clickManageDepositAccountsForCustomer: function (customer) {
         link = "/customers/detail/" + customer + "/deposits";
-        browser.wait(EC.elementToBeClickable($('a[href="'+ link + '"]')), 6000);
-        $('a[href="'+ link + '"]').click();
+        browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 6000);
+        $('a[href="' + link + '"]').click();
     },
-    clickCreateDepositAccountForCustomer: function(customer){
+    clickManageLoanAccountsForCustomer: function (customer) {
+        link = "/customers/detail/" + customer + "/loans";
+        browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 6000);
+        $('a[href="' + link + '"]').click();
+    },
+    clickCreateDepositAccountForCustomer: function (customer) {
         link = "/customers/detail/" + customer + "/deposits/create";
-        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
-        $('a[href="'+ link + '"]').click();
+        browser.wait(EC.visibilityOf($('a[href="' + link + '"]')));
+        $('a[href="' + link + '"]').click();
     },
-    selectDepositProduct: function(depositProductName){
-        depositProductSelect.click();
+    clickCreateLoanAccountForCustomer: function (customer) {
+        link = "/customers/detail/" + customer + "/loans/create";
+        browser.wait(EC.visibilityOf($('a[href="' + link + '"]')));
+        $('a[href="' + link + '"]').click();
+    },
+    selectProduct: function (productName) {
+        browser.wait(EC.visibilityOf(productSelect), 2000);
+        productSelect.click();
         browser.wait(EC.visibilityOf($(".mat-option")), 5000);
-        opt =  element(by.cssContainingText('.mat-option', depositProductName));
+        opt = element(by.cssContainingText('.mat-option', productName));
         browser.executeScript("arguments[0].scrollIntoView();", opt.getWebElement());
         browser.wait(EC.elementToBeClickable(opt), 2000);
         opt.click();
     },
-    clickEnabledButtonCreateDepositAccount: function(){
+    clickEnabledButtonCreateDepositAccount: function () {
         browser.wait(EC.elementToBeClickable($(".mat-raised-button.mat-primary")), 5000);
         expect($(".mat-raised-button.mat-primary").isEnabled()).toBeTruthy();
         $(".mat-raised-button.mat-primary").click();
     },
-    verifyDepositAccountHasStatus: function(expectedStatus){
+    verifyDepositAccountHasStatus: function (expectedStatus) {
         browser.wait(EC.visibilityOf($("fims-state-display")), 2000);
         status = $("fims-state-display .mat-list-text .mat-line").getText();
         expect(status).toEqual(expectedStatus);
     },
-    clickButtonEditDepositAccount: function(customer, depositAccountIdentifier) {
-        link = "/customers/detail/" + customer + "/deposits/detail/" + depositAccountIdentifier + "/edit" ;
+    clickButtonEditDepositAccount: function (customer, depositAccountIdentifier) {
+        link = "/customers/detail/" + customer + "/deposits/detail/" + depositAccountIdentifier + "/edit";
         browser.wait(EC.visibilityOf($('a[href="' + link + '"]')), 2000);
         $('a[href="' + link + '"]').click();
     },
 
-    verifyDepositAccountBalanceIs: function(expectedBalance){
-        $$("fims-layout-card-over .mat-list-item .mat-list-text").filter(function(elem, index) {
-            return elem.$("h3").getText().then(function(text) {
-                    return text === "Balance";
+    verifyDepositAccountBalanceIs: function (expectedBalance) {
+        $$("fims-layout-card-over .mat-list-item .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Balance";
             });
-        }).$$("p").first().getText().then(function(text){
+        }).$$("p").first().getText().then(function (text) {
             return text === expectedBalance;
         });
     },
-    // getDepositAccountIdentifier: function(){
-    //     depAccount = $$("fims-layout-card-over .mat-list-item .mat-list-text").filter(function(elem, index) {
-    //         return elem.$("h3").getText().then(function(text) {
-    //             return text === "Account";
-    //         });
-    //     }).$$("p").first().getText().then(function(text){
-    //         return text;
-    //     });
-    //     return depAccount;
-    // },
-    // getDepositAccountIdentifier: function(){
-    //     return $$("md-list p").first().getText();
-    // },
-    verifyStateOfDepositAccountWithIdIs: function(identifier, expectedState) {
+    verifyStateOfDepositAccountWithIdIs: 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) {
+        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);
     },
-    verifyIsMemberCheckboxSelected: function() {
+    verifyIsMemberCheckboxSelected: function () {
         expect(memberCheckbox.getAttribute("class")).toMatch("mat-checkbox-checked");
     },
-};
\ No newline at end of file
+    enterTextIntoShortNameInputField: function (text) {
+        browser.wait(EC.elementToBeClickable(shortNameInput), 3000);
+        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.sendKeys(text);
+    },
+    enterTextIntoTermInputField: function (text) {
+        termInput.click().clear().sendKeys(text);
+    },
+    selectDepositAccount: function (depositAccount) {
+        browser.executeScript("arguments[0].scrollIntoView();", depositAccountSelect.getWebElement());
+        browser.wait(EC.visibilityOf(depositAccountSelect), 2000);
+        productSelect.click();
+        browser.wait(EC.visibilityOf($(".mat-option")), 5000);
+        opt = element(by.cssContainingText('.mat-option', depositAccount));
+        browser.executeScript("arguments[0].scrollIntoView();", opt.getWebElement());
+        browser.wait(EC.elementToBeClickable(opt), 2000);
+        opt.click();
+    },
+    clickEnabledCreateCustomerLoanButton: function(){
+        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 LOAN";
+            });
+        }).click();
+    },
+};
diff --git a/Pages/Loans.js b/Pages/Loans.js
index 08d15bf..56dfab9 100644
--- a/Pages/Loans.js
+++ b/Pages/Loans.js
@@ -7,9 +7,9 @@
 var createLoan = $("a[href='/loans/create']");
 var shortNameInput = $("fims-id-input[controlname='identifier'] input");
 var nameInput = $(".mat-input-infix input[formcontrolname='name']");
-var descriptionInput = $(".mat-input-infix input[formcontrolname='description']");
-var minimumPrincipalInput = $("fims-min-max[mincontrolname='minimumBalance']");
-var maximumPrincipalInput = $("fims-min-max[maxcontrolname='maximumBalance']");
+var descriptionInput = $(".mat-input-infix textarea[formcontrolname='description']");
+var minimumPrincipalInput = $("fims-min-max input[placeholder='Minimum principal amount']");
+var maximumPrincipalInput = $("fims-min-max input[placeholder='Maximum principal amount']");
 var currencySelect = $("md-select[formcontrolname='currencyCode']");
 var termInput = $(".mat-input-infix input[formcontrolname='term']");
 var radioWeeks = $$("md-radio-group .mat-radio-button").first();
@@ -21,10 +21,32 @@
 var customerLoanLedgerInput = $("fims-ledger-select[formcontrolname='customerLoanLedger'] input");
 var pendingDisbursalAccountInput = $("fims-account-select[formcontrolname='pendingDisbursal'] input");
 
-var interestMinimumInput = $("fims-number-input[formcontrolname='minimum'] input");
+var interestMinimumInput = $("fims-number-input[controlname='minimum'] input");
 var incomeAccountInput = $("fims-account-select[formcontrolname='incomeAccount'] input");
 var accrualAccountInput = $("fims-account-select[formcontrolname='accrualAccount'] input");
 
+var processingFeeIncomeAccountInput = $("fims-account-select[formcontrolname='processingFeeAccount'] input");
+var originationFeeIncomeAccountInput = $("fims-account-select[formcontrolname='originationFeeAccount'] input");
+var disbursementFeeIncomeAccountInput = $("fims-account-select[formcontrolname='disbursementFeeAccount'] input");
+var lateFeeIncomeAccountInput = $("fims-account-select[formcontrolname='lateFeeIncomeAccount'] input");
+var lateFeeAccrualAccountInput = $("fims-account-select[formcontrolname='lateFeeAccrualAccount'] input");
+
+var arrearsAllowanceAccountInput = $("fims-account-select[formcontrolname='account'] input");
+
+var primaryButton = $$(".mat-raised-button.mat-primary");
+
+var feeAmountInput = $("input[formcontrolname='amount']");
+var feeProportionalToSelect = $("md-select[formcontrolname='proportionalTo'] .mat-select-trigger");
+var radioFixed = $$("md-radio-group[formcontrolname='chargeMethod'] md-radio-button").get(0);
+var radioProportional = $$("md-radio-group[formcontrolname='chargeMethod'] md-radio-button").get(1);
+
+var taskIdentifierInput = $("fims-id-input[controlname='identifier'] input");
+var taskNameInput = $(".mat-input-infix input[formcontrolname='name']");
+var taskDescriptionInput = $(".mat-input-infix textarea[formcontrolname='description']");
+var mandatoryCheckbox = $("md-checkbox[formcontrolname='mandatory']");
+var fourEyesCheckbox = $("md-checkbox[formcontrolname='fourEyes']");
+var actionSelect1 = $("md-select[formcontrolname='action'] .mat-select-trigger");
+var actionSelect2 = $$("md-select[formcontrolname='action'] .mat-select-trigger").get(1);
 
 module.exports = {
     goToLoanProductsViaSidePanel: function() {
@@ -49,6 +71,7 @@
         descriptionInput.click().sendKeys(text);
     },
     enterTextIntoMinimumPrincipalInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", minimumPrincipalInput.getWebElement());
         minimumPrincipalInput.click().sendKeys(protractor.Key.ARROW_LEFT);
         minimumPrincipalInput.sendKeys(protractor.Key.ARROW_LEFT);
         minimumPrincipalInput.sendKeys(protractor.Key.ARROW_LEFT);
@@ -66,11 +89,11 @@
     },
     enterTextIntoTermInputField: function(text) {
         browser.executeScript("arguments[0].scrollIntoView();", termInput.getWebElement());
-        termInput.click().sendKeys(text);
+        termInput.click().clear().sendKeys(text);
     },
     enterTextIntoCashAccountInputField: function(text) {
-        browser.wait(EC.visibilityOf(shortNameInput), 5000);
         browser.executeScript("arguments[0].scrollIntoView();", cashAccountInput.getWebElement());
+        browser.wait(EC.visibilityOf(cashAccountInput), 5000);
         cashAccountInput.click().sendKeys(text);
     },
     enterTextIntoLoanInProcessLedgerInputField: function(text) {
@@ -83,7 +106,8 @@
         pendingDisbursalAccountInput.click().sendKeys(text);
     },
     enterTextIntoInterestMinimumInputField: function(text) {
-        browser.wait(EC.visibilityOf(interestMinimumInput), 5000);
+        browser.executeScript("arguments[0].scrollIntoView();", interestMinimumInput.getWebElement());
+        browser.wait(EC.elementToBeClickable(interestMinimumInput), 5000);
         interestMinimumInput.click().clear().sendKeys(text);
     },
     enterTextIntoIncomeAccountAccountInputField: function(text) {
@@ -106,5 +130,138 @@
         browser.executeScript("arguments[0].scrollIntoView();", $$(".mat-raised-button").get(2).getWebElement());
         expect($$(".mat-raised-button").get(2).isEnabled()).toBeTruthy();
         $$(".mat-raised-button").get(2).click();
-    }
+    },
+    clickEnabledContinueButtonForFeeIncomeAccounts: function(){
+        browser.executeScript("arguments[0].scrollIntoView();", $$(".mat-raised-button").get(3).getWebElement());
+        expect($$(".mat-raised-button").get(3).isEnabled()).toBeTruthy();
+        $$(".mat-raised-button").get(3).click();
+    },
+    enterTextIntoProcessingFeeIncomeAccountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", processingFeeIncomeAccountInput.getWebElement());
+        browser.wait(EC.elementToBeClickable(processingFeeIncomeAccountInput), 2000);
+        processingFeeIncomeAccountInput.click().sendKeys(text);
+    },
+    enterTextIntoOriginatingFeeIncomeAccountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", originationFeeIncomeAccountInput.getWebElement());
+        originationFeeIncomeAccountInput.click().sendKeys(text);
+    },
+    enterTextIntoDisbursementFeeIncomeAccountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", disbursementFeeIncomeAccountInput.getWebElement());
+        disbursementFeeIncomeAccountInput.click().sendKeys(text);
+    },
+    enterTextIntoLateFeeIncomeAccountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", lateFeeIncomeAccountInput.getWebElement());
+        lateFeeIncomeAccountInput.click().sendKeys(text);
+    },
+    enterTextIntoLateFeeAccrualAccountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", lateFeeAccrualAccountInput.getWebElement());
+        lateFeeAccrualAccountInput.click().sendKeys(text);
+    },
+    enterTextIntoArrearsAllowanceAccountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", arrearsAllowanceAccountInput.getWebElement());
+        arrearsAllowanceAccountInput.click().sendKeys(text);
+    },
+    clickEnabledCreateProductButton: function(){
+        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 PRODUCT";
+            });
+        }).click();
+    },
+    clickLinkManageFeesForLoanProduct: function(identifier){
+        link = "/loans/detail/" + identifier + "/charges";
+        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
+        $('a[href="'+ link + '"]').click();
+    },
+    clickButtonEditProcessingFeeForLoanProduct: function(identifier){
+        link = "/loans/detail/" + identifier + "/charges/detail/processing-fee/edit";
+        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
+        $('a[href="'+ link + '"]').click();
+    },
+    clickLinkManageTasksForLoanProduct: function(identifier){
+        link = "/loans/detail/" + identifier + "/tasks";
+        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
+        $('a[href="'+ link + '"]').click();
+    },
+    clickButtonCreateTaskForLoanProduct: function(identifier){
+        link = "/loans/detail/" + identifier + "/tasks/create";
+        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
+        $('a[href="'+ link + '"]').click();
+    },
+    enterTextIntoFeeAmountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", feeAmountInput.getWebElement());
+        browser.wait(EC.visibilityOf(feeAmountInput), 5000);
+        feeAmountInput.click().clear().sendKeys(text);
+    },
+    clickEnabledUpdateChargeButton: function(){
+        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 === "UPDATE CHARGE";
+            });
+        }).click();
+    },
+    enterTextIntoTaskIdentifierInputField: function(text) {
+        browser.wait(EC.visibilityOf(taskIdentifierInput), 5000);
+        taskIdentifierInput.click().sendKeys(text);
+    },
+    enterTextIntoTaskNameInputField: function(text) {
+        taskNameInput.click().sendKeys(text);
+    },
+    enterTextIntoTaskDescriptionInputField: function(text) {
+        taskDescriptionInput.click().sendKeys(text);
+    },
+    checkMandatoryCheckbox: function(){
+        mandatoryCheckbox.click();
+    },
+    checkFourEyesCheckbox: function(){
+        fourEyesCheckbox.click();
+    },
+    clickButtonAddAction: function(){
+        $$("fims-layout-card-over button.mat-button").filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === "Add action";
+            });
+        }).click();
+    },
+    clickButtonCancel: function(){
+        $$("fims-layout-card-over button.mat-button").filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === "Cancel";
+            });
+        }).click();
+    },
+    clickFirstRemoveButton: function(){
+        $$("fims-layout-card-over button.mat-button").filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === "Remove";
+            });
+        }).click();
+    },
+    clickEnabledCreateTaskButton: function(){
+        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 TASK";
+            });
+        }).click();
+    },
+    selectFirstAction: function(action){
+        actionSelect1.click();
+        browser.wait(EC.visibilityOf($(".mat-option")), 5000);
+        element(by.cssContainingText('.mat-option', action)).click();
+    },
+    selectSecondAction: function(action){
+            actionSelect2.click();
+            browser.wait(EC.visibilityOf($(".mat-option")), 5000);
+            element(by.cssContainingText('.mat-option', action)).click();
+    },
+    clickButtonEnableProduct: function(){
+        browser.wait(EC.elementToBeClickable($("td-message button")), 2000);
+        $("td-message button").click();
+    },
 };
\ No newline at end of file
diff --git a/Specs/gate1.js b/Specs/gate1.js
index d546dce..e05d723 100644
--- a/Specs/gate1.js
+++ b/Specs/gate1.js
@@ -43,6 +43,8 @@
     tellerAccount = helper.getRandomString(4);
     revenueAccount = helper.getRandomString(4);
     loanShortName = helper.getRandomString(6);
+    taskIdentifier = helper.getRandomString(3);
+    loanAccountShortName =  helper.getRandomString(4);
 
     it('should create a new administrator role', function () {
         Common.waitForThePageToFinishLoading();
@@ -224,7 +226,7 @@
         Common.clickLinkShowForRowWithId(customerAccount);
         Customers.clickManageDepositAccountsForCustomer(customerAccount);
         Customers.clickCreateDepositAccountForCustomer(customerAccount);
-        Customers.selectDepositProduct(depositName);
+        Customers.selectProduct(depositName);
         Customers.clickEnabledButtonCreateDepositAccount();
         Common.verifyMessagePopupIsDisplayed("Deposit account is going to be saved");
         //might not be in list immediately always
@@ -384,6 +386,7 @@
     Loans.clickButtonCreateLoanProduct();
     Loans.enterTextIntoShortNameInputField(loanShortName);
     Loans.enterTextIntoNameInputField("My loan " + loanShortName);
+    Loans.enterTextIntoDescriptionInputField("My loan " + loanShortName);
     Loans.enterTextIntoMinimumPrincipalInputField("200");
     Loans.enterTextIntoMaximumPrincipalInputField("1000");
     Loans.enterTextIntoTermInputField("12");
@@ -393,11 +396,64 @@
     Loans.enterTextIntoCustomerLoanLedgerInputField("7900");
     Loans.enterTextIntoPendingDisbursalAccountInputField("7013");
     Loans.clickEnabledContinueButtonForLedgerAndAccountSettings("7810");
-    Loans.enterTextIntoInterestMinimumInputField("3.5");
+    Loans.enterTextIntoInterestMinimumInputField("3.50");
     Loans.enterTextIntoIncomeAccountAccountInputField(revenueAccount);
-    Loans.enterTextIntoAccrualAccountInputField();
+    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");
     });
-
-    //assign loan to customer
-
+    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();
+    });
+    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();
+    });
+    it('should enable the loan product', function () {
+    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");
+    });
 });
\ No newline at end of file
diff --git a/conf.js b/conf.js
index ff0655f..6129d01 100644
--- a/conf.js
+++ b/conf.js
@@ -9,7 +9,7 @@
       'Specs/gate1.js'
   ],
     directConnect: true,
-    allScriptsTimeout: 15000,
+    allScriptsTimeout: 25000,
     capabilities: {
         browserName: 'chrome',
         chromeOptions: {