diff --git a/Pages/CustomerLoans.js b/Pages/CustomerLoans.js
index 7ee4eff..3f23c2b 100644
--- a/Pages/CustomerLoans.js
+++ b/Pages/CustomerLoans.js
@@ -13,7 +13,7 @@
 var termInput = $("fims-text-input[controlname='term'] input");
 var termSelect = $("mat-select[formcontrolname='termTemporalUnit'] .mat-select-trigger");
 var paymentPeriod = $("fims-text-input[controlname='paymentPeriod'] input");
-var paymentPeriodSelect = $("mat-select[formcontrolname='termTemporalUnit'] .mat-select-trigger");
+var paymentPeriodSelect = $("mat-select[formcontrolname='paymentTemporalUnit'] .mat-select-trigger");
 var depositAccountSelect = $("mat-select[formcontrolname='depositAccountIdentifier'] .mat-select-trigger");
 //if "Repay every" is set to "months"
 var radioMonthSetting1 = $$("mat-radio-group[formcontrolname='monthSetting'] mat-radio-button").get(0);
@@ -40,6 +40,10 @@
 
 //Co-signer
 var memberSelect = $("fims-customer-select[formcontrolname='customerIdentifier'] input");
+var descriptionInputsDebtCosigner = $$("fims-case-credit-factor-form").get(2).$$("fims-text-input[controlname='description'] input");
+var amountInputsDebtCosigner = $$("fims-case-credit-factor-form").get(2).$$("fims-text-input[controlname='amount'] input");
+var descriptionInputsIncomeCosigner = $$("fims-case-credit-factor-form").get(3).$$("fims-text-input[controlname='description'] input");
+var amountInputsIncomeCosigner = $$("fims-case-credit-factor-form").get(3).$$("fims-text-input[controlname='amount'] input");
 
 //Documents
 var descriptionInputsDocs = $$("fims-case-documents-form fims-text-input[controlname='description'] input");
@@ -114,6 +118,10 @@
         interestRateInput.sendKeys(protractor.Key.BACK_SPACE);
         interestRateInput.sendKeys(text);
     },
