diff --git a/Pages/Accounting b/Pages/Accounting
index dd7ada6..aea7be6 100644
--- a/Pages/Accounting
+++ b/Pages/Accounting
@@ -8,6 +8,8 @@
 var accountNameInput = $("input[formcontrolname=name]");
 var accountBalanceInput = $("input[formcontrolname=balance]");
 var primaryButton = $$(".mat-raised-button.mat-primary");
+var radioButtonAsset = $$("md-radio-button").get(0);
+var radioButtonRevenue = $$("md-radio-button").get(4);
 
 module.exports = {
     goToAccountingViaSidePanel: function() {
@@ -92,4 +94,14 @@
             });
         }).click();
     },
+
+    verifyRadioAssetToBeSelected: function() {
+        expect(radioButtonAsset.getAttribute("class")).toMatch("mat-radio-checked");
+    },
+    verifyRadioAssetToBeDisabled: function() {
+        expect(radioButtonAsset.getAttribute("class")).toMatch("mat-radio-disabled");
+    },
+    verifyRadioRevenueToBeSelected: function() {
+        expect(radioButtonRevenue.getAttribute("class")).toMatch("mat-radio-checked");
+    },
 };
\ No newline at end of file
diff --git a/Pages/Customers.js b/Pages/Customers.js
index 4a9833b..46e0f44 100644
--- a/Pages/Customers.js
+++ b/Pages/Customers.js
@@ -8,7 +8,7 @@
 var middleNameInput = $(".mat-input-infix input[formcontrolname='middleName']");
 var lastNameInput = $(".mat-input-infix input[formcontrolname='lastName']");
 var birthDayInput = $(".mat-input-infix input[formcontrolname='dayOfBirth']");
-var memberCheckbox = $(".mat-input-infix input[formcontrolname='member']");
+var memberCheckbox = $("md-checkbox[formcontrolname='member']");
 var streetInput = $(".mat-input-infix input[formcontrolname='street']");
 var cityInput = $(".mat-input-infix input[formcontrolname='city']");
 var countrySelect = $(".mat-input-infix input[formcontrolname='country']");
@@ -180,9 +180,9 @@
     //     });
     //     return depAccount;
     // },
-    getDepositAccountIdentifier: function(){
-        return $$("md-list p").first().getText();
-    },
+    // getDepositAccountIdentifier: function(){
+    //     return $$("md-list p").first().getText();
+    // },
     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
@@ -193,4 +193,7 @@
         }).$$(".td-data-table-cell").get(3).getText();
         expect(actualState).toEqual(expectedState);
     },
+    verifyIsMemberCheckboxSelected: function() {
+        expect(memberCheckbox.getAttribute("class")).toMatch("mat-checkbox-checked");
+    },
 };
\ No newline at end of file
diff --git a/Pages/Deposits.js b/Pages/Deposits.js
index ee64755..6c61cf3 100644
--- a/Pages/Deposits.js
+++ b/Pages/Deposits.js
@@ -31,12 +31,17 @@
 var expenseAccountInput = $("fims-account-select[formcontrolname='expenseAccountIdentifier'] input");
 var accrueAccountInput = $("fims-account-select[formcontrolname='accrueAccountIdentifier'] input");
 var equityLedgerInput = $("fims-ledger-select[formcontrolname='equityLedgerIdentifier'] input");
-var chargeNameInput = $("fims-deposit-product-charges-form input[formcontrolname='name']");
+var chargeNameInput1 = $$("fims-deposit-product-charges-form input[formcontrolname='name']").get(0);
+var chargeNameInput2 = $$("fims-deposit-product-charges-form input[formcontrolname='name']").get(1);
 var chargeDescriptionInput = $("input[formcontrolname='description']");
