diff --git a/README.md b/README.md
index 0bdfac2..c0e0c8f 100644
--- a/README.md
+++ b/README.md
@@ -4,147 +4,156 @@
 This directory contains Tempest tests to cover the contrail project, as well
 as a plugin to automatically load these tests into tempest. This is a set of
 integration tests to be run against a live open-contrail cluster. Tempest has
-testcases for Contrail API validation, scenarios, and other specific tests
+test-cases for Contrail API validation, scenarios, and other specific tests
 useful in validating an open-contrail deployment.
 
 See the tempest plugin docs for information on using it:
-http://docs.openstack.org/developer/tempest/plugin.html#using-plugins
+
+[http://docs.openstack.org/developer/tempest/plugin.html#using-plugins](http://docs.openstack.org/developer/tempest/plugin.html#using-plugins)
 
 See the tempest docs for information on writing new tests etc:
-http://docs.openstack.org/developer/tempest/
+
+[http://docs.openstack.org/developer/tempest/](http://docs.openstack.org/developer/tempest/)
+
 
 Quickstart
 ----------
 
-To run tungstent-tempest, you must first have `Tempest`_ installed and configured
+#Tempest Installation
+
+To run *tungsten-tempest*, you must first have `Tempest`_ installed and configured 
 properly. Please reference Tempest's `Quickstart`_ guide to do so and for all
-exact details. Follow all the steps outlined therein. 
+exact details. Follow all the steps outlined therein.
 
-   Here are some sample steps:
+	Here are some sample steps:
 
-   $ git clone https://git.openstack.org/openstack/tempest
-   $ cd tempest
-   $ pip install -r requirements.txt
-   $ pip install -r test-requirements.txt
-   $ pip install tox
-   $ pip install tempest
+	$ git clone https://git.openstack.org/openstack/tempest
+	$ cd tempest
+	$ pip install -r requirements.txt
+	$ pip install -r test-requirements.txt
+	$ pip install tox
+	$ pip install tempest
 
-   Now below command should show you list of avaiable tempest test cases.
+Now below command should show you list of available tempest test cases.
 
-   $ ostestr -l
+	$ ostestr -l
 
 You can install all these including tempest in a virtual
 environment. If virtual environment is not installed, then install it using
-"sud apt-get install python-virtualenv". Afterward, proceed with the steps below.
+"`sudo apt-get install python-virtualenv`". Afterward, proceed with the steps below.
 
-#. Second, you need to install Patrole. This is done with pip after you check out
-   the Patrole repo. Please reference `Patrole'`_'s `Quickstart`_ guide for further
-   details.
+#Patrole Installation
+
+This is done with pip after you check out the [Patrole repo](https://github.com/openstack/patrole "Patrole repo"). Please reference `Patrole` [Quickstart](https://github.com/openstack/patrole/blob/master/README.rst "Quickstart") guide for further details.
 
     Here are some sample steps:
 
-    $ git clone https://git.openstack.org/openstack/patrole
-    $ cd patrole
-    $ pip install -e .
+	$ git clone https://git.openstack.org/openstack/patrole
+	$ cd patrole
+	$ pip install -e .
 
-   This can be done within a venv.
+NOTE: This can be done within a venv.
+Now below command should show you list of available Patrole test cases.
+	
+	$ ostestr -l | grep patrole
 
-   Now below command should show you list of avaiable Patrole test cases.
+#Tungsten-tempest Installation
 
-   $ ostestr -l | grep patrole
+This is done with pip after you check out the tungsten-tempest repo::
 
-#. Then you need to install tungsten-tempest. This is done with pip after you check out
-   the tungsten-tempest repo::
+	$ git clone https://git.openstack.org/tungsten/tungsten-tempest
+	$ pip install -e tungsten_tempest/
 
-   $ git clone https://git.openstack.org/tungsten/tungsten-tempest
-   $ pip install -e tungsten_tempest/
+NOTE: This can be done within a venv.
+Now below command should show you list of available tungsten-tempest test cases.
 
-   This can be done within a venv.
+	$ ostestr -l | grep tungsten
 
-   Now below command should show you list of avaiable tungsten-tempest test cases.
+#Configuration
 
-   $ ostestr -l | grep tungsten
-  
-#. Next you must properly configure tempest, which is relatively
-   straightforward. For details on configuring tempest refer to the
-   :ref:`tempest-configuration`.
+You must properly configure tempest, which is relatively straightforward. For details on configuring tempest refer to the [tempest-configuration](https://github.com/openstack/tempest/blob/master/doc/source/configuration.rst "tempest-configuration").
 
-#. Next you must properly configure Patrole, which is relatively
-   straightforward. For details on configuring Patrole refer to the
-   :ref:`patrole-configuration`.
+Next you must properly configure Patrole, which is relatively straightforward. For details on configuring Patrole refer to the [patrole-configuration](https://github.com/openstack/patrole/blob/master/doc/source/configuration.rst "patrole-configuration")
 
-#. Next you must properly configure tungsten-fabric, which is relatively
-   straightforward. For details on configuring tungsten-fabirc refer to the
-   :ref:`tungsten-configuration`.
+Next you must properly configure tungsten-fabric, which is relatively straightforward too. For details on configuring tungsten-fabric refer to the :ref:`tungsten-configuration`.
 
-    After comfiguring tempmest.conf as per tempest and Patrole requirements, please
-    make below changes too in the patrole section of tempest.conf
+After comfiguring tempmest.conf as per tempest and Patrole requirements, please make below changes too in the patrole section of tempest.conf:
 
     enable_rbac must be true.
-    test_custom_requirements must be true if you want to run tests against a
-    ``custom_requirements_file`` which defines RBAC requirements.
-    custom_requirements_file must be absolute path of file path of the YAML
-    file that defines your RBAC requirements.
 
-    For the details about these flags please refer ``patrole.conf.sample``_ file.
+    test_custom_requirements must be true if you want to run tests against a `custom_requirements_file` which defines RBAC requirements.
 
-#. Make sure you have contrail endpoints in keystone catalog-list already like
-   sdn-l-config-*. Otherwise configure below two keys under [sdn] section
-   of tempest.conf.
+    custom_requirements_file must be absolute path of file path of the YAML file that defines your RBAC requirements.
+
+For the details about these flags please refer [patrole.conf.sample](https://github.com/openstack/patrole/blob/master/etc/patrole.conf.sample "patrole.conf.sample") file.
+
+
+**NOTE:** Make sure you have contrail endpoints in keystone catalog-list already like sdn-l-config-*. Otherwise configure below two keys under [sdn] section of tempest.conf.
 
      [sdn]
      endpoint_type = <public|admin|internal|publicURL|adminURL|internalURL>
      catalog_type = <Catalog type of the SDN service, default sdn-l-config>
 
-#. Once the configuration is done you're now ready to run tungsten-fabric.
-   This can be done using the `tempest_run`_ command. This can be done by running::
+#Running tungsten-tempest 
 
-     $ tempest run --regex '^tungsten_tempest_plugin\.tests\.api'
+Once the configuration is done you're now ready to run tungsten-fabric.
 
-   There is also the option to use testr directly, or any `testr`_ based test
-   runner, like `ostestr`_. For example, from the workspace dir run::
+The easiest way to run is using any testr utilities like below:
 
-     $ stestr --regex '(?!.*\[.*\bslow\b.*\])(^tungsten_tempest_plugin\.tests\.api))'
+	$ ostestr run --regex tungsten_tempest_plugin.tests.api
 
-   will run the same set of tests as the default gate jobs.
+This can also be done using the `tempest_run`_ command. This can be done by running::
 
-   You can also run tungsten_tempest tests using `tox`_. To do so, ``cd`` into the
-   **Tempest** directory and run::
+	$ tempest run --regex '^tungsten_tempest_plugin\.tests\.api'
 
-     $ tox -eall-plugin -- tungstent_tempest_plugin.tests.api
+There is also the option to use testr directly, or any `testr`_ based test runner, like `ostestr`_. For example, from the work-space dir run::
 
-#. Log information from tests is captured in ``tempest.log`` under the Tempest
-   repository. Some Patrole debugging information is captured in that log
-   related to expected test results and :ref:`role-overriding`.
+	$ stestr --regex '(?!.*\[.*\bslow\b.*\])(^tungsten_tempest_plugin\.tests\.api))'
 
-   More detailed RBAC testing log output is emitted to ``tungsten_log``.
-   To configure Patrole's logging, see the :ref:`tungsten-tempest-configuration` guide.
+will run the same set of tests as the default gate jobs.
 
-.. _Tempest: https://github.com/openstack/tempest
-.. _Quickstart: https://docs.openstack.org/tempest/latest/overview.html#quickstart
-.. _tempest_run: https://docs.openstack.org/tempest/latest/run.html
-.. _testr: https://testrepository.readthedocs.org/en/latest/MANUAL.html
-.. _ostestr: https://docs.openstack.org/os-testr/latest/
-.. _tox: https://tox.readthedocs.io/en/latest/
+You can also run tungsten_tempest tests using `tox`_. To do so, ``cd`` into the **Tempest** directory and run::
 
-RBAC Tests
+	$ tox -eall-plugin -- tungstent_tempest_plugin.tests.api
+
+#Log Information
+
+Log information from tests is captured in ``tempest.log`` under the Tempest repository. Some Patrole debugging information is captured in that log related to expected test results and :ref:`role-overriding`.
+
+More detailed RBAC testing log output is emitted to ``tungsten_log``.
+
+To configure tungsten-tempest's logging, see the :ref:`tungsten-tempest-configuration` guide.
+
+
+Tempest: [https://github.com/openstack/tempest](https://github.com/openstack/tempest)
+
+Tempest Quickstart: [https://docs.openstack.org/tempest/latest/overview.html#quickstart](https://docs.openstack.org/tempest/latest/overview.html#quickstart)
+
+tempest_run: [https://docs.openstack.org/tempest/latest/run.html](https://docs.openstack.org/tempest/latest/run.html)
+
+testr: [https://testrepository.readthedocs.org/en/latest/MANUAL.html
+](https://testrepository.readthedocs.org/en/latest/MANUAL.html)
+
+ostestr: [https://docs.openstack.org/os-testr/latest/](https://docs.openstack.org/os-testr/latest/)
+
+tox: [https://tox.readthedocs.io/en/latest/](https://tox.readthedocs.io/en/latest/)
+
+
+
+#RBAC Tests
 ----------
 
-To change the role that the tungsten_tempest tests are being run as, edit
-``rbac_test_role`` in the ``patrole`` section of tempest.conf: ::
+To change the role that the tungsten_tempest tests are being run as, edit ``rbac_test_role`` in the ``patrole`` section of tempest.conf: ::
 
     [patrole]
     rbac_test_role = member
     ...
 
-.. note::
+**NOTE**::
 
-  The ``rbac_test_role`` is service-specific. member, for example,
-  is an arbitrary role, but by convention is used to designate the default
-  non-admin role in the system. Most tunsgtent_tempest tests should be run with
-  **admin** and **member** roles. However, other services may use entirely
-  different roles.
+The ``rbac_test_role`` is service-specific. member, for example, is an arbitrary role, but by convention is used to designate the default non-admin role in the system. Most tunsgtent_tempest tests should be run with **admin** and **member** roles. However, other services may use entirely different roles.
 
 For more information about the member role and its nomenclature,
+
 please see: `<https://ask.openstack.org/en/question/4759/member-vs-_member_/>`__.
 
diff --git a/README.rst b/README.rst
index 0bdfac2..c0e0c8f 100644
--- a/README.rst
+++ b/README.rst
@@ -4,147 +4,156 @@
 This directory contains Tempest tests to cover the contrail project, as well
 as a plugin to automatically load these tests into tempest. This is a set of
 integration tests to be run against a live open-contrail cluster. Tempest has
-testcases for Contrail API validation, scenarios, and other specific tests
+test-cases for Contrail API validation, scenarios, and other specific tests
 useful in validating an open-contrail deployment.
 
 See the tempest plugin docs for information on using it:
-http://docs.openstack.org/developer/tempest/plugin.html#using-plugins
+
+[http://docs.openstack.org/developer/tempest/plugin.html#using-plugins](http://docs.openstack.org/developer/tempest/plugin.html#using-plugins)
 
 See the tempest docs for information on writing new tests etc:
-http://docs.openstack.org/developer/tempest/
+
+[http://docs.openstack.org/developer/tempest/](http://docs.openstack.org/developer/tempest/)
+
 
 Quickstart
 ----------
 
-To run tungstent-tempest, you must first have `Tempest`_ installed and configured
+#Tempest Installation
+
+To run *tungsten-tempest*, you must first have `Tempest`_ installed and configured 
 properly. Please reference Tempest's `Quickstart`_ guide to do so and for all
-exact details. Follow all the steps outlined therein. 
+exact details. Follow all the steps outlined therein.
 
-   Here are some sample steps:
+	Here are some sample steps:
 
-   $ git clone https://git.openstack.org/openstack/tempest
-   $ cd tempest
-   $ pip install -r requirements.txt
-   $ pip install -r test-requirements.txt
-   $ pip install tox
-   $ pip install tempest
+	$ git clone https://git.openstack.org/openstack/tempest
+	$ cd tempest
+	$ pip install -r requirements.txt
+	$ pip install -r test-requirements.txt
+	$ pip install tox
+	$ pip install tempest
 
-   Now below command should show you list of avaiable tempest test cases.
+Now below command should show you list of available tempest test cases.
 
-   $ ostestr -l
+	$ ostestr -l
 
 You can install all these including tempest in a virtual
 environment. If virtual environment is not installed, then install it using
-"sud apt-get install python-virtualenv". Afterward, proceed with the steps below.
+"`sudo apt-get install python-virtualenv`". Afterward, proceed with the steps below.
 
-#. Second, you need to install Patrole. This is done with pip after you check out
-   the Patrole repo. Please reference `Patrole'`_'s `Quickstart`_ guide for further
-   details.
+#Patrole Installation
+
+This is done with pip after you check out the [Patrole repo](https://github.com/openstack/patrole "Patrole repo"). Please reference `Patrole` [Quickstart](https://github.com/openstack/patrole/blob/master/README.rst "Quickstart") guide for further details.
 
     Here are some sample steps:
 
-    $ git clone https://git.openstack.org/openstack/patrole
-    $ cd patrole
-    $ pip install -e .
+	$ git clone https://git.openstack.org/openstack/patrole
+	$ cd patrole
+	$ pip install -e .
 
-   This can be done within a venv.
+NOTE: This can be done within a venv.
+Now below command should show you list of available Patrole test cases.
+	
+	$ ostestr -l | grep patrole
 
-   Now below command should show you list of avaiable Patrole test cases.
+#Tungsten-tempest Installation
 
-   $ ostestr -l | grep patrole
+This is done with pip after you check out the tungsten-tempest repo::
 
-#. Then you need to install tungsten-tempest. This is done with pip after you check out
-   the tungsten-tempest repo::
+	$ git clone https://git.openstack.org/tungsten/tungsten-tempest
+	$ pip install -e tungsten_tempest/
 
-   $ git clone https://git.openstack.org/tungsten/tungsten-tempest
-   $ pip install -e tungsten_tempest/
+NOTE: This can be done within a venv.
+Now below command should show you list of available tungsten-tempest test cases.
 
-   This can be done within a venv.
+	$ ostestr -l | grep tungsten
 
-   Now below command should show you list of avaiable tungsten-tempest test cases.
+#Configuration
 
-   $ ostestr -l | grep tungsten
-  
-#. Next you must properly configure tempest, which is relatively
-   straightforward. For details on configuring tempest refer to the
-   :ref:`tempest-configuration`.
+You must properly configure tempest, which is relatively straightforward. For details on configuring tempest refer to the [tempest-configuration](https://github.com/openstack/tempest/blob/master/doc/source/configuration.rst "tempest-configuration").
 
-#. Next you must properly configure Patrole, which is relatively
-   straightforward. For details on configuring Patrole refer to the
-   :ref:`patrole-configuration`.
+Next you must properly configure Patrole, which is relatively straightforward. For details on configuring Patrole refer to the [patrole-configuration](https://github.com/openstack/patrole/blob/master/doc/source/configuration.rst "patrole-configuration")
 
-#. Next you must properly configure tungsten-fabric, which is relatively
-   straightforward. For details on configuring tungsten-fabirc refer to the
-   :ref:`tungsten-configuration`.
+Next you must properly configure tungsten-fabric, which is relatively straightforward too. For details on configuring tungsten-fabric refer to the :ref:`tungsten-configuration`.
 
-    After comfiguring tempmest.conf as per tempest and Patrole requirements, please
-    make below changes too in the patrole section of tempest.conf
+After comfiguring tempmest.conf as per tempest and Patrole requirements, please make below changes too in the patrole section of tempest.conf:
 
     enable_rbac must be true.
-    test_custom_requirements must be true if you want to run tests against a
-    ``custom_requirements_file`` which defines RBAC requirements.
-    custom_requirements_file must be absolute path of file path of the YAML
-    file that defines your RBAC requirements.
 
-    For the details about these flags please refer ``patrole.conf.sample``_ file.
+    test_custom_requirements must be true if you want to run tests against a `custom_requirements_file` which defines RBAC requirements.
 
-#. Make sure you have contrail endpoints in keystone catalog-list already like
-   sdn-l-config-*. Otherwise configure below two keys under [sdn] section
-   of tempest.conf.
+    custom_requirements_file must be absolute path of file path of the YAML file that defines your RBAC requirements.
+
+For the details about these flags please refer [patrole.conf.sample](https://github.com/openstack/patrole/blob/master/etc/patrole.conf.sample "patrole.conf.sample") file.
+
+
+**NOTE:** Make sure you have contrail endpoints in keystone catalog-list already like sdn-l-config-*. Otherwise configure below two keys under [sdn] section of tempest.conf.
 
      [sdn]
      endpoint_type = <public|admin|internal|publicURL|adminURL|internalURL>
      catalog_type = <Catalog type of the SDN service, default sdn-l-config>
 
-#. Once the configuration is done you're now ready to run tungsten-fabric.
-   This can be done using the `tempest_run`_ command. This can be done by running::
+#Running tungsten-tempest 
 
-     $ tempest run --regex '^tungsten_tempest_plugin\.tests\.api'
+Once the configuration is done you're now ready to run tungsten-fabric.
 
-   There is also the option to use testr directly, or any `testr`_ based test
-   runner, like `ostestr`_. For example, from the workspace dir run::
+The easiest way to run is using any testr utilities like below:
 
-     $ stestr --regex '(?!.*\[.*\bslow\b.*\])(^tungsten_tempest_plugin\.tests\.api))'
+	$ ostestr run --regex tungsten_tempest_plugin.tests.api
 
-   will run the same set of tests as the default gate jobs.
+This can also be done using the `tempest_run`_ command. This can be done by running::
 
-   You can also run tungsten_tempest tests using `tox`_. To do so, ``cd`` into the
-   **Tempest** directory and run::
+	$ tempest run --regex '^tungsten_tempest_plugin\.tests\.api'
 
-     $ tox -eall-plugin -- tungstent_tempest_plugin.tests.api
+There is also the option to use testr directly, or any `testr`_ based test runner, like `ostestr`_. For example, from the work-space dir run::
 
-#. Log information from tests is captured in ``tempest.log`` under the Tempest
-   repository. Some Patrole debugging information is captured in that log
-   related to expected test results and :ref:`role-overriding`.
+	$ stestr --regex '(?!.*\[.*\bslow\b.*\])(^tungsten_tempest_plugin\.tests\.api))'
 
-   More detailed RBAC testing log output is emitted to ``tungsten_log``.
-   To configure Patrole's logging, see the :ref:`tungsten-tempest-configuration` guide.
+will run the same set of tests as the default gate jobs.
 
-.. _Tempest: https://github.com/openstack/tempest
-.. _Quickstart: https://docs.openstack.org/tempest/latest/overview.html#quickstart
-.. _tempest_run: https://docs.openstack.org/tempest/latest/run.html
-.. _testr: https://testrepository.readthedocs.org/en/latest/MANUAL.html
-.. _ostestr: https://docs.openstack.org/os-testr/latest/
-.. _tox: https://tox.readthedocs.io/en/latest/
+You can also run tungsten_tempest tests using `tox`_. To do so, ``cd`` into the **Tempest** directory and run::
 
-RBAC Tests
+	$ tox -eall-plugin -- tungstent_tempest_plugin.tests.api
+
+#Log Information
+
+Log information from tests is captured in ``tempest.log`` under the Tempest repository. Some Patrole debugging information is captured in that log related to expected test results and :ref:`role-overriding`.
+
+More detailed RBAC testing log output is emitted to ``tungsten_log``.
+
+To configure tungsten-tempest's logging, see the :ref:`tungsten-tempest-configuration` guide.
+
+
+Tempest: [https://github.com/openstack/tempest](https://github.com/openstack/tempest)
+
+Tempest Quickstart: [https://docs.openstack.org/tempest/latest/overview.html#quickstart](https://docs.openstack.org/tempest/latest/overview.html#quickstart)
+
+tempest_run: [https://docs.openstack.org/tempest/latest/run.html](https://docs.openstack.org/tempest/latest/run.html)
+
+testr: [https://testrepository.readthedocs.org/en/latest/MANUAL.html
+](https://testrepository.readthedocs.org/en/latest/MANUAL.html)
+
+ostestr: [https://docs.openstack.org/os-testr/latest/](https://docs.openstack.org/os-testr/latest/)
+
+tox: [https://tox.readthedocs.io/en/latest/](https://tox.readthedocs.io/en/latest/)
+
+
+
+#RBAC Tests
 ----------
 
-To change the role that the tungsten_tempest tests are being run as, edit
-``rbac_test_role`` in the ``patrole`` section of tempest.conf: ::
+To change the role that the tungsten_tempest tests are being run as, edit ``rbac_test_role`` in the ``patrole`` section of tempest.conf: ::
 
     [patrole]
     rbac_test_role = member
     ...
 
-.. note::
+**NOTE**::
 
-  The ``rbac_test_role`` is service-specific. member, for example,
-  is an arbitrary role, but by convention is used to designate the default
-  non-admin role in the system. Most tunsgtent_tempest tests should be run with
-  **admin** and **member** roles. However, other services may use entirely
-  different roles.
+The ``rbac_test_role`` is service-specific. member, for example, is an arbitrary role, but by convention is used to designate the default non-admin role in the system. Most tunsgtent_tempest tests should be run with **admin** and **member** roles. However, other services may use entirely different roles.
 
 For more information about the member role and its nomenclature,
+
 please see: `<https://ask.openstack.org/en/question/4759/member-vs-_member_/>`__.
 