+    verifyInterestRateInputFieldIsDisabledAndHasText: function (text) {
+        expect(interestRateInput.isEnabled()).toBe(false);
+        expect(interestRateInput.getAttribute("value")).toEqual(text);
+    },
     verifyLoanAccountNotOfferedForSelection: function(accountIdentifier){
         browser.wait(EC.elementToBeClickable(productSelect), 3000);
         productSelect.click();
@@ -250,6 +258,7 @@
         browser.sleep(100);
         browser.wait(EC.elementToBeClickable($$(".td-step-label").get(2)), 3000);
         $$(".td-step-label").get(2).click();
+        browser.sleep(1000);
     },
     goToStepDocuments: function(){
         browser.sleep(100);
@@ -290,7 +299,7 @@
             return elem.$("span").getText().then(function(text) {
                 return text === "ADD DEBT";
             });
-        }).click();
+        }).first().click();
     },
     clickButtonAddIncome: function(){
         browser.sleep(200);
@@ -298,7 +307,7 @@
             return elem.$("span").getText().then(function(text) {
                 return text === "ADD INCOME";
             });
-        }).click();
+        }).first().click();
     },
     removeDebtAtPosition: function(position){
         buttons.filter(function(elem, index) {
@@ -343,6 +352,22 @@
         browser.wait(EC.elementToBeClickable(memberSelect), 5000);
         memberSelect.click().clear().sendKeys(text);
     },
+    enterTextDescriptionInputFieldForDebtCosigner: function(text, number) {
+        browser.wait(EC.visibilityOf(descriptionInputsDebtCosigner.get(number-1)), 2000)
+        descriptionInputsDebtCosigner.get(number-1).clear().click().sendKeys(text);
+    },
+    enterTextIntoAmountInputFieldForDebtCosigner: function(text, number) {
+        browser.wait(EC.visibilityOf(amountInputsDebtCosigner.get(number-1)), 2000)
+        amountInputsDebtCosigner.get(number-1).clear().click().sendKeys(text);
+    },
+    enterTextIntoDescriptionInputFieldForIncomeCosigner: function(text, number) {
+        browser.wait(EC.visibilityOf(descriptionInputsIncomeCosigner.get(number-1)), 2000)
+        descriptionInputsIncomeCosigner.get(number-1).clear().click().sendKeys(text);
+    },
+    enterTextIntoAmountInputFieldForIncomeCosigner: function(text, number) {
+        browser.wait(EC.visibilityOf(amountInputsIncomeCosigner.get(number-1)), 2000)
+        amountInputsIncomeCosigner.get(number-1).clear().click().sendKeys(text);
+    },
     clickButtonAddDocument: function(){
         browser.sleep(200);
         buttons.filter(function(elem, index) {
@@ -369,6 +394,7 @@
         $('a[href="' + link + '"]').click();
         browser.wait(EC.visibilityOf($("fims-layout-card-over")), 2000);
     },
+    //table
     verifyPrincipalForLoanAccountInRow: function(principalAmount, row){
         browser.wait(EC.visibilityOf($("table tbody")), 3000);
         expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(1).getText()).toEqual(principalAmount);
@@ -381,10 +407,110 @@
         browser.wait(EC.visibilityOf($("table tbody")), 3000);
         expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(3).getText()).toEqual(status);
     },
+    //details single loan
+    verifyLoanStatusIs: function(expectedStatus){
+        browser.wait(EC.visibilityOf($("fims-state-display")), 5000);
+        status = $("fims-state-display .mat-list-text .mat-line").getText();
+        expect(status).toEqual(expectedStatus);
+    },
+    verifyPrincipalAmountForLoan: function(principalAmount) {
+        expect($$("fims-layout-card-over .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Principal amount";
+            });
+        }).first().$("p").getText().then(function (text) {
+            return text === principalAmount;
+        })).toBe(true);
+    },
+    verifyInterestForLoan: function(interest) {
+        expect($$("fims-layout-card-over .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Interest";
+            });
+        }).first().$("p").getText().then(function (text) {
+            return text === interest;
+        })).toBe(true);
+    },
+    verifyPaymentCycleForLoan: function(cycle) {
+        expect($$("fims-layout-card-over .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Payment cycle";
+            });
+        }).first().$("p").getText().then(function (text) {
+            return text === cycle;
+        })).toBe(true);
+    },
+    verifyTermForLoan: function(term) {
+        expect($$("fims-layout-card-over .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Term";
+            });
+        }).first().$("p").getText().then(function (text) {
+            return text === term;
+        })).toBe(true);
+    },
+    verifyMemberDepositAccountForLoan: function(account) {
+        expect($$("fims-layout-card-over .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Member deposit account";
+            });
+        }).first().$("p").getText().then(function (text) {
+            return text === account;
+        })).toBe(true);
+    },
+    verifyCreatedByForLoanIs: function(createdBy){
+        expect($$("fims-layout-card-over .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Created by";
+            });
+        }).first().$("p").getText().then(function (text) {
+            return text.indexOf(createdBy) >= 0;
+        })).toBe(true);
+    },
+    verifyLastModifiedByForLoanIs: function(modifiedBy){
+        expect($$("fims-layout-card-over .mat-list-text").filter(function (elem, index) {
+            return elem.$("h3").getText().then(function (text) {
+                return text === "Last modified by";
+            });
+        }).first().$("p").getText().then(function (text) {
+            return text.indexOf(modifiedBy) >= 0;
+        })).toBe(true);
+    },
     verifyMemberRatioIs:function (text){
         expect($$("mat-tab-header div[role='tab']").get(0).getText()).toMatch("Member(Ratio: " + text + ")");
     },
     verifyCoSignerRatioIs:function (text){
         expect($$("mat-tab-header div[role='tab']").get(1).getText()).toEqual("Co-signer(Ratio: " + text + ")");
+    },
+    verifyPrincipalInputFieldHasError: function(errorMessage) {
+        $("fims-case-detail-form").click();
+        browser.wait(EC.textToBePresentInElement($("mat-error"), errorMessage), 2000);
+        expect(principalAmountInput.element(by.xpath("..")).element(by.xpath("..")).element(by.xpath("..")).$("mat-error").getText()).toMatch(errorMessage);
+    },
+    verifyInterestRateInputFieldHasError: function(errorMessage) {
+        $("fims-case-detail-form").click();
+        browser.wait(EC.textToBePresentInElement($("mat-error"), errorMessage), 2000);
+        expect(interestRateInput.element(by.xpath("..")).element(by.xpath("..")).element(by.xpath("..")).$("div div mat-error").getText()).toEqual(errorMessage);
+    },
+    verifyTermInputFieldHasErrorForInvalidTerm: function(errorMessage) {
+        $("fims-case-detail-form").click();
+        browser.wait(EC.textToBePresentInElement($(".tc-red-600"), errorMessage), 2000);
+    },
+    verifyTermInputFieldHasError: function(errorMessage) {
+        $("fims-case-detail-form").click();
+        browser.wait(EC.textToBePresentInElement($("mat-error"), errorMessage), 2000);
+        expect(termInput.element(by.xpath("..")).element(by.xpath("..")).element(by.xpath("..")).$("mat-error").getText()).toEqual(errorMessage);
+    },
+    verifyRepayEveryFieldHasErrorForInvalidTerm: function(errorMessage) {
+        $("fims-case-detail-form").click();
+        browser.wait(EC.textToBePresentInElement($(".tc-red-600"), errorMessage), 2000);
+    },
+    verifyCreateLoanButtonIsNotDisplayed: function(){
+        expect($("a[title='Create new loan for member ']").isPresent()).toBe(false);
+    },
+    verifyMessagesAreDisplayed: function(message, message2){
+        browser.wait(EC.visibilityOf($("td-message")), 2500);
+        expect($("td-message .td-message-label").getText()).toEqual(message);
+        expect($("td-message .td-message-sublabel").getText()).toEqual(message2);
     }
 };