-var chargeAmountInput = $("fims-number-input[controlname='amount'] input");
-var chargeTypeSelect = $("md-select[formcontrolname='actionIdentifier']");
-var incomeAccountInput = $("fims-account-select[formcontrolname='incomeAccountIdentifier'] input");
-var checkboxProportional = $("md-checkbox[formcontrolname='proportional']");
+var chargeAmountInput1 = $$("fims-number-input[controlname='amount'] input").get(0);
+var chargeAmountInput2 = $$("fims-number-input[controlname='amount'] input").get(1);
+var chargeTypeSelect1 = $$("md-select[formcontrolname='actionIdentifier']").get(0);
+var chargeTypeSelect2 = $$("md-select[formcontrolname='actionIdentifier']").get(1);
+var incomeAccountInput1 = $$("fims-account-select[formcontrolname='incomeAccountIdentifier'] input").get(0);
+var incomeAccountInput2 = $$("fims-account-select[formcontrolname='incomeAccountIdentifier'] input").get(1);
+var checkboxProportional1 = $$("md-checkbox[formcontrolname='proportional']").get(0);
+var checkboxProportional2 = $$("md-checkbox[formcontrolname='proportional']").get(1);
 var primaryButton = $$(".mat-raised-button.mat-primary");
 
 module.exports = {
@@ -50,6 +55,11 @@
         browser.wait(EC.visibilityOf(createDeposit), 5000);
         createDeposit.click();
     },
+    clickButtonEditDepositProduct: function(identifier){
+        link = "/deposits/detail/" + identifier + "/edit";
+        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
+        $('a[href="'+ link + '"]').click();
+    },
     verifyRadioCheckingIsSelected: function(element){
         expect(radioChecking.getAttribute('class')).toMatch('mat-radio-checked')
     },
@@ -72,6 +82,10 @@
         browser.wait(EC.visibilityOf(shortNameInput), 5000);
         shortNameInput.click().sendKeys(text);
     },
+    verifyShortNameInputFieldHasText: function(text) {
+        browser.wait(EC.visibilityOf(shortNameInput), 5000);
+        expect(shortNameInput.getAttribute("value")).toEqual(text);
+    },
     enterTextIntoNameInputField: function(text) {
         nameInput.click().sendKeys(text);
     },
@@ -91,6 +105,14 @@
     enterTextIntoInterestInputField: function(text) {
         interestInput.click().clear().sendKeys(text);
     },
+    verifyInterestInputFieldHasText: function(text) {
+        browser.wait(EC.visibilityOf(interestInput), 5000);
+        expect(interestInput.getAttribute("value")).toEqual(text);
+    },
+    verifyInterestInputFieldIsDisabled: function() {
+        browser.wait(EC.visibilityOf(interestInput), 5000);
+        expect(interestInput.isEnabled()).toBe(false);
+    },
     enterTextIntoTermPeriodInputField: function(text) {
         termPeriodInput.click().sendKeys(text);
     },
@@ -148,29 +170,58 @@
         equityLedgerInput.click().sendKeys(text);
     },
     clickEnabledContinueButtonForProductDetails: function(){
+        browser.executeScript("arguments[0].scrollIntoView();", $$(".mat-raised-button").get(0).getWebElement());
         expect($$(".mat-raised-button").get(0).isEnabled()).toBeTruthy();
         $$(".mat-raised-button").get(0).click();
     },
+    enterTextIntoChargeNameInputField: function(text) {
+        chargeNameInput1.click().sendKeys(text);
+    },
     clickButtonAddCharge: function(){
         browser.wait(EC.elementToBeClickable($("fims-deposit-product-charges-form button")), 2000);
         $("fims-deposit-product-charges-form button").click();
     },
