diff --git a/README.md b/README.md
index ba30460..b01f363 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
 # webdriverio-appium-app-browserstack
+
 This repository demonstrates how to run Appium tests using [WebdriverIO](http://webdriver.io/) on BrowserStack App Automate.
 
 
@@ -8,11 +9,18 @@ This repository demonstrates how to run Appium tests using [WebdriverIO](http://
 
 Code samples to get started with Appium tests for your Native App using WebdriverIO.
 
+## Based on
+
+These code samples are currently based on:
+
+- **WebdriverIO:** `7.23.0`
+- **Protocol:** `W3C`
+
 ## Setup
 
 ### Requirements
 
-* Node.js 8.11.2+
+- Node.js v16.17.0+
   - If you don't have Node installed, download it from [here](https://nodejs.org/en/)
 
 ### Install the dependencies
@@ -38,12 +46,13 @@ npm i
 Getting Started with Appium tests using WebdriverIO on BrowserStack couldn't be easier!
 
 ### Run first test:
-  - Test script is available in `run-first-test` directory under [Android examples](./android) or [iOS examples](./ios)
-  - Follow the steps outlined in the documentation - [Get Started with your first test on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/nodejs/webdriverio)
+
+- Test script is available in `run-first-test` directory under [Android examples](./android) or [iOS examples](./ios)
+- Follow the steps outlined in the documentation - [Get Started with your first test on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/nodejs/webdriverio)
 
 ### Speed up test execution with parallel testing :
 
-- Test script is available in  `run-parallel-test` directory under [Android examples](./android) or [iOS examples](./ios)
+- Test script is available in `run-parallel-test` directory under [Android examples](./android) or [iOS examples](./ios)
 - Follow the steps outlined in the documentation - [Get Started with parallel testing on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/nodejs/webdriverio/parallelize-tests)
 
 ### Use Local testing for apps that access resources hosted in development or testing environments :
@@ -56,4 +65,3 @@ Getting Started with Appium tests using WebdriverIO on BrowserStack couldn't be
 ## Getting Help
 
 If you are running into any issues or have any queries, please check [Browserstack Support page](https://www.browserstack.com/support/app-automate) or [get in touch with us](https://www.browserstack.com/contact?ref=help).
-
diff --git a/android/assets/SampleAndroidApp.apk b/android/assets/SampleAndroidApp.apk
new file mode 100644
index 0000000..03d19e6
Binary files /dev/null and b/android/assets/SampleAndroidApp.apk differ
diff --git a/android/assets/SampleLocalAndroidApp.apk b/android/assets/SampleLocalAndroidApp.apk
new file mode 100644
index 0000000..e519680
Binary files /dev/null and b/android/assets/SampleLocalAndroidApp.apk differ
diff --git a/android/examples/run-first-test/first.conf.js b/android/examples/run-first-test/first.conf.js
index aa83cf6..bd736da 100644
--- a/android/examples/run-first-test/first.conf.js
+++ b/android/examples/run-first-test/first.conf.js
@@ -9,13 +9,14 @@ exports.config = {
   exclude: [],
 
   capabilities: [{
-    project: "First Webdriverio Android Project",
-    build: 'Webdriverio Android',
-    name: 'first_test',
-    device: 'Google Pixel 3',
-    os_version: "9.0",
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.debug': true
+    platformName: "Android",
+    "appium:platformVersion": "9.0",
+    "appium:deviceName": 'Google Pixel 3',
+    'bstack:options' : {
+      "projectName" : "First Webdriverio Android Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   }],
 
   logLevel: 'info',
@@ -25,6 +26,9 @@ exports.config = {
   waitforTimeout: 10000,
   connectionRetryTimeout: 90000,
   connectionRetryCount: 3,
+  services: [['browserstack', {
+    app: 'assets/SampleAndroidApp.apk'
+  }]],
 
   framework: 'mocha',
   mochaOpts: {
diff --git a/android/examples/run-local-test/local.conf.js b/android/examples/run-local-test/local.conf.js
index 966c7c9..e033809 100644
--- a/android/examples/run-local-test/local.conf.js
+++ b/android/examples/run-local-test/local.conf.js
@@ -1,9 +1,15 @@
-var browserstack = require('browserstack-local');
-
 exports.config = {
   user: process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME',
   key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY',
 
+  // Adding browserstackLocal to browserstack-service to initiate local binary
+  services: [
+      ['browserstack', {
+          browserstackLocal: true,
+          app: 'assets/SampleLocalAndroidApp.apk'
+      }]
+  ],
+
   updateJob: false,
   specs: [
     './examples/run-local-test/specs/local_test.js'
@@ -11,14 +17,14 @@ exports.config = {
   exclude: [],
 
   capabilities: [{
-    project: "First Webdriverio Android Project",
-    build: 'Webdriverio Android Local',
-    name: 'local_test',
-    device: 'Google Pixel 3',
-    os_version: "9.0",
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.local': true,
-    'browserstack.debug': true
+    platformName: "Android",
+    "appium:platformVersion": "9.0",
+    "appium:deviceName": 'Google Pixel 3',
+    'bstack:options' : {
+      "projectName" : "First Webdriverio Android Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   }],
 
   logLevel: 'info',
@@ -33,32 +39,5 @@ exports.config = {
   mochaOpts: {
     ui: 'bdd',
     timeout: 20000
-  },
-
-  // Code to start browserstack local before start of test
-  onPrepare: (config, capabilities) => {
-    console.log("Connecting local");
-    return new Promise( (resolve, reject) => {
-      exports.bs_local = new browserstack.Local();
-      exports.bs_local.start({'key': exports.config.key }, (error) => {
-        if (error) return reject(error);
-        console.log('Connected. Now testing...');
-
-        resolve();
-      });
-    });
-  },
-
-  // Code to stop browserstack local after end of test
-  onComplete: (capabilties, specs) => {
-    console.log("Closing local tunnel");
-    return new Promise( (resolve, reject) => {
-      exports.bs_local.stop( (error) => {
-        if (error) return reject(error);
-        console.log("Stopped BrowserStackLocal");
-
-        resolve();
-      });
-    });
   }
 };
diff --git a/android/examples/run-multiple-test/multiple.conf.js b/android/examples/run-multiple-test/multiple.conf.js
index c377060..d4c3170 100644
--- a/android/examples/run-multiple-test/multiple.conf.js
+++ b/android/examples/run-multiple-test/multiple.conf.js
@@ -9,13 +9,14 @@ exports.config = {
   exclude: [],
 
   capabilities: [{
-    project: "First Webdriverio Android Project",
-    build: 'Webdriverio Android Multiple',
-    name: 'multiple_test',
-    device: 'Google Pixel 3',
-    os_version: "9.0",
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.debug': true
+    platformName: "Android",
+    "appium:platformVersion": "9.0",
+    "appium:deviceName": 'Google Pixel 3',
+    'bstack:options' : {
+      "projectName" : "First Webdriverio Android Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   }],
 
   logLevel: 'info',
@@ -25,6 +26,9 @@ exports.config = {
   waitforTimeout: 10000,
   connectionRetryTimeout: 90000,
   connectionRetryCount: 3,
+  services: [['browserstack', {
+    app: 'assets/SampleAndroidApp.apk'
+  }]],
 
   framework: 'mocha',
   mochaOpts: {
diff --git a/android/examples/run-parallel-test/parallel.conf.js b/android/examples/run-parallel-test/parallel.conf.js
index 930b16b..15413d9 100644
--- a/android/examples/run-parallel-test/parallel.conf.js
+++ b/android/examples/run-parallel-test/parallel.conf.js
@@ -10,19 +10,20 @@ exports.config = {
 
   maxInstances: 10,
   commonCapabilities: {
-    project: "First Webdriverio Android Project",
-    build: 'Webdriverio Android Parallel',
-    name: 'parallel_test',
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.debug': true
+    platformName: "Android",
+    'bstack:options' : {
+      "projectName" : "First Webdriverio Android Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   },
 
   capabilities: [{
-    device: 'Google Pixel 3',
-    os_version: "9.0"
+    "appium:deviceName": 'Google Pixel 3',
+    "appium:platformVersion": "9.0",
   }, {
-    device: 'Samsung Galaxy S10e',
-    os_version: "9.0"
+    "appium:deviceName": 'Samsung Galaxy S10e',
+    "appium:platformVersion": "9.0",
   }],
 
   logLevel: 'info',
@@ -32,6 +33,9 @@ exports.config = {
   waitforTimeout: 10000,
   connectionRetryTimeout: 90000,
   connectionRetryCount: 3,
+  services: [['browserstack', {
+    app: 'assets/SampleAndroidApp.apk'
+  }]],
 
   framework: 'mocha',
   mochaOpts: {
@@ -41,6 +45,6 @@ exports.config = {
 };
 
 // Code to support common capabilities
-exports.config.capabilities.forEach(function(caps){
-  for(var i in exports.config.commonCapabilities) caps[i] = caps[i] || exports.config.commonCapabilities[i];
-});
+var common_caps = exports.config.commonCapabilities
+var caps = exports.config.capabilities
+for (var i in caps) caps[i] = { ...caps[i], ...common_caps };
diff --git a/android/package.json b/android/package.json
index 2cfca95..d17726d 100644
--- a/android/package.json
+++ b/android/package.json
@@ -1,8 +1,8 @@
 {
   "name": "webdriverio-appium-app-browserstack",
   "version": "0.1.0",
-  "readme": "WendriverIO Integration with [BrowserStack](https://www.browserstack.com)",
-  "description": "Selenium examples for WebdriverIO and BrowserStack App Automate",
+  "readme": "WebdriverIO Integration with [BrowserStack](https://www.browserstack.com)",
+  "description": "Appium examples for WebdriverIO and BrowserStack App Automate",
   "scripts": {
     "test": "npm run first && npm run local && npm run parallel",
     "first": "./node_modules/.bin/wdio examples/run-first-test/first.conf.js",
@@ -25,9 +25,11 @@
   },
   "homepage": "https://github.com/browserstack/webdriverio-appium-app-browserstack#readme",
   "dependencies": {
-    "@wdio/cli": "^5.20.1",
-    "@wdio/local-runner": "^5.20.1",
-    "@wdio/mocha-framework": "^5.18.7",
-    "browserstack-local": "^1.4.5"
+    "@wdio/cli": "^7.23.0"
+  },
+  "devDependencies": {
+    "@wdio/browserstack-service": "^7.25.0",
+    "@wdio/local-runner": "^7.25.0",
+    "@wdio/mocha-framework": "^7.25.0"
   }
 }
diff --git a/ios/assets/SampleIosApp.ipa b/ios/assets/SampleIosApp.ipa
new file mode 100644
index 0000000..c1891b8
Binary files /dev/null and b/ios/assets/SampleIosApp.ipa differ
diff --git a/ios/assets/SampleLocalIosApp.ipa b/ios/assets/SampleLocalIosApp.ipa
new file mode 100644
index 0000000..97d41a4
Binary files /dev/null and b/ios/assets/SampleLocalIosApp.ipa differ
diff --git a/ios/examples/run-first-test/first.conf.js b/ios/examples/run-first-test/first.conf.js
index 2462928..90f6a18 100644
--- a/ios/examples/run-first-test/first.conf.js
+++ b/ios/examples/run-first-test/first.conf.js
@@ -9,13 +9,14 @@ exports.config = {
   exclude: [],
 
   capabilities: [{
-    project: "First Webdriverio iOS Project",
-    build: 'Webdriverio iOS',
-    name: 'single_test',
-    device: 'iPhone 11 Pro',
-    os_version: "13",
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.debug': true
+    platformName: "ios",
+    "appium:platformVersion": "13",
+    "appium:deviceName": 'iPhone 11 Pro',
+    'bstack:options' : {
+      "projectName" : "First Webdriverio iOS Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   }],
 
   logLevel: 'info',
@@ -25,6 +26,9 @@ exports.config = {
   waitforTimeout: 10000,
   connectionRetryTimeout: 90000,
   connectionRetryCount: 3,
+  services: [['browserstack', {
+    app: 'assets/SampleIosApp.ipa'
+  }]],
 
   framework: 'mocha',
   mochaOpts: {
diff --git a/ios/examples/run-local-test/local.conf.js b/ios/examples/run-local-test/local.conf.js
index 8fd8bd3..66f5137 100644
--- a/ios/examples/run-local-test/local.conf.js
+++ b/ios/examples/run-local-test/local.conf.js
@@ -1,9 +1,15 @@
-var browserstack = require('browserstack-local');
-
 exports.config = {
   user: process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME',
   key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY',
 
+  // Adding browserstackLocal to browserstack-service to initiate local binary
+  services: [
+      ['browserstack', {
+          browserstackLocal: true,
+          app: 'assets/SampleLocalIosApp.ipa'
+      }]
+  ],
+
   updateJob: false,
   specs: [
     './examples/run-local-test/specs/local_test.js'
@@ -11,14 +17,14 @@ exports.config = {
   exclude: [],
 
   capabilities: [{
-    project: "First Webdriverio iOS Project",
-    build: 'Webdriverio iOS Local',
-    name: 'local_test',
-    device: 'iPhone 11 Pro',
-    os_version: "13",
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.local': true,
-    'browserstack.debug': true
+    platformName: "ios",
+    "appium:platformVersion": "12",
+    "appium:deviceName": 'iPhone XS',
+    'bstack:options' : {
+      "projectName" : "First Webdriverio iOS Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   }],
 
   logLevel: 'info',
@@ -34,31 +40,4 @@ exports.config = {
     ui: 'bdd',
     timeout: 30000
   },
-
-  // Code to start browserstack local before start of test
-  onPrepare: (config, capabilities) => {
-    console.log("Connecting local");
-    return new Promise( (resolve, reject) => {
-      exports.bs_local = new browserstack.Local();
-      exports.bs_local.start({'key': exports.config.key }, (error) => {
-        if (error) return reject(error);
-        console.log('Connected. Now testing...');
-
-        resolve();
-      });
-    });
-  },
-
-  // Code to stop browserstack local after end of test
-  onComplete: (capabilties, specs) => {
-    console.log("Closing local tunnel");
-    return new Promise( (resolve, reject) => {
-      exports.bs_local.stop( (error) => {
-        if (error) return reject(error);
-        console.log("Stopped BrowserStackLocal");
-
-        resolve();
-      });
-    });
-  }
 };
diff --git a/ios/examples/run-local-test/specs/local_test.js b/ios/examples/run-local-test/specs/local_test.js
index 94fdf1f..ef9e9d9 100644
--- a/ios/examples/run-local-test/specs/local_test.js
+++ b/ios/examples/run-local-test/specs/local_test.js
@@ -3,7 +3,7 @@ var assert = require('assert');
 
 describe('BrowserStack Local Testing', () => {
   it('can check tunnel working', async () => {
-    var searchSelector = await $(`~Test BrowserStackLocal connection`);
+    var searchSelector = await $(`~TestBrowserStackLocal`);
     await searchSelector.waitForDisplayed({ timeout: 30000 });
     await searchSelector.click();
 
@@ -25,6 +25,6 @@ describe('BrowserStack Local Testing', () => {
     }
 
     var matchedString = await testElement.getText();
-    assert(matchedString == 'Response is: Up and running');
+    assert(matchedString.includes('Up and running'));
   });
 });
diff --git a/ios/examples/run-multiple-test/multiple.conf.js b/ios/examples/run-multiple-test/multiple.conf.js
index b67b1eb..98949c9 100644
--- a/ios/examples/run-multiple-test/multiple.conf.js
+++ b/ios/examples/run-multiple-test/multiple.conf.js
@@ -9,13 +9,14 @@ exports.config = {
   exclude: [],
 
   capabilities: [{
-    project: "First Webdriverio iOS Project",
-    build: 'Webdriverio iOS Multiple',
-    name: 'multiple_test',
-    device: 'iPhone 11 Pro',
-    os_version: "13",
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.debug': true
+    platformName: "ios",
+    "appium:platformVersion": "13",
+    "appium:deviceName": 'iPhone 11 Pro',
+    'bstack:options' : {
+      "projectName" : "First Webdriverio iOS Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   }],
 
   logLevel: 'info',
@@ -25,6 +26,9 @@ exports.config = {
   waitforTimeout: 10000,
   connectionRetryTimeout: 90000,
   connectionRetryCount: 3,
+  services: [['browserstack', {
+    app: 'assets/SampleIosApp.ipa'
+  }]],
 
   framework: 'mocha',
   mochaOpts: {
diff --git a/ios/examples/run-parallel-test/parallel.conf.js b/ios/examples/run-parallel-test/parallel.conf.js
index 8012251..f4bc213 100644
--- a/ios/examples/run-parallel-test/parallel.conf.js
+++ b/ios/examples/run-parallel-test/parallel.conf.js
@@ -10,19 +10,20 @@ exports.config = {
 
   maxInstances: 10,
   commonCapabilities: {
-    project: "First Webdriverio iOS Project",
-    build: 'Webdriverio iOS Parallel',
-    name: 'parallel_test',
-    app: process.env.BROWSERSTACK_APP_ID || 'bs://',
-    'browserstack.debug': true
+    platformName: "ios",
+    'bstack:options' : {
+      "projectName" : "First Webdriverio iOS Project",
+      "buildName" : "browserstack-build-1",
+      "debug" : "true"
+    }
   },
 
   capabilities: [{
-    device: "iPhone 11 Pro",
-    os_version: "13"
+    "appium:deviceName": 'iPhone 11 Pro',
+    "appium:platformVersion": "13",
   }, {
-    device: "iPhone 11 Pro Max",
-    os_version: "13"
+    "appium:deviceName": 'iPhone 11 Pro Max',
+    "appium:platformVersion": "13",
   }],
 
   logLevel: 'info',
@@ -32,6 +33,9 @@ exports.config = {
   waitforTimeout: 10000,
   connectionRetryTimeout: 90000,
   connectionRetryCount: 3,
+  services: [['browserstack', {
+    app: 'assets/SampleIosApp.ipa'
+  }]],
 
   framework: 'mocha',
   mochaOpts: {
@@ -41,6 +45,6 @@ exports.config = {
 };
 
 // Code to support common capabilities
-exports.config.capabilities.forEach(function(caps){
-  for(var i in exports.config.commonCapabilities) caps[i] = caps[i] || exports.config.commonCapabilities[i];
-});
+var common_caps = exports.config.commonCapabilities
+var caps = exports.config.capabilities
+for (var i in caps) caps[i] = { ...caps[i], ...common_caps };
diff --git a/ios/package.json b/ios/package.json
index 9b5953d..d17726d 100644
--- a/ios/package.json
+++ b/ios/package.json
@@ -1,8 +1,8 @@
 {
   "name": "webdriverio-appium-app-browserstack",
   "version": "0.1.0",
-  "readme": "WendriverIO Integration with [BrowserStack](https://www.browserstack.com)",
-  "description": "Selenium examples for WebdriverIO and BrowserStack App Automate",
+  "readme": "WebdriverIO Integration with [BrowserStack](https://www.browserstack.com)",
+  "description": "Appium examples for WebdriverIO and BrowserStack App Automate",
   "scripts": {
     "test": "npm run first && npm run local && npm run parallel",
     "first": "./node_modules/.bin/wdio examples/run-first-test/first.conf.js",
@@ -25,9 +25,11 @@
   },
   "homepage": "https://github.com/browserstack/webdriverio-appium-app-browserstack#readme",
   "dependencies": {
-    "browserstack-local": "^1.4.5",
-    "@wdio/cli": "^5.20.1",
-    "@wdio/local-runner": "^5.20.1",
-    "@wdio/mocha-framework": "^5.18.7"
+    "@wdio/cli": "^7.23.0"
+  },
+  "devDependencies": {
+    "@wdio/browserstack-service": "^7.25.0",
+    "@wdio/local-runner": "^7.25.0",
+    "@wdio/mocha-framework": "^7.25.0"
   }
 }