diff --git a/Pages/Customers.js b/Pages/Customers.js
index cbb8e88..60135f6 100644
--- a/Pages/Customers.js
+++ b/Pages/Customers.js
@@ -275,6 +275,10 @@
     verifyIsMemberCheckboxSelected: function () {
         expect(memberCheckbox.getAttribute("class")).toMatch("mat-checkbox-checked");
     },
+    uncheckMemberCheckbox: function (){
+        expect(memberCheckbox.getAttribute("class")).toMatch("mat-checkbox-checked");
+        memberCheckbox.click();
+    },
     enterTextIntoShortNameInputField: function (text) {
         browser.wait(EC.elementToBeClickable(shortNameInput), 5000);
         shortNameInput.click().sendKeys(text);
diff --git a/Pages/Loans.js b/Pages/Loans.js
index 9753a60..46e41fd 100644
--- a/Pages/Loans.js
+++ b/Pages/Loans.js
@@ -318,6 +318,7 @@
         expect($("a[title='Edit product']").isPresent()).toBe(true);
     },
     verifyEditLoanProductButtonIsNotDisplayed: function(){
+        browser.sleep(500);
         expect($("a[title='Edit product']").isPresent()).toBe(false);
     }
 };
\ No newline at end of file
diff --git a/Specs/loans1_creation&assignment.js b/Specs/loans1_creation&assignment.js
index 05ab8aa..32d3c36 100644
--- a/Specs/loans1_creation&assignment.js
+++ b/Specs/loans1_creation&assignment.js
@@ -18,6 +18,7 @@
     officeIdentifier = helper.getRandomString(6);
     tellerIdentifier = helper.getRandomString(4);
     customerAccount = helper.getRandomString(5);
+    customerAccount2 = helper.getRandomString(5);
     depositIdentifier = helper.getRandomString(4);
     depositName = helper.getRandomString(8);
     chequeReceivablesAccount = helper.getRandomString(4);