-    enterTextIntoChargeNameInputField: function(text) {
-        chargeNameInput.click().sendKeys(text);
+    clickButtonAddChargeIfThereAlreadyIsACharge: function(){
+        browser.executeScript("arguments[0].scrollIntoView();", $$("fims-deposit-product-charges-form button").get(1).getWebElement());
+        browser.wait(EC.elementToBeClickable($$("fims-deposit-product-charges-form button").get(1)), 2000);
+        $$("fims-deposit-product-charges-form button").get(1).click();
+    },
+    enterTextIntoSecondChargeNameInputField: function(text) {
+        browser.wait(EC.visibilityOf(chargeNameInput2));
+        chargeNameInput2.click().sendKeys(text);
     },
     enterTextIntoChargeDescriptionInputField: function(text) {
         chargeDescriptionInput.click().sendKeys(text);
     },
     enterTextIntoChargeAmountInputField: function(text) {
-        chargeAmountInput.click().clear().sendKeys(text);
+        chargeAmountInput1.click().clear().sendKeys(text);
+    },
+    enterTextIntoSecondChargeAmountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", chargeAmountInput2.getWebElement());
+        chargeAmountInput2.click().clear().sendKeys(text);
     },
     selectTypeOfCharge: function(text) {
-        chargeTypeSelect.click();
+        chargeTypeSelect1.click();
+        browser.wait(EC.visibilityOf($(".mat-option")), 5000);
+        element(by.cssContainingText('.mat-option', text)).click();
+    },
+    selectTypeOfSecondCharge: function(text) {
+        chargeTypeSelect2.click();
         browser.wait(EC.visibilityOf($(".mat-option")), 5000);
         element(by.cssContainingText('.mat-option', text)).click();
     },
     enterTextIntoIncomeAccountInputField: function(text) {
-        incomeAccountInput.click().sendKeys(text);
+        incomeAccountInput1.click().sendKeys(text);
+    },
+    enterTextIntoSecondIncomeAccountInputField: function(text) {
+        browser.executeScript("arguments[0].scrollIntoView();", incomeAccountInput2.getWebElement());
+        incomeAccountInput2.click().sendKeys(text);
+    },
+    selectCheckboxProportional: function(){
+        checkboxProportional1.click();
+    },
+    selectSecondCheckboxProportional: function(){
+        checkboxProportional2.click();
     },
     clickEnabledContinueButtonForProductDetails: function(){
         browser.wait(EC.elementToBeClickable($$(".mat-raised-button").get(0)), 5000);
@@ -186,6 +237,15 @@
             });
         }).click();
     },
+    clickEnabledUpdateProductButton: 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 PRODUCT";
+            });
+        }).click();
+    },
     clickButtonEnableProduct: function(){
         browser.wait(EC.elementToBeClickable($("td-message button")), 2000);
         $("td-message button").click();
diff --git a/Pages/Teller.js b/Pages/Teller.js
index 874ce12..968d048 100644
--- a/Pages/Teller.js
+++ b/Pages/Teller.js
@@ -95,7 +95,7 @@
         a.click();
         browser.wait(EC.visibilityOf($("fims-teller-transaction-form")), 2000);
     },
-    selectAccountToBeOpened: function(accountIdentifier){
+    selectAccountToBeAffected: function(accountIdentifier){
         browser.wait(EC.elementToBeClickable(accountSelect), 3000);
         accountSelect.click();
         browser.wait(EC.visibilityOf($(".mat-option")), 5000);
@@ -104,7 +104,7 @@
     },
     enterTextIntoAmountInputField: function(text) {
         browser.wait(EC.elementToBeClickable(amountInput), 5000);
-        amountInput.click().sendKeys(text);
+        amountInput.click().clear().sendKeys(text);
     },
     clickEnabledCreateTransactionButton: function(){
         primaryButton.filter(function(elem, index) {
@@ -113,6 +113,20 @@
             });
         }).click();
     },
+    verifyCreateTransactionButtonIsDisabled: function(){
+        expect(primaryButton.filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === "CREATE TRANSACTION";
+            });
+        }).isEnabled()).toBe(false);
+    },
+    verifyCreateTransactionButtonIsEnabled: function(){
+        expect(primaryButton.filter(function(elem, index) {
+            return elem.$("span").getText().then(function(text) {
+                return text === "CREATE TRANSACTION";
+            });
+        }).isEnabled()).toBe(true);
+    },
     clickEnabledConfirmTransactionButton: function(){
         browser.executeScript("arguments[0].scrollIntoView();", primaryButton.get(1).getWebElement());
         browser.wait(EC.elementToBeClickable(primaryButton.get(1)), 3000);
@@ -127,6 +141,10 @@
         classCB = checkboxChargesInCash.getAttribute("class");
         expect(classCB).toMatch("mat-checkbox-checked");
     },