@@ -157,17 +158,41 @@
         Common.verifyFirstRowOfSearchResultHasTextAsId(customerAccount);
     });
     it('should not be possible to create loan account for pending customer', function () {
-
+        Common.clickLinkShowForFirstRowInTable();
+        Customers.clickManageLoanAccountsForMember(customerAccount);
+        CustomerLoans.verifyCreateLoanButtonIsNotDisplayed();
     });
     it('should activate the customer', function () {
-        Common.clickLinkShowForFirstRowInTable();
+        Common.clickBackButtonInTitleBar();
         Customers.verifyMemberHasStatusInactive();
         Customers.clickButtonGoToTasks();
         Customers.clickButtonActivate();
         Common.verifyMessagePopupIsDisplayed("Command is going to be executed");
         Customers.verifyMemberHasStatusActive();
     });
-    it('should create a deposit account - Checking with opening charge', function () {
+    it('should create another customer - co-signer', function () {
+        Common.clickBackButtonInTitleBar();
+        Common.verifyCardHasTitle("Manage members");
+        Customers.clickButtonOrLinkCreateNewMember();
+        Common.verifyCardHasTitle("Create new member");
+        Customers.enterTextIntoAccountInputField(customerAccount2);
+        Customers.enterTextIntoFirstNameInputField("Bob");
+        Customers.enterTextIntoLastNameInputField("Dylan");
+        Customers.enterTextIntoDayOfBirthInputField("9211978");
+        Customers.uncheckMemberCheckbox();
+        Customers.clickEnabledContinueButtonForMemberDetails();
+        Customers.enterTextIntoStreetInputField("800 Chatham Road #326");
+        Customers.enterTextIntoCityInputField("Winston-Salem");
+        Customers.selectCountryByName("Germany");
+        Customers.clickEnabledContinueButtonForMemberAddress();
+        Customers.clickEnabledCreateMemberButton();
+        Common.verifyMessagePopupIsDisplayed("Member is going to be saved");
+        Common.verifyCardHasTitle("Manage members");
+        Common.clickSearchButtonToMakeSearchInputFieldAppear();
+        Common.enterTextInSearchInputFieldAndApplySearch(customerAccount2);
+        Common.verifyFirstRowOfSearchResultHasTextAsId(customerAccount2);
+    });
+    it('should create a deposit account - Checking with opening charge of 0', function () {
         Deposits.goToDepositsViaSidePanel();
         Common.verifyCardHasTitle("Manage deposit products");
         Deposits.clickButtonCreateDepositAccount();
@@ -212,7 +237,7 @@
         Customers.clickEnabledButtonCreateDepositAccount();
         Common.verifyMessagePopupIsDisplayed("Deposit account is going to be saved");
     });
-    it('create first loan product', function () {
+    it('create first loan product - interest range, max term 5 years, no fees/tasks', function () {
         Loans.goToLoanProductsViaSidePanel();
         Loans.clickButtonCreateLoanProduct();
         //product details
@@ -229,9 +254,9 @@
         Loans.selectRadioButtonYears();
         Loans.clickEnabledContinueButtonForProductDetails();
         //ledger and account settings
-        //asset account only
+        //ToDo: asset account only
         Loans.enterTextIntoCashAccountInputField(tellerAccount);
-        //asset ledger only
+        //ToDo: asset ledger only
         Loans.enterTextIntoCustomerLoanLedgerInputField("7900");
         Loans.clickEnabledContinueButtonForLedgerAndAccountSettings();
         //interest settings
@@ -242,9 +267,9 @@
         Loans.verifyInterestRangeInputFieldsHaveError("Must be greater than minimum");
         Loans.enterTextIntoInterestRangeMinInputField("0.80");
         Loans.enterTextIntoInterestRangeMaxInputField("3.60");
-        //revenue account only
+        //ToDo: revenue account only
         Loans.enterTextIntoIncomeAccountAccountInputField("1101");
-        //asset account only
+        //ToDo: asset account only
         Loans.enterTextIntoAccrualAccountInputField("7810");
         Loans.clickEnabledContinueButtonForInterestSettings();
         //fee income accounts
@@ -260,12 +285,12 @@
         Common.verifyMessagePopupIsDisplayed("Product is going to be saved");
     });
     it('should enable the first loan product', function () {
-        //message
         Common.clickLinkShowForRowWithId(loanShortName);
+        CustomerLoans.verifyMessagesAreDisplayed("Product not enabled", "To assign this product to a member it needs to be enabled first");
         Loans.clickButtonEnableProduct();
         Common.verifyMessagePopupIsDisplayed("Product is going to be enabled");
     });
-    it('create second loan product', function () {
+    it('create second loan product - interest rate, max term 52 weeks, no fees/tasks', function () {
         Loans.goToLoanProductsViaSidePanel();
         Loans.clickButtonCreateLoanProduct();
         //product details
@@ -362,28 +387,38 @@
         CustomerLoans.enterTextIntoShortNameInputField(loanAccountShortName);
         CustomerLoans.enterTextIntoPrincipalAmountInputField("9999.99");
         //invalid input, error
+        CustomerLoans.verifyPrincipalInputFieldHasError("Value must be greater than or equal to 10000");
         CustomerLoans.enterTextIntoPrincipalAmountInputField("50,000.01");
         //invalid input, error
+        CustomerLoans.verifyPrincipalInputFieldHasError("Value must be smaller than or equal to 50000");
         CustomerLoans.enterTextIntoPrincipalAmountInputField("10,000");
         CustomerLoans.enterTextIntoInterestRateInputField("3.65");
         //invalid input, error
+        CustomerLoans.verifyInterestRateInputFieldHasError("Value must be smaller than or equal to 3.6");
         CustomerLoans.enterTextIntoInterestRateInputField("0.79");
         //invalid input, error
+        CustomerLoans.verifyInterestRateInputFieldHasError("Value must be greater than or equal to 0.8");
         CustomerLoans.enterTextIntoInterestRateInputField("3.60");
         CustomerLoans.enterTextIntoTermInputField("62");
-        //invalid input, error
+        //invalid input, error: Invalid term. Maximum allowed are 260 week(s), 60 month(s) or 5 year(s).
+        CustomerLoans.verifyTermInputFieldHasErrorForInvalidTerm("Invalid term. Maximum allowed are 260 week(s), 60 month(s) or 5 year(s).");
+        CustomerLoans.enterTextIntoTermInputField("59.9");
+        //invalid input, error: Value scale must be smaller than or equal to 0
+        CustomerLoans.verifyTermInputFieldHasError("Value scale must be smaller than or equal to 0");
         CustomerLoans.enterTextIntoTermInputField("60");
-        //valid input, no error
         CustomerLoans.selectTemporalUnitForTerm("years");
         //invalid input, error
+        CustomerLoans.verifyTermInputFieldHasErrorForInvalidTerm("Invalid term. Maximum allowed are 260 week(s), 60 month(s) or 5 year(s).");
         CustomerLoans.enterTextIntoTermInputField("5");
         //valid input, no error
         CustomerLoans.enterTextIntoPaymentPeriodInputField("62");
         //invalid input, error: Invalid payment period. Maximum allowed are 260 week(s), 60 month(s) or 5 year(s).
+        CustomerLoans.verifyRepayEveryFieldHasErrorForInvalidTerm("Invalid payment period. Maximum allowed are 260 week(s), 60 month(s) or 5 year(s).");
         CustomerLoans.enterTextIntoPaymentPeriodInputField("6");
         //valid input, no error
         CustomerLoans.selectPaymentPeriod("years");
         //invalid input, error
+        CustomerLoans.verifyRepayEveryFieldHasErrorForInvalidTerm("Invalid payment period. Maximum allowed are 260 week(s), 60 month(s) or 5 year(s).");
         CustomerLoans.selectPaymentPeriod("months");
         //valid input, no error
         CustomerLoans.selectSecondRadioOptionForMonthlyRepayment();
@@ -391,11 +426,12 @@
         CustomerLoans.selectDepositAccount(customerAccount + ".9100.00001(" + depositIdentifier + ")");
         //change loan product to the other one
         CustomerLoans.selectProduct(loanShortName2);
-        //error for principal: Value must be smaller than or equal to 1500
+        CustomerLoans.verifyPrincipalInputFieldHasError("Value must be smaller than or equal to 1500");
         CustomerLoans.enterTextIntoPrincipalAmountInputField("1500");
-        //interest rate input is disabled and shows 15%
-        //error for payment period: Invalid payment period. Maximum allowed are 21 week(s), 5 month(s) or 0 year(s).
-        CustomerLoans.selectPaymentPeriod("months");
+        CustomerLoans.verifyInterestRateInputFieldIsDisabledAndHasText("15.00");
+        CustomerLoans.verifyTermInputFieldHasErrorForInvalidTerm("Invalid term. Maximum allowed are 52 week(s), 12 month(s) or 1 year(s).");
+        CustomerLoans.selectTemporalUnitForTerm("months");
+        CustomerLoans.verifyRepayEveryFieldHasErrorForInvalidTerm("Invalid payment period. Maximum allowed are 21 week(s), 5 month(s) or 0 year(s).");
         //debt to income ratio
         CustomerLoans.goToStepDebtToIncomeRatio();
         CustomerLoans.clickButtonAddDebt();
@@ -416,12 +452,16 @@
         CustomerLoans.enterTextIntoAmountInputFieldForIncome("5000",2);
         CustomerLoans.verifyIncomeTotalIs("10,000.00");
         CustomerLoans.verifyDebtIncomeRatioIs("01.50");
-        //browser.pause();
         CustomerLoans.goToStepCoSigner();
         //co-signer, need another member
-        //CustomerLoans.enterTextIntoMemberInputField();
-        //documents, cannot do much since I cannot upload documents via test
-        CustomerLoans.goToStepDocuments();
+        //ToDo: cannot select same member to be co-signer
+        CustomerLoans.enterTextIntoMemberInputField(customerAccount2);
+        CustomerLoans.clickButtonAddDebt();
+        CustomerLoans.enterTextDescriptionInputFieldForDebtCosigner("Co-signer debt", 1);
+        CustomerLoans.enterTextIntoAmountInputFieldForDebtCosigner("500", 1);
+        CustomerLoans.clickButtonAddIncome();
+        CustomerLoans.enterTextIntoDescriptionInputFieldForIncomeCosigner("Co-signer income", 1);
+        CustomerLoans.enterTextIntoAmountInputFieldForIncomeCosigner("1200", 1);
         //still error for payment period
         CustomerLoans.verifyButtonCreateMemberLoanDisabled();
         CustomerLoans.goToStepLoanDetails();
@@ -436,6 +476,13 @@
         CustomerLoans.verifyCurrentStatusForLoanAccountInRow("CREATED", 1);
         Common.clickLinkShowForRowWithId(loanAccountShortName);
         //details
+        CustomerLoans.verifyLoanStatusIs("CREATED");
+        CustomerLoans.verifyPrincipalAmountForLoan("1,500.00");
+        CustomerLoans.verifyInterestForLoan("15.00");
+        CustomerLoans.verifyPaymentCycleForLoan("Repay every 5 months on the last Friday");
+        CustomerLoans.verifyTermForLoan("5 MONTHS");
+        CustomerLoans.verifyMemberDepositAccountForLoan(customerAccount + ".9100.00001");
+        CustomerLoans.verifyCreatedByForLoanIs(employeeIdentifier);
     });
     it('planned payment', function () {
         CustomerLoans.viewPlannedPaymentForCustomerLoan(customerAccount, loanShortName, loanAccountShortName);
@@ -444,7 +491,7 @@
     it('debt/income ratio', function () {
         CustomerLoans.viewDebtIncomeReportForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName);
         CustomerLoans.verifyMemberRatioIs("01.50");
-        CustomerLoans.verifyCoSignerRatioIs(" -");
+        CustomerLoans.verifyCoSignerRatioIs("00.42");
         Common.clickBackButtonInTitleBar();
     });
     it('should be able to edit loan account until it has been approved', function () {