+    uncheckChargesPayedInCashCheckbox: function(){
+       this.verifyChargesPayedInCashCheckboxChecked();
+       checkboxChargesInCash.click();
+    },
     verifyChargesPayedInCashCheckboxNotChecked: function(){
         classCB = checkboxChargesInCash.getAttribute("class");
         expect(classCB).not.toMatch("mat-checkbox-checked");
diff --git a/Specs/gate1.js b/Specs/gate1.js
index e34fd87..92db61f 100644
--- a/Specs/gate1.js
+++ b/Specs/gate1.js
@@ -1,18 +1,21 @@
 //test round 1 - admin user can execute basic actions (TBD)
 //1) User operator creates a new role Administrator with all permissions
 //2) User operator creates a new employee with that role
-//3) New employee logs in and creates headoffice
-//4) New employee creates branch office
-//5) New employee creates a teller for the branch office
-//6) New employee opens the teller and assigns it to himself
-//7) New employee creates a customer
-//8) New employee activates the customer
-//9) New employee unlocks the teller, views customer and pauses teller again
-//10) New employee creates a deposit product
-//11) New employee enables deposit product
-//12) New employee assigns deposit product to customer
-//13) New employee opens account in teller and verifies the account is now active
-//14) New employee verifies transaction have been booked as expected (accounting)
+//3) New employee logs in and creates new accounts (asset and revenue)
+//4) New employee creates headoffice
+//5) New employee creates branch office
+//6) New employee creates a teller for the branch office
+//7) New employee opens the teller and assigns it to himself
+//8) New employee creates a customer
+//9) New employee activates the customer
+//10) New employee unlocks the teller, views customer and pauses teller again
+//11) New employee creates a deposit product
+//12) New employee enables deposit product
+//13) New employee assigns deposit product to customer
+//14) New employee opens account in teller and verifies the account is now active
+//15) New employee verifies transaction have been booked as expected (accounting)
+//16) New employee updates deposit product and adds a proportional charge on cash withdrawal
+//17) Teller - Cash is withdrawn from the account
 
 //test 1 and 3 fail if role and headquarter already exist, but other tests should be able to continue
 
@@ -59,17 +62,18 @@
         Common.clickLinkShowForRowWithId("7000");
         Common.clickLinkShowForRowWithId("7300");
         Accounting.clickCreateNewAccountInLedger("7300");
-        //Accounting.verifyAccountTypeAssetSelected();
-        //Accounting.verifyRadioGroupAccountTypesDisabled();
         Accounting.enterTextIntoAccountIdentifierInputField(tellerAccount);
+        Accounting.verifyRadioAssetToBeSelected();
+        Accounting.verifyRadioAssetToBeDisabled();
         Accounting.enterTextIntoAccountNameInputField("My teller");
         Accounting.clickEnabledButtonCreateAccount();
         Common.verifyMessagePopupIsDisplayed("Account is going to be saved");
         Accounting.goToAccountingViaSidePanel();
         Common.clickLinkShowForRowWithId("1000");
-        Common.clickLinkShowForRowWithId("1100");
-        Accounting.clickCreateNewAccountInLedger("1100");
+        Common.clickLinkShowForRowWithId("1300");
+        Accounting.clickCreateNewAccountInLedger("1300");
         Accounting.enterTextIntoAccountIdentifierInputField(revenueAccount);
+        Accounting.verifyRadioRevenueToBeSelected();
         Accounting.enterTextIntoAccountNameInputField("Revenue from deposit charges");
         Accounting.clickEnabledButtonCreateAccount();
         Common.verifyMessagePopupIsDisplayed("Account is going to be saved");
@@ -131,13 +135,12 @@
         Customers.enterTextIntoFirstNameInputField("Thomas");
         Customers.enterTextIntoLastNameInputField("Pynchon");
         Customers.enterTextIntoDayOfBirthInputField("09/21/1978");
-        //Customers.verifyMemberCheckboxIsChecked();
+        Customers.verifyIsMemberCheckboxSelected();
         Customers.clickEnabledContinueButtonForCustomerDetails();
         Customers.enterTextIntoStreetInputField("800 Chatham Road #326");
         Customers.enterTextIntoCityInputField("Winston-Salem");
         Customers.selectCountryByName("Germany");
         Customers.clickEnabledContinueButtonForCustomerAddress();
-        //Customers.clickEnabledContinueButtonForCustomerContact();
         Customers.clickEnabledCreateCustomerButton();
         Common.verifyMessagePopupIsDisplayed("Customer is going to be saved")
         Customers.verifyCardHasTitleManageCustomers();
@@ -221,7 +224,6 @@
         Customers.selectDepositProduct(depositName);
         Customers.clickEnabledButtonCreateDepositAccount();
         Common.verifyMessagePopupIsDisplayed("Deposit account is going to be saved");
-
         //might not be in list immediately always
         Common.clickBackButtonInTitleBar();
         Customers.clickManageDepositAccountsForCustomer(customerAccount);
@@ -241,7 +243,7 @@
         Teller.verifyCardTitleHasNameOfCustomer("Thomas Pynchon");
         Teller.clickOnOpenAccountForCustomer(customerAccount);
         Teller.verifyCardTitleIs("Teller transaction");
-        Teller.selectAccountToBeOpened(customerAccount + ".9100.00001");
+        Teller.selectAccountToBeAffected(customerAccount + ".9100.00001");
         Teller.enterTextIntoAmountInputField("100");
         Teller.clickEnabledCreateTransactionButton();
         Teller.verifyTransactionAmount("100");
@@ -292,7 +294,7 @@
         //revenue account - check charges have been booked as expected
         Accounting.goToAccountingViaSidePanel();
         Common.clickLinkShowForRowWithId("1000");
-        Common.clickLinkShowForRowWithId("1100");
+        Common.clickLinkShowForRowWithId("1300");
         Common.clickLinkShowForRowWithId(revenueAccount);
         Accounting.verifyAccountStatus("OPEN");
         Accounting.verifyAccountInfo("Balance", "5");
@@ -303,4 +305,37 @@
         Accounting.verifyTransactionAmountForRow("5", 1);
         Accounting.verifyTransactionBalanceForRow("5", 1);
     });
+    it('edit deposit product and add a withdrawal charge', function () {
+        Deposits.goToDepositsViaSidePanel();
+        Common.clickLinkShowForRowWithId(depositIdentifier);
+        Deposits.clickButtonEditDepositProduct(depositIdentifier);
+        Deposits.verifyRadioCheckingIsSelected();
+        Deposits.verifyInterestInputFieldHasText("0.05");
+        Deposits.verifyInterestInputFieldIsDisabled();
+        Deposits.clickEnabledContinueButtonForProductDetails();
+        Deposits.clickButtonAddChargeIfThereAlreadyIsACharge();
+        Deposits.enterTextIntoSecondChargeNameInputField("Cash withdrawal charge");
+        Deposits.enterTextIntoSecondChargeAmountInputField("3");
+        Deposits.selectTypeOfSecondCharge("Cash Withdrawal");
+        Deposits.enterTextIntoSecondIncomeAccountInputField(revenueAccount);
+        Deposits.selectSecondCheckboxProportional();
+        Deposits.clickEnabledUpdateProductButton();
+        Common.verifyMessagePopupIsDisplayed("Product is going to be saved");
+    });
+    it('make a cash withdrawal without paying charge in cash', function () {
+        Teller.goToTellerManagementViaSidePanel();
+        Teller.enterTextIntoSearchInputField(customerAccount);
+        //will be successful even if the customer does not exist, clicks one of the buttons too quickly: need to fix
+        Teller.clickButtonShowAtIndex(0);
+        Teller.verifyCardTitleHasNameOfCustomer("Thomas Pynchon");
+        Teller.clickOnCashWithdrawalForCustomer(customerAccount);
+        Teller.selectAccountToBeAffected(customerAccount + ".9100.00001");
+        Teller.enterTextIntoAmountInputField("100");
+        Teller.clickEnabledCreateTransactionButton();
+        Teller.verifyTransactionAmount("100");
+        Teller.verifyTransactionCharge("Cash withdrawal charge", "3");
+        Teller.uncheckChargesPayedInCashCheckbox();
+        Teller.clickEnabledConfirmTransactionButton();
+        Common.verifyMessagePopupIsDisplayed("Transaction successfully confirmed");
+    });
 });
\ No newline at end of file
