diff --git a/osm_mon/core/auth.py b/osm_mon/core/auth.py
index bdc0498..7b61fe1 100644
--- a/osm_mon/core/auth.py
+++ b/osm_mon/core/auth.py
@@ -32,23 +32,23 @@
     def __init__(self):
         self.database_manager = DatabaseManager()
 
-    def store_auth_credentials(self, message):
-        values = json.loads(message.value)
+    def store_auth_credentials(self, creds_dict):
         credentials = VimCredentials()
-        credentials.uuid = values['_id']
-        credentials.name = values['name']
-        credentials.type = values['vim_type']
-        credentials.url = values['vim_url']
-        credentials.user = values['vim_user']
-        credentials.password = values['vim_password']
-        credentials.tenant_name = values['vim_tenant_name']
-        credentials.config = json.dumps(values['config'])
+        credentials.uuid = creds_dict['_id']
+        credentials.name = creds_dict['name']
+        credentials.type = creds_dict['vim_type']
+        credentials.url = creds_dict['vim_url']
+        credentials.user = creds_dict['vim_user']
+        credentials.password = creds_dict['vim_password']
+        credentials.tenant_name = creds_dict['vim_tenant_name']
+        credentials.config = json.dumps(creds_dict['config'])
         self.database_manager.save_credentials(credentials)
 
     def get_credentials(self, vim_uuid):
         return self.database_manager.get_credentials(vim_uuid)
 
-    def delete_auth_credentials(self, message):
-        # TODO
-        pass
+    def delete_auth_credentials(self, creds_dict):
+        credentials = self.get_credentials(creds_dict['_id'])
+        if credentials:
+            credentials.delete_instance()
 
diff --git a/osm_mon/core/database.py b/osm_mon/core/database.py
index 2191106..418dfbb 100644
--- a/osm_mon/core/database.py
+++ b/osm_mon/core/database.py
@@ -41,7 +41,7 @@
 
 
 class VimCredentials(BaseModel):
-    uuid = CharField()
+    uuid = CharField(unique=True)
     name = CharField()
     type = CharField()
     url = CharField()
@@ -51,17 +51,46 @@
     config = TextField()
 
 
+class Alarm(BaseModel):
+    alarm_id = CharField()
+    credentials = ForeignKeyField(VimCredentials, backref='alarms')
+
+
 class DatabaseManager:
     def create_tables(self):
         try:
             db.connect()
-            db.create_tables([VimCredentials])
+            db.create_tables([VimCredentials, Alarm])
             db.close()
         except Exception as e:
             log.exception("Error creating tables: ")
 
     def get_credentials(self, vim_uuid):
-        return VimCredentials.get(VimCredentials.uuid == vim_uuid)
+        return VimCredentials.get_or_none(VimCredentials.uuid == vim_uuid)
 
     def save_credentials(self, vim_credentials):
+        """Saves vim credentials. If a record with same uuid exists, overwrite it."""
+        exists = VimCredentials.get_or_none(VimCredentials.uuid == vim_credentials.uuid)
+        if exists:
+            vim_credentials.id = exists.id
         vim_credentials.save()
+
+    def get_credentials_for_alarm_id(self, alarm_id, vim_type):
+        alarm = Alarm.select() \
+            .where(Alarm.alarm_id == alarm_id) \
+            .join(VimCredentials) \
+            .where(VimCredentials.type == vim_type).get()
+        return alarm.credentials
+
+    def save_alarm(self, alarm_id, vim_uuid):
+        """Saves alarm. If a record with same id and vim_uuid exists, overwrite it."""
+        alarm = Alarm()
+        alarm.alarm_id = alarm_id
+        creds = VimCredentials.get(VimCredentials.uuid == vim_uuid)
+        alarm.credentials = creds
+        exists = Alarm.select(Alarm.alarm_id == alarm.alarm_id) \
+            .join(VimCredentials) \
+            .where(VimCredentials.uuid == vim_uuid)
+        if len(exists):
+            alarm.id = exists[0].id
+        alarm.save()
diff --git a/osm_mon/core/message_bus/common_consumer.py b/osm_mon/core/message_bus/common_consumer.py
index 27a4188..e79e98a 100755
--- a/osm_mon/core/message_bus/common_consumer.py
+++ b/osm_mon/core/message_bus/common_consumer.py
@@ -35,7 +35,6 @@
 from kafka import KafkaConsumer
 
 from osm_mon.plugins.OpenStack.Aodh import alarming
-from osm_mon.plugins.OpenStack.common import Common
 from osm_mon.plugins.OpenStack.Gnocchi import metrics
 
 from osm_mon.plugins.CloudWatch.plugin_alarm import plugin_alarms
@@ -65,8 +64,6 @@
 database_manager.create_tables()
 
 # Create OpenStack alarming and metric instances
-auth_token = None
-openstack_auth = Common()
 openstack_metrics = metrics.Metrics()
 openstack_alarms = alarming.Alarming()
 
@@ -98,6 +95,7 @@
 for message in common_consumer:
     log.info("Message arrived: %s", message)
     try:
+        values = json.loads(message.value)
         # Check the message topic
         if message.topic == "metric_request":
             # Check the vim desired by the message
@@ -105,9 +103,7 @@
 
             if vim_type == "openstack":
                 log.info("This message is for the OpenStack plugin.")
-                openstack_metrics.metric_calls(
-                    message, openstack_auth, auth_token)
-
+                openstack_metrics.metric_calls(message)
             elif vim_type == "aws":
                 log.info("This message is for the CloudWatch plugin.")
                 aws_conn = aws_connection.setEnvironment()
@@ -126,7 +122,7 @@
             vim_type = get_vim_type(message)
             if vim_type == "openstack":
                 log.info("This message is for the OpenStack plugin.")
-                openstack_alarms.alarming(message, openstack_auth, auth_token)
+                openstack_alarms.alarming(message)
 
             elif vim_type == "aws":
                 log.info("This message is for the CloudWatch plugin.")
@@ -143,19 +139,16 @@
 
         elif message.topic == "vim_account":
             if message.key == "create" or message.key == "edit":
-                auth_manager.store_auth_credentials(message)
+                auth_manager.store_auth_credentials(values)
             if message.key == "delete":
-                auth_manager.delete_auth_credentials(message)
+                auth_manager.delete_auth_credentials(values)
 
-        # TODO: Remove in the near future. Modify tests accordingly.
+        # TODO: Remove in the near future when all plugins support vim_uuid. Modify tests accordingly.
         elif message.topic == "access_credentials":
             # Check the vim desired by the message
             vim_type = get_vim_type(message)
-            if vim_type == "openstack":
-                log.info("This message is for the OpenStack plugin.")
-                auth_token = openstack_auth._authenticate(message=message)
 
-            elif vim_type == "aws":
+            if vim_type == "aws":
                 log.info("This message is for the CloudWatch plugin.")
                 aws_access_credentials.access_credential_calls(message)
 
diff --git a/osm_mon/core/models/vim_account_delete.json b/osm_mon/core/models/vim_account_delete.json
new file mode 100644
index 0000000..7f919d1
--- /dev/null
+++ b/osm_mon/core/models/vim_account_delete.json
@@ -0,0 +1,30 @@
+/*
+ Copyright 2018 Whitestack, LLC
+ *************************************************************
+
+ This file is part of OSM Monitoring module
+ All Rights Reserved to Whitestack, LLC
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ For those usages not covered by the Apache License, Version 2.0 please
+ contact: bdiaz@whitestack.com or glavado@whitestack.com
+*/
+{
+  "schema_version": { "type": "string" },
+  "schema_type": { "type": "string" },
+  "_id": { "type": "string" },
+  "required": [ "schema_version",
+                "schema_type",
+                "_id" ]
+}
diff --git a/osm_mon/plugins/OpenStack/Aodh/alarming.py b/osm_mon/plugins/OpenStack/Aodh/alarming.py
index abd6690..156a0f1 100644
--- a/osm_mon/plugins/OpenStack/Aodh/alarming.py
+++ b/osm_mon/plugins/OpenStack/Aodh/alarming.py
@@ -22,14 +22,15 @@
 """Carry out alarming requests via Aodh API."""
 
 import json
-
 import logging
 
-from osm_mon.core.message_bus.producer import KafkaProducer
+import six
 
+from osm_mon.core.database import DatabaseManager
+from osm_mon.core.message_bus.producer import KafkaProducer
+from osm_mon.plugins.OpenStack.common import Common
 from osm_mon.plugins.OpenStack.response import OpenStack_Response
 from osm_mon.plugins.OpenStack.settings import Config
-from osm_mon.plugins.OpenStack.Gnocchi.metrics import Metrics
 
 log = logging.getLogger(__name__)
 
@@ -46,8 +47,8 @@
 
 METRIC_MAPPINGS = {
     "average_memory_utilization": "memory.percent",
-    "disk_read_ops": "disk.disk_ops",
-    "disk_write_ops": "disk.disk_ops",
+    "disk_read_ops": "disk.read.requests",
+    "disk_write_ops": "disk.write.requests",
     "disk_read_bytes": "disk.read.bytes",
     "disk_write_bytes": "disk.write.bytes",
     "packets_dropped": "interface.if_dropped",
@@ -78,12 +79,9 @@
         """Create the OpenStack alarming instance."""
         # Initialize configuration and notifications
         config = Config.instance()
-        config.read_environ("aodh")
+        config.read_environ()
 
-        # Initialise authentication for API requests
-        self.auth_token = None
-        self.endpoint = None
-        self.common = None
+        self._database_manager = DatabaseManager()
 
         # Use the Response class to generate valid json response messages
         self._response = OpenStack_Response()
@@ -91,39 +89,30 @@
         # Initializer a producer to send responses back to SO
         self._producer = KafkaProducer("alarm_response")
 
-    def alarming(self, message, common, auth_token):
+    def alarming(self, message):
         """Consume info from the message bus to manage alarms."""
         values = json.loads(message.value)
-        self.common = common
 
         log.info("OpenStack alarm action required.")
+        vim_uuid = values['vim_uuid']
 
-        # Generate and auth_token and endpoint for request
-        if auth_token is not None:
-            if self.auth_token != auth_token:
-                log.info("Auth_token for alarming set by access_credentials.")
-                self.auth_token = auth_token
-            else:
-                log.info("Auth_token has not been updated.")
-        else:
-            log.info("Using environment variables to set auth_token for Aodh.")
-            self.auth_token = self.common._authenticate()
+        auth_token = Common.get_auth_token(vim_uuid)
 
-        if self.endpoint is None:
-            log.info("Generating a new endpoint for Aodh.")
-            self.endpoint = self.common.get_endpoint("alarming")
+        alarm_endpoint = Common.get_endpoint("alarming", vim_uuid)
+        metric_endpoint = Common.get_endpoint("metric", vim_uuid)
 
         if message.key == "create_alarm_request":
             # Configure/Update an alarm
             alarm_details = values['alarm_create_request']
 
             alarm_id, alarm_status = self.configure_alarm(
-                self.endpoint, self.auth_token, alarm_details)
+                alarm_endpoint, metric_endpoint, auth_token, alarm_details)
 
             # Generate a valid response message, send via producer
             try:
                 if alarm_status is True:
                     log.info("Alarm successfully created")
+                    self._database_manager.save_alarm(alarm_id, vim_uuid)
 
                 resp_message = self._response.generate_response(
                     'create_alarm_response', status=alarm_status,
@@ -134,15 +123,15 @@
                     'create_alarm_response', resp_message,
                     'alarm_response')
             except Exception as exc:
-                log.warn("Response creation failed: %s", exc)
+                log.exception("Response creation failed:")
 
         elif message.key == "list_alarm_request":
-            # Check for a specifed: alarm_name, resource_uuid, severity
+            # Check for a specified: alarm_name, resource_uuid, severity
             # and generate the appropriate list
             list_details = values['alarm_list_request']
 
             alarm_list = self.list_alarms(
-                self.endpoint, self.auth_token, list_details)
+                alarm_endpoint, auth_token, list_details)
 
             try:
                 # Generate and send a list response back
@@ -154,14 +143,14 @@
                     'list_alarm_response', resp_message,
                     'alarm_response')
             except Exception as exc:
-                log.warn("Failed to send a valid response back.")
+                log.exception("Failed to send a valid response back.")
 
         elif message.key == "delete_alarm_request":
             request_details = values['alarm_delete_request']
             alarm_id = request_details['alarm_uuid']
 
             resp_status = self.delete_alarm(
-                self.endpoint, self.auth_token, alarm_id)
+                alarm_endpoint, auth_token, alarm_id)
 
             # Generate and send a response message
             try:
@@ -174,14 +163,14 @@
                     'delete_alarm_response', resp_message,
                     'alarm_response')
             except Exception as exc:
-                log.warn("Failed to create delete reponse:%s", exc)
+                log.warn("Failed to create delete response:%s", exc)
 
         elif message.key == "acknowledge_alarm":
             # Acknowledge that an alarm has been dealt with by the SO
             alarm_id = values['ack_details']['alarm_uuid']
 
             response = self.update_alarm_state(
-                self.endpoint, self.auth_token, alarm_id)
+                alarm_endpoint, auth_token, alarm_id)
 
             # Log if an alarm was reset
             if response is True:
@@ -194,7 +183,7 @@
             alarm_details = values['alarm_update_request']
 
             alarm_id, status = self.update_alarm(
-                self.endpoint, self.auth_token, alarm_details)
+                alarm_endpoint, auth_token, alarm_details)
 
             # Generate a response for an update request
             try:
@@ -214,31 +203,28 @@
 
         return
 
-    def configure_alarm(self, endpoint, auth_token, values):
+    def configure_alarm(self, alarm_endpoint, metric_endpoint, auth_token, values):
         """Create requested alarm in Aodh."""
-        url = "{}/v2/alarms/".format(endpoint)
+        url = "{}/v2/alarms/".format(alarm_endpoint)
 
         # Check if the desired alarm is supported
         alarm_name = values['alarm_name'].lower()
         metric_name = values['metric_name'].lower()
         resource_id = values['resource_uuid']
 
-        if alarm_name not in ALARM_NAMES.keys():
-            log.warn("This alarm is not supported, by a valid metric.")
-            return None, False
-        if ALARM_NAMES[alarm_name] != metric_name:
-            log.warn("This is not the correct metric for this alarm.")
+        if metric_name not in METRIC_MAPPINGS.keys():
+            log.warn("This metric is not supported.")
             return None, False
 
         # Check for the required metric
-        metric_id = self.check_for_metric(auth_token, metric_name, resource_id)
+        metric_id = self.check_for_metric(auth_token, metric_endpoint, metric_name, resource_id)
 
         try:
             if metric_id is not None:
                 # Create the alarm if metric is available
                 payload = self.check_payload(values, metric_name, resource_id,
                                              alarm_name)
-                new_alarm = self.common._perform_request(
+                new_alarm = Common.perform_request(
                     url, auth_token, req_type="post", payload=payload)
                 return json.loads(new_alarm.text)['alarm_id'], True
             else:
@@ -251,10 +237,10 @@
 
     def delete_alarm(self, endpoint, auth_token, alarm_id):
         """Delete alarm function."""
-        url = "{}/v2/alarms/%s".format(endpoint) % (alarm_id)
+        url = "{}/v2/alarms/%s".format(endpoint) % alarm_id
 
         try:
-            result = self.common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="delete")
             if str(result.status_code) == "404":
                 log.info("Alarm doesn't exist: %s", result.status_code)
@@ -273,7 +259,7 @@
         a_list, name_list, sev_list, res_list = [], [], [], []
 
         # TODO(mcgoughh): for now resource_id is a mandatory field
-        # Check for a reqource is
+        # Check for a resource id
         try:
             resource = list_details['resource_uuid']
         except KeyError as exc:
@@ -299,7 +285,7 @@
 
         # Perform the request to get the desired list
         try:
-            result = self.common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
 
             if result is not None:
@@ -307,7 +293,7 @@
                 for alarm in json.loads(result.text):
                     rule = alarm['gnocchi_resources_threshold_rule']
                     if resource == rule['resource_id']:
-                        res_list.append(str(alarm))
+                        res_list.append(alarm)
                     if not res_list:
                         log.info("No alarms for this resource")
                         return a_list
@@ -318,23 +304,23 @@
                              name, sev)
                     for alarm in json.loads(result.text):
                         if name == alarm['name']:
-                            name_list.append(str(alarm))
+                            name_list.append(alarm)
                     for alarm in json.loads(result.text):
                         if sev == alarm['severity']:
-                            sev_list.append(str(alarm))
+                            sev_list.append(alarm)
                     name_sev_list = list(set(name_list).intersection(sev_list))
                     a_list = list(set(name_sev_list).intersection(res_list))
                 elif name is not None:
                     log.info("Returning a %s list of alarms.", name)
                     for alarm in json.loads(result.text):
                         if name == alarm['name']:
-                            name_list.append(str(alarm))
+                            name_list.append(alarm)
                     a_list = list(set(name_list).intersection(res_list))
                 elif sev is not None:
                     log.info("Returning %s severity alarm list.", sev)
                     for alarm in json.loads(result.text):
                         if sev == alarm['severity']:
-                            sev_list.append(str(alarm))
+                            sev_list.append(alarm)
                     a_list = list(set(sev_list).intersection(res_list))
                 else:
                     log.info("Returning an entire list of alarms.")
@@ -354,7 +340,7 @@
         payload = json.dumps("ok")
 
         try:
-            self.common._perform_request(
+            Common.perform_request(
                 url, auth_token, req_type="put", payload=payload)
             return True
         except Exception as exc:
@@ -368,15 +354,15 @@
 
         # Gets current configurations about the alarm
         try:
-            result = self.common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             alarm_name = json.loads(result.text)['name']
             rule = json.loads(result.text)['gnocchi_resources_threshold_rule']
             alarm_state = json.loads(result.text)['state']
             resource_id = rule['resource_id']
-            metric_name = rule['metric']
+            metric_name = [key for key, value in six.iteritems(METRIC_MAPPINGS) if value == rule['metric']][0]
         except Exception as exc:
-            log.warn("Failed to retreive existing alarm info: %s.\
+            log.warn("Failed to retrieve existing alarm info: %s.\
                      Can only update OSM alarms.", exc)
             return None, False
 
@@ -387,7 +373,7 @@
         # Updates the alarm configurations with the valid payload
         if payload is not None:
             try:
-                update_alarm = self.common._perform_request(
+                update_alarm = Common.perform_request(
                     url, auth_token, req_type="put", payload=payload)
 
                 return json.loads(update_alarm.text)['alarm_id'], True
@@ -402,15 +388,25 @@
         try:
             cfg = Config.instance()
             # Check state and severity
-            severity = values['severity'].lower()
+
+            severity = 'critical'
+            if 'severity' in values:
+                severity = values['severity'].lower()
+
             if severity == "indeterminate":
                 alarm_state = "insufficient data"
             if alarm_state is None:
                 alarm_state = "ok"
 
             statistic = values['statistic'].lower()
-            granularity = values['granularity']
-            resource_type = values['resource_type'].lower()
+
+            granularity = '300'
+            if 'granularity' in values:
+                granularity = values['granularity']
+
+            resource_type = 'generic'
+            if 'resource_type' in values:
+                resource_type = values['resource_type'].lower()
 
             # Try to configure the payload for the update/create request
             # Can only update: threshold, operation, statistic and
@@ -438,19 +434,18 @@
         url = "{}/v2/alarms/%s/state".format(endpoint) % alarm_id
 
         try:
-            alarm_state = self.common._perform_request(
+            alarm_state = Common.perform_request(
                 url, auth_token, req_type="get")
             return json.loads(alarm_state.text)
         except Exception as exc:
             log.warn("Failed to get the state of the alarm:%s", exc)
         return None
 
-    def check_for_metric(self, auth_token, m_name, r_id):
+    def check_for_metric(self, auth_token, metric_endpoint, m_name, r_id):
         """Check for the alarm metric."""
         try:
-            endpoint = self.common.get_endpoint("metric")
-            url = "{}/v1/metric?sort=name:asc".format(endpoint)
-            result = self.common._perform_request(
+            url = "{}/v1/metric?sort=name:asc".format(metric_endpoint)
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             metric_list = []
             metrics_partial = json.loads(result.text)
@@ -459,18 +454,18 @@
 
             while len(json.loads(result.text)) > 0:
                 last_metric_id = metrics_partial[-1]['id']
-                url = "{}/v1/metric?sort=name:asc&marker={}".format(endpoint, last_metric_id)
-                result = self.common._perform_request(
+                url = "{}/v1/metric?sort=name:asc&marker={}".format(metric_endpoint, last_metric_id)
+                result = Common.perform_request(
                     url, auth_token, req_type="get")
                 if len(json.loads(result.text)) > 0:
                     metrics_partial = json.loads(result.text)
                     for metric in metrics_partial:
                         metric_list.append(metric)
-
+            metric_id = None
             for metric in metric_list:
                 name = metric['name']
                 resource = metric['resource_id']
-                if (name == METRIC_MAPPINGS[m_name] and resource == r_id):
+                if name == METRIC_MAPPINGS[m_name] and resource == r_id:
                     metric_id = metric['id']
             log.info("The required metric exists, an alarm will be created.")
             return metric_id
diff --git a/osm_mon/plugins/OpenStack/Aodh/notifier.py b/osm_mon/plugins/OpenStack/Aodh/notifier.py
index b1beaa7..314548f 100644
--- a/osm_mon/plugins/OpenStack/Aodh/notifier.py
+++ b/osm_mon/plugins/OpenStack/Aodh/notifier.py
@@ -23,30 +23,27 @@
 #
 """A Webserver to send alarm notifications from Aodh to the SO."""
 import json
-
 import logging
-
-import os
-
 import sys
-
 import time
 
-from BaseHTTPServer import BaseHTTPRequestHandler
-from BaseHTTPServer import HTTPServer
+import os
+from six.moves.BaseHTTPServer import BaseHTTPRequestHandler
+from six.moves.BaseHTTPServer import HTTPServer
 
 # Initialise a logger for alarm notifier
-logging.basicConfig(filename='aodh_notify.log',
+
+logging.basicConfig(stream=sys.stdout,
                     format='%(asctime)s %(message)s',
-                    datefmt='%m/%d/%Y %I:%M:%S %p', filemode='a',
+                    datefmt='%m/%d/%Y %I:%M:%S %p',
                     level=logging.INFO)
 log = logging.getLogger(__name__)
 
-sys.path.append("/root/MON")
+sys.path.append(os.path.abspath(os.path.join(os.path.realpath(__file__), '..', '..', '..', '..', '..')))
 
+from osm_mon.core.database import DatabaseManager
 from osm_mon.core.message_bus.producer import KafkaProducer
 
-from osm_mon.plugins.OpenStack.Aodh.alarming import Alarming
 from osm_mon.plugins.OpenStack.common import Common
 from osm_mon.plugins.OpenStack.response import OpenStack_Response
 from osm_mon.plugins.OpenStack.settings import Config
@@ -80,54 +77,60 @@
         self.notify_alarm(json.loads(post_data))
 
     def notify_alarm(self, values):
-        """Send a notifcation repsonse message to the SO."""
-        # Initialiase configuration and authentication for response message
-        config = Config.instance()
-        config.read_environ("aodh")
-        self._alarming = Alarming()
-        self._common = Common()
-        self._response = OpenStack_Response()
-        self._producer = KafkaProducer('alarm_response')
+        """Send a notification response message to the SO."""
 
-        alarm_id = values['alarm_id']
-        auth_token = self._common._authenticate()
-        endpoint = self._common.get_endpoint("alarming")
+        try:
+            # Initialise configuration and authentication for response message
+            config = Config.instance()
+            config.read_environ()
+            response = OpenStack_Response()
+            producer = KafkaProducer('alarm_response')
 
-        # If authenticated generate and send response message
-        if (auth_token is not None and endpoint is not None):
-            url = "{}/v2/alarms/%s".format(endpoint) % alarm_id
+            database_manager = DatabaseManager()
 
-            # Get the resource_id of the triggered alarm
-            result = self._common._perform_request(
-                url, auth_token, req_type="get")
-            alarm_details = json.loads(result.text)
-            gnocchi_rule = alarm_details['gnocchi_resources_threshold_rule']
-            resource_id = gnocchi_rule['resource_id']
+            alarm_id = values['alarm_id']
+            # Get vim_uuid associated to alarm
+            creds = database_manager.get_credentials_for_alarm_id(alarm_id, 'openstack')
+            auth_token = Common.get_auth_token(creds.uuid)
+            endpoint = Common.get_endpoint("alarming", creds.uuid)
 
-            # Process an alarm notification if resource_id is valid
-            if resource_id is not None:
-                # Get date and time for response message
-                a_date = time.strftime("%d-%m-%Y") + " " + time.strftime("%X")
-                # Try generate and send response
-                try:
-                    resp_message = self._response.generate_response(
-                        'notify_alarm', a_id=alarm_id,
-                        r_id=resource_id,
-                        sev=values['severity'], date=a_date,
-                        state=values['current'], vim_type="OpenStack")
-                    self._producer.notify_alarm(
-                        'notify_alarm', resp_message, 'alarm_response')
-                    log.info("Sent an alarm response to SO: %s", resp_message)
-                except Exception as exc:
-                    log.warn("Couldn't notify SO of the alarm: %s", exc)
+            # If authenticated generate and send response message
+            if auth_token is not None and endpoint is not None:
+                url = "{}/v2/alarms/%s".format(endpoint) % alarm_id
+
+                # Get the resource_id of the triggered alarm
+                result = Common.perform_request(
+                    url, auth_token, req_type="get")
+                alarm_details = json.loads(result.text)
+                gnocchi_rule = alarm_details['gnocchi_resources_threshold_rule']
+                resource_id = gnocchi_rule['resource_id']
+
+                # Process an alarm notification if resource_id is valid
+                if resource_id is not None:
+                    # Get date and time for response message
+                    a_date = time.strftime("%d-%m-%Y") + " " + time.strftime("%X")
+                    # Try generate and send response
+                    try:
+                        resp_message = response.generate_response(
+                            'notify_alarm', a_id=alarm_id,
+                            r_id=resource_id,
+                            sev=values['severity'], date=a_date,
+                            state=values['current'], vim_type="openstack")
+                        producer.notify_alarm(
+                            'notify_alarm', resp_message, 'alarm_response')
+                        log.info("Sent an alarm response to SO: %s", resp_message)
+                    except Exception as exc:
+                        log.exception("Couldn't notify SO of the alarm:")
+                else:
+                    log.warn("No resource_id for alarm; no SO response sent.")
             else:
-                log.warn("No resource_id for alarm; no SO response sent.")
-        else:
-            log.warn("Authentication failure; SO notification not sent.")
+                log.warn("Authentication failure; SO notification not sent.")
+        except:
+            log.exception("Could not notify alarm.")
 
 
 def run(server_class=HTTPServer, handler_class=NotifierHandler, port=8662):
-    """Run the webserver application to retreive alarm notifications."""
+    """Run the webserver application to retrieve alarm notifications."""
     try:
         server_address = ('', port)
         httpd = server_class(server_address, handler_class)
@@ -137,6 +140,7 @@
     except Exception as exc:
         log.warn("Failed to start webserver, %s", exc)
 
+
 if __name__ == "__main__":
     from sys import argv
 
diff --git a/osm_mon/plugins/OpenStack/Gnocchi/metrics.py b/osm_mon/plugins/OpenStack/Gnocchi/metrics.py
index d3d46d3..1dc9496 100644
--- a/osm_mon/plugins/OpenStack/Gnocchi/metrics.py
+++ b/osm_mon/plugins/OpenStack/Gnocchi/metrics.py
@@ -27,7 +27,10 @@
 
 import time
 
+import six
+
 from osm_mon.core.message_bus.producer import KafkaProducer
+from osm_mon.plugins.OpenStack.common import Common
 
 from osm_mon.plugins.OpenStack.response import OpenStack_Response
 from osm_mon.plugins.OpenStack.settings import Config
@@ -38,7 +41,7 @@
     "average_memory_utilization": "memory.percent",
     "disk_read_ops": "disk.read.requests",
     "disk_write_ops": "disk.write.requests",
-    "digsk_read_bytes": "disk.read.bytes",
+    "disk_read_bytes": "disk.read.bytes",
     "disk_write_bytes": "disk.write.bytes",
     "packets_dropped": "interface.if_dropped",
     "packets_received": "interface.if_packets",
@@ -62,12 +65,10 @@
         """Initialize the metric actions."""
         # Configure an instance of the OpenStack metric plugin
         config = Config.instance()
-        config.read_environ("gnocchi")
+        config.read_environ()
 
         # Initialise authentication for API requests
-        self.auth_token = None
-        self.endpoint = None
-        self._common = None
+        self._common = Common()
 
         # Use the Response class to generate valid json response messages
         self._response = OpenStack_Response()
@@ -75,32 +76,20 @@
         # Initializer a producer to send responses back to SO
         self._producer = KafkaProducer("metric_response")
 
-    def metric_calls(self, message, common, auth_token):
+    def metric_calls(self, message):
         """Consume info from the message bus to manage metric requests."""
         values = json.loads(message.value)
-        self._common = common
         log.info("OpenStack metric action required.")
 
-        # Generate and auth_token and endpoint for request
-        if auth_token is not None:
-            if self.auth_token != auth_token:
-                log.info("Auth_token for metrics set by access_credentials.")
-                self.auth_token = auth_token
-            else:
-                log.info("Auth_token has not been updated.")
-        else:
-            log.info("Using environment variables to set Gnocchi auth_token.")
-            self.auth_token = self._common._authenticate()
+        auth_token = Common.get_auth_token(values['vim_uuid'])
 
-        if self.endpoint is None:
-            log.info("Generating a new endpoint for Gnocchi.")
-            self.endpoint = self._common.get_endpoint("metric")
+        endpoint = Common.get_endpoint("metric", values['vim_uuid'])
 
         if message.key == "create_metric_request":
             # Configure metric
             metric_details = values['metric_create']
             metric_id, resource_id, status = self.configure_metric(
-                self.endpoint, self.auth_token, metric_details)
+                endpoint, auth_token, metric_details)
 
             # Generate and send a create metric response
             try:
@@ -118,7 +107,7 @@
         elif message.key == "read_metric_data_request":
             # Read all metric data related to a specified metric
             timestamps, metric_data = self.read_metric_data(
-                self.endpoint, self.auth_token, values)
+                endpoint, auth_token, values)
 
             # Generate and send a response message
             try:
@@ -140,7 +129,7 @@
             # delete the specified metric in the request
             metric_id = values['metric_uuid']
             status = self.delete_metric(
-                self.endpoint, self.auth_token, metric_id)
+                endpoint, auth_token, metric_id)
 
             # Generate and send a response message
             try:
@@ -165,7 +154,7 @@
             metric_name = req_details['metric_name']
             resource_id = req_details['resource_uuid']
             metric_id = self.get_metric_id(
-                self.endpoint, self.auth_token, metric_name, resource_id)
+                endpoint, auth_token, metric_name, resource_id)
 
             # Generate and send a response message
             try:
@@ -184,7 +173,7 @@
             list_details = values['metrics_list_request']
 
             metric_list = self.list_metrics(
-                self.endpoint, self.auth_token, list_details)
+                endpoint, auth_token, list_details)
 
             # Generate and send a response message
             try:
@@ -228,7 +217,7 @@
                 res_url = base_url.format(endpoint) % resource_id
                 payload = {metric_name: {'archive_policy_name': 'high',
                                          'unit': values['metric_unit']}}
-                result = self._common._perform_request(
+                result = Common.perform_request(
                     res_url, auth_token, req_type="post",
                     payload=json.dumps(payload))
                 # Get id of newly created metric
@@ -252,7 +241,7 @@
                                                    'metrics': {
                                                        metric_name: metric}})
 
-                    resource = self._common._perform_request(
+                    resource = Common.perform_request(
                         url, auth_token, req_type="post",
                         payload=resource_payload)
 
@@ -276,10 +265,10 @@
 
     def delete_metric(self, endpoint, auth_token, metric_id):
         """Delete metric."""
-        url = "{}/v1/metric/%s".format(endpoint) % (metric_id)
+        url = "{}/v1/metric/%s".format(endpoint) % metric_id
 
         try:
-            result = self._common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="delete")
             if str(result.status_code) == "404":
                 log.warn("Failed to delete the metric.")
@@ -292,7 +281,6 @@
 
     def list_metrics(self, endpoint, auth_token, values):
         """List all metrics."""
-        url = "{}/v1/metric/".format(endpoint)
 
         # Check for a specified list
         try:
@@ -313,13 +301,23 @@
 
         try:
             url = "{}/v1/metric?sort=name:asc".format(endpoint)
-            result = self._common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             metrics = []
             metrics_partial = json.loads(result.text)
             for metric in metrics_partial:
                 metrics.append(metric)
 
+            while len(json.loads(result.text)) > 0:
+                last_metric_id = metrics_partial[-1]['id']
+                url = "{}/v1/metric?sort=name:asc&marker={}".format(endpoint, last_metric_id)
+                result = Common.perform_request(
+                    url, auth_token, req_type="get")
+                if len(json.loads(result.text)) > 0:
+                    metrics_partial = json.loads(result.text)
+                    for metric in metrics_partial:
+                        metrics.append(metric)
+
             if metrics is not None:
                 # Format the list response
                 if metric_name is not None and resource is not None:
@@ -353,7 +351,7 @@
 
         try:
             # Try return the metric id if it exists
-            result = self._common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             return json.loads(result.text)['metrics'][metric_name]
         except Exception:
@@ -362,6 +360,7 @@
 
     def get_metric_name(self, values):
         """Check metric name configuration and normalize."""
+        metric_name = None
         try:
             # Normalize metric name
             metric_name = values['metric_name'].lower()
@@ -371,7 +370,7 @@
         return metric_name, None
 
     def read_metric_data(self, endpoint, auth_token, values):
-        """Collectd metric measures over a specified time period."""
+        """Collect metric measures over a specified time period."""
         timestamps = []
         data = []
         try:
@@ -381,6 +380,7 @@
             collection_period = values['collection_period']
 
             # Define the start and end time based on configurations
+            # FIXME: Local timezone may differ from timezone set in Gnocchi, causing discrepancies in measures
             stop_time = time.strftime("%Y-%m-%d") + "T" + time.strftime("%X")
             end_time = int(round(time.time() * 1000))
             if collection_unit == 'YEAR':
@@ -395,7 +395,7 @@
                 "0": metric_id, "1": start_time, "2": stop_time}
 
             # Perform metric data request
-            metric_data = self._common._perform_request(
+            metric_data = Common.perform_request(
                 url, auth_token, req_type="get")
 
             # Generate a list of the requested timestamps and data
@@ -418,14 +418,14 @@
             # Only list OSM metrics
             name = None
             if row['name'] in METRIC_MAPPINGS.values():
-                for k,v in METRIC_MAPPINGS.iteritems():
+                for k,v in six.iteritems(METRIC_MAPPINGS):
                     if row['name'] == v:
                         name = k
                 metric = {"metric_name": name,
                           "metric_uuid": row['id'],
                           "metric_unit": row['unit'],
                           "resource_uuid": row['resource_id']}
-                resp_list.append(str(metric))
+                resp_list.append(metric)
             # Generate metric_name specific list
             if metric_name is not None and name is not None:
                 if metric_name in METRIC_MAPPINGS.keys() and row['name'] == METRIC_MAPPINGS[metric_name]:
@@ -433,7 +433,7 @@
                               "metric_uuid": row['id'],
                               "metric_unit": row['unit'],
                               "resource_uuid": row['resource_id']}
-                    name_list.append(str(metric))
+                    name_list.append(metric)
             # Generate resource specific list
             if resource is not None and name is not None:
                 if row['resource_id'] == resource:
@@ -441,13 +441,12 @@
                               "metric_uuid": row['id'],
                               "metric_unit": row['unit'],
                               "resource_uuid": row['resource_id']}
-                    res_list.append(str(metric))
+                    res_list.append(metric)
 
         # Join required lists
         if metric_name is not None and resource is not None:
-            intersection_set = set(res_list).intersection(name_list)
-            intersection = list(intersection_set)
-            return intersection
+            # Return intersection of res_list and name_list
+            return [i for i in res_list for j in name_list if i['metric_uuid'] == j['metric_uuid']]
         elif metric_name is not None:
             return name_list
         elif resource is not None:
diff --git a/osm_mon/plugins/OpenStack/common.py b/osm_mon/plugins/OpenStack/common.py
index 4401d0a..0c5e7c6 100644
--- a/osm_mon/plugins/OpenStack/common.py
+++ b/osm_mon/plugins/OpenStack/common.py
@@ -20,15 +20,13 @@
 # contact: helena.mcgough@intel.com or adrian.hoban@intel.com
 ##
 """Common methods for the OpenStack plugins."""
-import json
 
 import logging
 
+import requests
 from keystoneclient.v3 import client
 
-from osm_mon.plugins.OpenStack.settings import Config
-
-import requests
+from osm_mon.core.auth import AuthManager
 
 __author__ = "Helena McGough"
 
@@ -40,73 +38,36 @@
 
     def __init__(self):
         """Create the common instance."""
-        self._auth_token = None
-        self._ks = None
-        self.openstack_url = None
-        self.user = None
-        self.password = None
-        self.tenant = None
+        self.auth_manager = AuthManager()
 
-    def _authenticate(self, message=None):
+    @staticmethod
+    def get_auth_token(vim_uuid):
         """Authenticate and/or renew the authentication token."""
-        if self._auth_token is not None:
-            return self._auth_token
+        auth_manager = AuthManager()
+        creds = auth_manager.get_credentials(vim_uuid)
+        ks = client.Client(auth_url=creds.url,
+                           username=creds.user,
+                           password=creds.password,
+                           tenant_name=creds.tenant_name)
+        return ks.auth_token
 
-        if message is not None:
-            values = json.loads(message.value)['access_config']
-            self.openstack_url = values['openstack_site']
-            self.user = values['user']
-            self.password = values['password']
-            self.tenant = values['vim_tenant_name']
-
-            try:
-                # try to authenticate with supplied access_credentials
-                self._ks = client.Client(auth_url=self.openstack_url,
-                                         username=self.user,
-                                         password=self.password,
-                                         tenant_name=self.tenant)
-                self._auth_token = self._ks.auth_token
-                log.info("Authenticating with access_credentials from SO.")
-                return self._auth_token
-            except Exception as exc:
-                log.warn("Authentication failed with access_credentials: %s",
-                         exc)
-
-        else:
-            log.info("Access_credentials were not sent from SO.")
-
-        # If there are no access_credentials or they fail use env variables
-        try:
-            cfg = Config.instance()
-            self._ks = client.Client(auth_url=cfg.OS_AUTH_URL,
-                                     username=cfg.OS_USERNAME,
-                                     password=cfg.OS_PASSWORD,
-                                     tenant_name=cfg.OS_TENANT_NAME)
-            log.info("Authenticating with environment varialbles.")
-            self._auth_token = self._ks.auth_token
-        except Exception as exc:
-
-            log.warn("Authentication failed: %s", exc)
-
-            self._auth_token = None
-
-        return self._auth_token
-
-    def get_endpoint(self, service_type):
+    @staticmethod
+    def get_endpoint(service_type, vim_uuid):
         """Get the endpoint for Gnocchi/Aodh."""
-        try:
-            return self._ks.service_catalog.url_for(
-                service_type=service_type,
-                endpoint_type='publicURL',
-                region_name='regionOne')
-        except Exception as exc:
-            log.warning("Failed to retreive endpoint for service due to: %s",
-                        exc)
-        return None
+        auth_manager = AuthManager()
+        creds = auth_manager.get_credentials(vim_uuid)
+        ks = client.Client(auth_url=creds.url,
+                           username=creds.user,
+                           password=creds.password,
+                           tenant_name=creds.tenant_name)
+        return ks.service_catalog.url_for(
+            service_type=service_type,
+            endpoint_type='publicURL',
+            region_name='RegionOne')
 
-    @classmethod
-    def _perform_request(cls, url, auth_token,
-                         req_type=None, payload=None, params=None):
+    @staticmethod
+    def perform_request(url, auth_token,
+                        req_type=None, payload=None, params=None):
         """Perform the POST/PUT/GET/DELETE request."""
         # request headers
         headers = {'X-Auth-Token': auth_token,
diff --git a/osm_mon/plugins/OpenStack/settings.py b/osm_mon/plugins/OpenStack/settings.py
index 1e8f54f..f0d19bf 100644
--- a/osm_mon/plugins/OpenStack/settings.py
+++ b/osm_mon/plugins/OpenStack/settings.py
@@ -59,11 +59,6 @@
     """Plugin confguration."""
 
     _configuration = [
-        CfgParam('OS_AUTH_URL', None, six.text_type),
-        CfgParam('OS_IDENTITY_API_VERSION', "3", six.text_type),
-        CfgParam('OS_USERNAME', None, six.text_type),
-        CfgParam('OS_PASSWORD', "password", six.text_type),
-        CfgParam('OS_TENANT_NAME', "service", six.text_type),
         CfgParam('OS_NOTIFIER_URI', "http://localhost:8662", six.text_type),
     ]
 
@@ -75,17 +70,12 @@
         for cfg in self._configuration:
             setattr(self, cfg.key, cfg.default)
 
-    def read_environ(self, service):
+    def read_environ(self):
         """Check the appropriate environment variables and update defaults."""
         for key in self._config_keys:
             try:
-                if key == "OS_AUTH_URL":
-                    val = str(os.environ[key]) + "/v3"
-                    setattr(self, key, val)
-                else:
-                    val = str(os.environ[key])
-                    setattr(self, key, val)
+                val = str(os.environ[key])
+                setattr(self, key, val)
             except KeyError as exc:
-                log.warn("Falied to configure plugin: %s", exc)
-                log.warn("Try re-authenticating your OpenStack deployment.")
+                log.warn("Failed to configure plugin: %s", exc)
         return
diff --git a/osm_mon/test/OpenStack/test_alarm_req.py b/osm_mon/test/OpenStack/test_alarm_req.py
index 2303506..023b31a 100644
--- a/osm_mon/test/OpenStack/test_alarm_req.py
+++ b/osm_mon/test/OpenStack/test_alarm_req.py
@@ -4,14 +4,14 @@
 # This file is part of OSM Monitoring module
 # All Rights Reserved to Intel Corporation
 
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# Licensed under the Apache License, Version 2.0 (the 'License'); you may
 # not use this file except in compliance with the License. You may obtain
 # a copy of the License at
 
 #         http://www.apache.org/licenses/LICENSE-2.0
 
 # Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 # License for the specific language governing permissions and limitations
 # under the License.
@@ -40,9 +40,9 @@
 
     def __init__(self):
         """Initialize a mocked message instance."""
-        self.topic = "alarm_request"
+        self.topic = 'alarm_request'
         self.key = None
-        self.value = json.dumps({"mock_value": "mock_details"})
+        self.value = json.dumps({'vim_uuid': 'test_id', 'mock_value': 'mock_details'})
 
 
 class TestAlarmKeys(unittest.TestCase):
@@ -54,74 +54,75 @@
         self.alarming = alarm_req.Alarming()
         self.alarming.common = Common()
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_alarming_env_authentication(self, auth):
+    @mock.patch.object(Common, 'get_endpoint')
+    @mock.patch.object(Common, 'get_auth_token')
+    def test_alarming_authentication(self, get_token, get_endpoint):
         """Test getting an auth_token and endpoint for alarm requests."""
-        # if auth_token is None environment variables are used to authenticare
+        # if auth_token is None environment variables are used to authenticate
         message = Message()
 
-        self.alarming.alarming(message, self.alarming.common, None)
+        self.alarming.alarming(message)
 
-        auth.assert_called_with()
+        get_token.assert_called_with('test_id')
+        get_endpoint.assert_any_call('alarming', 'test_id')
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_acccess_cred_auth(self, auth):
-        """Test receiving auth_token from access creds."""
-        message = Message()
-
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-
-        auth.assert_not_called
-        self.assertEqual(self.alarming.auth_token, "my_auth_token")
-
-    @mock.patch.object(alarm_req.Alarming, "delete_alarm")
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'delete_alarm')
     def test_delete_alarm_key(self, del_alarm):
         """Test the functionality for a create alarm request."""
         # Mock a message value and key
         message = Message()
-        message.key = "delete_alarm_request"
-        message.value = json.dumps({"alarm_delete_request":
-                                   {"alarm_uuid": "my_alarm_id"}})
+        message.key = 'delete_alarm_request'
+        message.value = json.dumps({'vim_uuid': 'test_id',
+                                    'alarm_delete_request':
+                                        {'alarm_uuid': 'my_alarm_id'}})
 
         # Call the alarming functionality and check delete request
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
+        self.alarming.alarming(message)
+        del_alarm.assert_called_with(mock.ANY, mock.ANY, 'my_alarm_id')
 
-        del_alarm.assert_called_with(mock.ANY, mock.ANY, "my_alarm_id")
-
-    @mock.patch.object(alarm_req.Alarming, "list_alarms")
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'list_alarms')
     def test_list_alarm_key(self, list_alarm):
         """Test the functionality for a list alarm request."""
         # Mock a message with list alarm key and value
         message = Message()
-        message.key = "list_alarm_request"
-        message.value = json.dumps({"alarm_list_request": "my_alarm_details"})
+        message.key = 'list_alarm_request'
+        message.value = json.dumps({'vim_uuid': 'test_id', 'alarm_list_request': 'my_alarm_details'})
 
         # Call the alarming functionality and check list functionality
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-        list_alarm.assert_called_with(mock.ANY, mock.ANY, "my_alarm_details")
+        self.alarming.alarming(message)
+        list_alarm.assert_called_with(mock.ANY, mock.ANY, 'my_alarm_details')
 
-    @mock.patch.object(alarm_req.Alarming, "update_alarm_state")
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'update_alarm_state')
     def test_ack_alarm_key(self, ack_alarm):
         """Test the functionality for an acknowledge alarm request."""
         # Mock a message with acknowledge alarm key and value
         message = Message()
-        message.key = "acknowledge_alarm"
-        message.value = json.dumps({"ack_details":
-                                    {"alarm_uuid": "my_alarm_id"}})
+        message.key = 'acknowledge_alarm'
+        message.value = json.dumps({'vim_uuid': 'test_id',
+                                    'ack_details':
+                                        {'alarm_uuid': 'my_alarm_id'}})
 
         # Call alarming functionality and check acknowledge functionality
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-        ack_alarm.assert_called_with(mock.ANY, mock.ANY, "my_alarm_id")
+        self.alarming.alarming(message)
+        ack_alarm.assert_called_with(mock.ANY, mock.ANY, 'my_alarm_id')
 
-    @mock.patch.object(alarm_req.Alarming, "configure_alarm")
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'configure_alarm')
     def test_config_alarm_key(self, config_alarm):
         """Test the functionality for a create alarm request."""
         # Mock a message with config alarm key and value
         message = Message()
-        message.key = "create_alarm_request"
-        message.value = json.dumps({"alarm_create_request": "alarm_details"})
+        message.key = 'create_alarm_request'
+        message.value = json.dumps({'vim_uuid': 'test_id', 'alarm_create_request': 'alarm_details'})
 
         # Call alarming functionality and check config alarm call
-        config_alarm.return_value = "my_alarm_id", True
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-        config_alarm.assert_called_with(mock.ANY, mock.ANY, "alarm_details")
+        config_alarm.return_value = 'my_alarm_id', True
+        self.alarming.alarming(message)
+        config_alarm.assert_called_with(mock.ANY, mock.ANY, mock.ANY, 'alarm_details')
diff --git a/osm_mon/test/OpenStack/test_alarming.py b/osm_mon/test/OpenStack/test_alarming.py
index effd920..598ef2b 100644
--- a/osm_mon/test/OpenStack/test_alarming.py
+++ b/osm_mon/test/OpenStack/test_alarming.py
@@ -22,20 +22,20 @@
 """Tests for all alarm request message keys."""
 
 import json
-
 import logging
-
 import unittest
 
 import mock
 
 from osm_mon.plugins.OpenStack.Aodh import alarming as alarm_req
 from osm_mon.plugins.OpenStack.common import Common
+from osm_mon.plugins.OpenStack.settings import Config
 
 log = logging.getLogger(__name__)
 
 auth_token = mock.ANY
-endpoint = mock.ANY
+alarm_endpoint = "alarm_endpoint"
+metric_endpoint = "metric_endpoint"
 
 
 class Response(object):
@@ -56,19 +56,18 @@
         """Setup for tests."""
         super(TestAlarming, self).setUp()
         self.alarming = alarm_req.Alarming()
-        self.alarming.common = Common()
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
     @mock.patch.object(alarm_req.Alarming, "check_for_metric")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_config_invalid_alarm_req(self, perf_req, check_metric, check_pay):
         """Test configure an invalid alarm request."""
         # Configuring with invalid alarm name results in failure
         values = {"alarm_name": "my_alarm",
                   "metric_name": "my_metric",
                   "resource_uuid": "my_r_id"}
-        self.alarming.configure_alarm(endpoint, auth_token, values)
-        perf_req.assert_not_called
+        self.alarming.configure_alarm(alarm_endpoint, metric_endpoint, auth_token, values)
+        perf_req.assert_not_called()
         perf_req.reset_mock()
 
         # Correct alarm_name will check for metric in Gnocchi
@@ -79,12 +78,12 @@
 
         check_metric.return_value = None
 
-        self.alarming.configure_alarm(endpoint, auth_token, values)
-        perf_req.assert_not_called
+        self.alarming.configure_alarm(alarm_endpoint, metric_endpoint, auth_token, values)
+        perf_req.assert_not_called()
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
     @mock.patch.object(alarm_req.Alarming, "check_for_metric")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_config_valid_alarm_req(self, perf_req, check_metric, check_pay):
         """Test config a valid alarm."""
         # Correct alarm_name will check for metric in Gnocchi
@@ -96,70 +95,70 @@
         check_metric.return_value = "my_metric_id"
         check_pay.return_value = "my_payload"
 
-        self.alarming.configure_alarm(endpoint, auth_token, values)
+        self.alarming.configure_alarm(alarm_endpoint, metric_endpoint, auth_token, values)
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/", auth_token,
+            "alarm_endpoint/v2/alarms/", auth_token,
             req_type="post", payload="my_payload")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_delete_alarm_req(self, perf_req):
         """Test delete alarm request."""
-        self.alarming.delete_alarm(endpoint, auth_token, "my_alarm_id")
+        self.alarming.delete_alarm(alarm_endpoint, auth_token, "my_alarm_id")
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/my_alarm_id", auth_token, req_type="delete")
+            "alarm_endpoint/v2/alarms/my_alarm_id", auth_token, req_type="delete")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_invalid_list_alarm_req(self, perf_req):
         """Test invalid list alarm_req."""
         # Request will not be performed with out a resoure_id
         list_details = {"mock_details": "invalid_details"}
-        self.alarming.list_alarms(endpoint, auth_token, list_details)
+        self.alarming.list_alarms(alarm_endpoint, auth_token, list_details)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_valid_list_alarm_req(self, perf_req):
         """Test valid list alarm request."""
         # Minimum requirement for an alarm list is resource_id
         list_details = {"resource_uuid": "mock_r_id"}
-        self.alarming.list_alarms(endpoint, auth_token, list_details)
+        self.alarming.list_alarms(alarm_endpoint, auth_token, list_details)
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/", auth_token, req_type="get")
+            "alarm_endpoint/v2/alarms/", auth_token, req_type="get")
         perf_req.reset_mock()
 
         # Check list with alarm_name defined
         list_details = {"resource_uuid": "mock_r_id",
                         "alarm_name": "my_alarm",
                         "severity": "critical"}
-        self.alarming.list_alarms(endpoint, auth_token, list_details)
+        self.alarming.list_alarms(alarm_endpoint, auth_token, list_details)
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/", auth_token, req_type="get")
+            "alarm_endpoint/v2/alarms/", auth_token, req_type="get")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_ack_alarm_req(self, perf_req):
         """Test update alarm state for acknowledge alarm request."""
-        self.alarming.update_alarm_state(endpoint, auth_token, "my_alarm_id")
+        self.alarming.update_alarm_state(alarm_endpoint, auth_token, "my_alarm_id")
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/my_alarm_id/state", auth_token, req_type="put",
+            "alarm_endpoint/v2/alarms/my_alarm_id/state", auth_token, req_type="put",
             payload=json.dumps("ok"))
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_update_alarm_invalid(self, perf_req, check_pay):
         """Test update alarm with invalid get response."""
         values = {"alarm_uuid": "my_alarm_id"}
 
-        self.alarming.update_alarm(endpoint, auth_token, values)
+        self.alarming.update_alarm(alarm_endpoint, auth_token, values)
 
         perf_req.assert_called_with(mock.ANY, auth_token, req_type="get")
-        check_pay.assert_not_called
+        check_pay.assert_not_called()
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_update_alarm_invalid_payload(self, perf_req, check_pay):
         """Test update alarm with invalid payload."""
         resp = Response({"name": "my_alarm",
@@ -171,35 +170,36 @@
         check_pay.return_value = None
         values = {"alarm_uuid": "my_alarm_id"}
 
-        self.alarming.update_alarm(endpoint, auth_token, values)
+        self.alarming.update_alarm(alarm_endpoint, auth_token, values)
 
         perf_req.assert_called_with(mock.ANY, auth_token, req_type="get")
         self.assertEqual(perf_req.call_count, 1)
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_update_alarm_valid(self, perf_req, check_pay):
         """Test valid update alarm request."""
         resp = Response({"name": "my_alarm",
                          "state": "alarm",
                          "gnocchi_resources_threshold_rule":
                          {"resource_id": "my_resource_id",
-                          "metric": "my_metric"}})
+                          "metric": "disk.write.requests"}})
         perf_req.return_value = resp
         values = {"alarm_uuid": "my_alarm_id"}
 
-        self.alarming.update_alarm(endpoint, auth_token, values)
+        self.alarming.update_alarm(alarm_endpoint, auth_token, values)
 
-        check_pay.assert_called_with(values, "my_metric", "my_resource_id",
+        check_pay.assert_called_with(values, "disk_write_ops", "my_resource_id",
                                      "my_alarm", alarm_state="alarm")
 
         self.assertEqual(perf_req.call_count, 2)
         # Second call is the update request
         perf_req.assert_called_with(
-            '<ANY>/v2/alarms/my_alarm_id', auth_token,
+            'alarm_endpoint/v2/alarms/my_alarm_id', auth_token,
             req_type="put", payload=check_pay.return_value)
 
-    def test_check_valid_payload(self):
+    @mock.patch.object(Config, "instance")
+    def test_check_valid_payload(self, cfg):
         """Test the check payload function for a valid payload."""
         values = {"severity": "warning",
                   "statistic": "COUNT",
@@ -207,6 +207,7 @@
                   "operation": "GT",
                   "granularity": 300,
                   "resource_type": "generic"}
+        cfg.return_value.OS_NOTIFIER_URI = "http://localhost:8662"
         payload = self.alarming.check_payload(
             values, "disk_write_ops", "r_id", "alarm_name")
 
@@ -214,7 +215,7 @@
             json.loads(payload), {"name": "alarm_name",
                                   "gnocchi_resources_threshold_rule":
                                   {"resource_id": "r_id",
-                                   "metric": "disk.disk_ops",
+                                   "metric": "disk.write.requests",
                                    "comparison_operator": "gt",
                                    "aggregation_method": "count",
                                    "threshold": 12,
@@ -225,7 +226,9 @@
                                   "type": "gnocchi_resources_threshold",
                                   "alarm_actions": ["http://localhost:8662"]})
 
-    def test_check_valid_state_payload(self):
+    @mock.patch.object(Config, "instance")
+    @mock.patch.object(Common, "perform_request")
+    def test_check_valid_state_payload(self, perform_req, cfg):
         """Test the check payload function for a valid payload with state."""
         values = {"severity": "warning",
                   "statistic": "COUNT",
@@ -233,6 +236,7 @@
                   "operation": "GT",
                   "granularity": 300,
                   "resource_type": "generic"}
+        cfg.return_value.OS_NOTIFIER_URI = "http://localhost:8662"
         payload = self.alarming.check_payload(
             values, "disk_write_ops", "r_id", "alarm_name", alarm_state="alarm")
 
@@ -240,7 +244,7 @@
             json.loads(payload), {"name": "alarm_name",
                                   "gnocchi_resources_threshold_rule":
                                   {"resource_id": "r_id",
-                                   "metric": "disk.disk_ops",
+                                   "metric": "disk.write.requests",
                                    "comparison_operator": "gt",
                                    "aggregation_method": "count",
                                    "threshold": 12,
@@ -259,21 +263,21 @@
 
         self.assertEqual(payload, None)
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_get_alarm_state(self, perf_req):
         """Test the get alarm state function."""
-        self.alarming.get_alarm_state(endpoint, auth_token, "alarm_id")
+        self.alarming.get_alarm_state(alarm_endpoint, auth_token, "alarm_id")
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/alarm_id/state", auth_token, req_type="get")
+            "alarm_endpoint/v2/alarms/alarm_id/state", auth_token, req_type="get")
 
     @mock.patch.object(Common, "get_endpoint")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_check_for_metric(self, perf_req, get_endpoint):
         """Test the check for metric function."""
         get_endpoint.return_value = "gnocchi_endpoint"
 
-        self.alarming.check_for_metric(auth_token, "metric_name", "r_id")
+        self.alarming.check_for_metric(auth_token, metric_endpoint, "metric_name", "r_id")
 
         perf_req.assert_called_with(
-            "gnocchi_endpoint/v1/metric?sort=name:asc", auth_token, req_type="get")
+            "metric_endpoint/v1/metric?sort=name:asc", auth_token, req_type="get")
diff --git a/osm_mon/test/OpenStack/test_common.py b/osm_mon/test/OpenStack/test_common.py
index 983128b..9853d15 100644
--- a/osm_mon/test/OpenStack/test_common.py
+++ b/osm_mon/test/OpenStack/test_common.py
@@ -31,6 +31,8 @@
 
 import mock
 
+from osm_mon.core.auth import AuthManager
+from osm_mon.core.database import VimCredentials
 from osm_mon.plugins.OpenStack.common import Common
 from osm_mon.plugins.OpenStack.settings import Config
 
@@ -50,10 +52,10 @@
         self.value = json.dumps({"mock_value": "mock_details",
                                  "vim_type": "OPENSTACK",
                                  "access_config":
-                                 {"openstack_site": "my_site",
-                                  "user": "my_user",
-                                  "password": "my_password",
-                                  "vim_tenant_name": "my_tenant"}})
+                                     {"openstack_site": "my_site",
+                                      "user": "my_user",
+                                      "password": "my_password",
+                                      "vim_tenant_name": "my_tenant"}})
 
 
 class TestCommon(unittest.TestCase):
@@ -63,58 +65,28 @@
         """Test Setup."""
         super(TestCommon, self).setUp()
         self.common = Common()
+        self.creds = VimCredentials()
+        self.creds.id = 'test_id'
+        self.creds.user = 'user'
+        self.creds.url = 'url'
+        self.creds.password = 'password'
+        self.creds.tenant_name = 'tenant_name'
 
-    @mock.patch.object(client, "Client")
-    def test_authenticate_exists(self, key_client):
-        """Testing if an authentication token already exists."""
-        # If the auth_token is already generated a new one will not be creates
-        self.common._auth_token = "my_auth_token"
-        token = self.common._authenticate()
-
-        self.assertEqual(token, "my_auth_token")
-
+    @mock.patch.object(AuthManager, "get_credentials")
     @mock.patch.object(Config, "instance")
     @mock.patch.object(client, "Client")
-    def test_authenticate_none(self, key_client, cfg):
+    def test_get_auth_token(self, key_client, cfg, get_creds):
         """Test generating a new authentication token."""
-        # If auth_token doesn't exist one will try to be created with keystone
-        # With the configuration values from the environment
-        self.common._auth_token = None
-        config = cfg.return_value
-        url = config.OS_AUTH_URL
-        user = config.OS_USERNAME
-        pword = config.OS_PASSWORD
-        tenant = config.OS_TENANT_NAME
-
-        self.common._authenticate()
-
-        key_client.assert_called_with(auth_url=url,
-                                      username=user,
-                                      password=pword,
-                                      tenant_name=tenant)
-        key_client.reset_mock()
-
-    @mock.patch.object(client, "Client")
-    def test_authenticate_access_cred(self, key_client):
-        """Test generating an auth_token using access_credentials from SO."""
-        # Mock valid message from SO
-        self.common._auth_token = None
-        message = Message()
-
-        self.common._authenticate(message=message)
-
-        # The class variables are set for each consifugration
-        self.assertEqual(self.common.openstack_url, "my_site")
-        self.assertEqual(self.common.user, "my_user")
-        self.assertEqual(self.common.password, "my_password")
-        self.assertEqual(self.common.tenant, "my_tenant")
-        key_client.assert_called
+        get_creds.return_value = self.creds
+        Common.get_auth_token('test_id')
+        get_creds.assert_called_with('test_id')
+        key_client.assert_called_with(auth_url='url', password='password', tenant_name='tenant_name', username='user')
 
     @mock.patch.object(requests, 'post')
     def test_post_req(self, post):
         """Testing a post request."""
-        self.common._perform_request("url", "auth_token", req_type="post",
-                                     payload="payload")
+        Common.perform_request("url", "auth_token", req_type="post",
+                                    payload="payload")
 
         post.assert_called_with("url", data="payload", headers=mock.ANY,
                                 timeout=mock.ANY)
@@ -123,15 +95,15 @@
     def test_get_req(self, get):
         """Testing a get request."""
         # Run the defualt get request without any parameters
-        self.common._perform_request("url", "auth_token", req_type="get")
+        Common.perform_request("url", "auth_token", req_type="get")
 
         get.assert_called_with("url", params=None, headers=mock.ANY,
                                timeout=mock.ANY)
 
         # Test with some parameters specified
         get.reset_mock()
-        self.common._perform_request("url", "auth_token", req_type="get",
-                                     params="some parameters")
+        Common.perform_request("url", "auth_token", req_type="get",
+                                    params="some parameters")
 
         get.assert_called_with("url", params="some parameters",
                                headers=mock.ANY, timeout=mock.ANY)
@@ -139,14 +111,14 @@
     @mock.patch.object(requests, 'put')
     def test_put_req(self, put):
         """Testing a put request."""
-        self.common._perform_request("url", "auth_token", req_type="put",
-                                     payload="payload")
+        Common.perform_request("url", "auth_token", req_type="put",
+                                    payload="payload")
         put.assert_called_with("url", data="payload", headers=mock.ANY,
                                timeout=mock.ANY)
 
     @mock.patch.object(requests, 'delete')
     def test_delete_req(self, delete):
         """Testing a delete request."""
-        self.common._perform_request("url", "auth_token", req_type="delete")
+        Common.perform_request("url", "auth_token", req_type="delete")
 
         delete.assert_called_with("url", headers=mock.ANY, timeout=mock.ANY)
diff --git a/osm_mon/test/OpenStack/test_metric_calls.py b/osm_mon/test/OpenStack/test_metric_calls.py
index d209f61..b77df5e 100644
--- a/osm_mon/test/OpenStack/test_metric_calls.py
+++ b/osm_mon/test/OpenStack/test_metric_calls.py
@@ -56,6 +56,13 @@
         self.status_code = "STATUS_CODE"
 
 
+def perform_request_side_effect(*args, **kwargs):
+    resp = Response()
+    if 'marker' in args[0]:
+        resp.text = json.dumps([])
+    return resp
+
+
 class TestMetricCalls(unittest.TestCase):
     """Integration test for metric request keys."""
 
@@ -67,7 +74,7 @@
 
     @mock.patch.object(metric_req.Metrics, "get_metric_name")
     @mock.patch.object(metric_req.Metrics, "get_metric_id")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_invalid_config_metric_req(
             self, perf_req, get_metric, get_metric_name):
         """Test the configure metric function, for an invalid metric."""
@@ -77,7 +84,7 @@
         m_id, r_id, status = self.metrics.configure_metric(
             endpoint, auth_token, values)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
         self.assertEqual(m_id, None)
         self.assertEqual(r_id, None)
         self.assertEqual(status, False)
@@ -89,7 +96,7 @@
         m_id, r_id, status = self.metrics.configure_metric(
             endpoint, auth_token, values)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
         self.assertEqual(m_id, None)
         self.assertEqual(r_id, "r_id")
         self.assertEqual(status, False)
@@ -102,14 +109,14 @@
         m_id, r_id, status = self.metrics.configure_metric(
             endpoint, auth_token, values)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
         self.assertEqual(m_id, "metric_id")
         self.assertEqual(r_id, "r_id")
         self.assertEqual(status, False)
 
     @mock.patch.object(metric_req.Metrics, "get_metric_name")
     @mock.patch.object(metric_req.Metrics, "get_metric_id")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_valid_config_metric_req(
             self, perf_req, get_metric, get_metric_name):
         """Test the configure metric function, for a valid metric."""
@@ -120,9 +127,9 @@
         get_metric.return_value = None
         payload = {"id": "r_id",
                    "metrics": {"metric_name":
-                               {"archive_policy_name": "high",
-                                "name": "metric_name",
-                                "unit": "units"}}}
+                                   {"archive_policy_name": "high",
+                                    "name": "metric_name",
+                                    "unit": "units"}}}
 
         self.metrics.configure_metric(endpoint, auth_token, values)
 
@@ -130,7 +137,7 @@
             "<ANY>/v1/resource/generic", auth_token, req_type="post",
             payload=json.dumps(payload))
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_delete_metric_req(self, perf_req):
         """Test the delete metric function."""
         self.metrics.delete_metric(endpoint, auth_token, "metric_id")
@@ -138,7 +145,7 @@
         perf_req.assert_called_with(
             "<ANY>/v1/metric/metric_id", auth_token, req_type="delete")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_delete_metric_invalid_status(self, perf_req):
         """Test invalid response for delete request."""
         perf_req.return_value = "404"
@@ -148,67 +155,64 @@
         self.assertEqual(status, False)
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_complete_list_metric_req(self, perf_req, resp_list):
         """Test the complete list metric function."""
         # Test listing metrics without any configuration options
         values = {}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with([{u'id': u'test_id'}])
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_resource_list_metric_req(self, perf_req, resp_list):
         """Test the resource list metric function."""
         # Test listing metrics with a resource id specified
         values = {"resource_uuid": "resource_id"}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with(
             [{u'id': u'test_id'}], resource="resource_id")
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_name_list_metric_req(self, perf_req, resp_list):
         """Test the metric_name list metric function."""
         # Test listing metrics with a metric_name specified
         values = {"metric_name": "disk_write_bytes"}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with(
             [{u'id': u'test_id'}], metric_name="disk_write_bytes")
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_combined_list_metric_req(self, perf_req, resp_list):
         """Test the combined resource and metric list metric function."""
         # Test listing metrics with a resource id and metric name specified
+
         values = {"resource_uuid": "resource_id",
                   "metric_name": "packets_sent"}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with(
             [{u'id': u'test_id'}], resource="resource_id",
             metric_name="packets_sent")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_get_metric_id(self, perf_req):
         """Test get_metric_id function."""
         self.metrics.get_metric_id(endpoint, auth_token, "my_metric", "r_id")
@@ -234,7 +238,7 @@
         self.assertEqual(metric_name, "my_invalid_metric")
         self.assertEqual(norm_name, None)
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_valid_read_data_req(self, perf_req):
         """Test the read metric data function, for a valid call."""
         values = {"metric_uuid": "metric_id",
@@ -243,9 +247,9 @@
 
         self.metrics.read_metric_data(endpoint, auth_token, values)
 
-        perf_req.assert_called_once
+        perf_req.assert_called_once()
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_invalid_read_data_req(self, perf_req):
         """Test the read metric data function, for an invalid call."""
         # Teo empty lists wil be returned because the values are invalid
@@ -264,7 +268,7 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
     def test_name_response_list(self):
         """Test the response list with metric name configured."""
@@ -283,7 +287,7 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
     def test_resource_response_list(self):
         """Test the response list with resource_id configured."""
@@ -300,12 +304,12 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
     def test_combined_response_list(self):
         """Test the response list function with resource_id and metric_name."""
         # Test for a combined resource and name list
-        # resource and name are on the lisat
+        # resource and name are on the list
         valid_name = "disk_write_ops"
         valid_id = "r_id"
         resp_list = self.metrics.response_list(
@@ -313,7 +317,7 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
         # resource not on list
         invalid_id = "mock_resource"
diff --git a/osm_mon/test/OpenStack/test_metric_req.py b/osm_mon/test/OpenStack/test_metric_req.py
index 2a3cbc3..6a924d9 100644
--- a/osm_mon/test/OpenStack/test_metric_req.py
+++ b/osm_mon/test/OpenStack/test_metric_req.py
@@ -43,7 +43,7 @@
         """Initialize a mocked message instance."""
         self.topic = "metric_request"
         self.key = None
-        self.value = json.dumps({"mock_message": "message_details"})
+        self.value = json.dumps({"vim_uuid": "test_id", "mock_message": "message_details"})
 
 
 class TestMetricReq(unittest.TestCase):
@@ -52,53 +52,49 @@
     def setUp(self):
         """Setup the tests for metric request keys."""
         super(TestMetricReq, self).setUp()
-        self.common = Common()
         self.metrics = metric_req.Metrics()
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_access_cred_metric_auth(self, auth):
+    @mock.patch.object(Common, 'get_endpoint')
+    @mock.patch.object(Common, "get_auth_token")
+    def test_access_cred_metric_auth(self, get_token, get_endpoint):
         """Test authentication with access credentials."""
         message = Message()
 
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
 
-        auth.assert_not_called
-        self.assertEqual(self.metrics.auth_token, "my_auth_token")
+        get_token.assert_called_with('test_id')
+        get_endpoint.assert_any_call('metric', 'test_id')
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_env_metric_auth(self, auth):
-        """Test authentication with environment variables."""
-        message = Message()
-
-        self.metrics.metric_calls(message, self.common, None)
-
-        auth.assert_called_with()
-
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "delete_metric")
     def test_delete_metric_key(self, del_metric):
         """Test the functionality for a delete metric request."""
         # Mock a message value and key
         message = Message()
         message.key = "delete_metric_request"
-        message.value = json.dumps({"metric_uuid": "my_metric_id"})
+        message.value = json.dumps({"vim_uuid": "test_id", "metric_uuid": "my_metric_id"})
 
         # Call the metric functionality and check delete request
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
-
+        self.metrics.metric_calls(message)
         del_metric.assert_called_with(mock.ANY, mock.ANY, "my_metric_id")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "list_metrics")
     def test_list_metric_key(self, list_metrics):
         """Test the functionality for a list metric request."""
         # Mock a message with list metric key and value
         message = Message()
         message.key = "list_metric_request"
-        message.value = json.dumps({"metrics_list_request": "metric_details"})
+        message.value = json.dumps({"vim_uuid": "test_id", "metrics_list_request": "metric_details"})
 
         # Call the metric functionality and check list functionality
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
         list_metrics.assert_called_with(mock.ANY, mock.ANY, "metric_details")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "read_metric_data")
     @mock.patch.object(metric_req.Metrics, "list_metrics")
     @mock.patch.object(metric_req.Metrics, "delete_metric")
@@ -109,41 +105,46 @@
         # Mock a message with update metric key and value
         message = Message()
         message.key = "update_metric_request"
-        message.value = json.dumps({"metric_create":
-                                    {"metric_name": "my_metric",
-                                     "resource_uuid": "my_r_id"}})
+        message.value = json.dumps({"vim_uuid": "test_id",
+                                    "metric_create":
+                                        {"metric_name": "my_metric",
+                                         "resource_uuid": "my_r_id"}})
 
         # Call metric functionality and confirm no function is called
         # Gnocchi does not support updating a metric configuration
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
-        config_metric.assert_not_called
-        list_metrics.assert_not_called
-        delete_metric.assert_not_called
-        read_data.assert_not_called
+        self.metrics.metric_calls(message)
+        config_metric.assert_not_called()
+        list_metrics.assert_not_called()
+        delete_metric.assert_not_called()
+        read_data.assert_not_called()
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "configure_metric")
     def test_config_metric_key(self, config_metric):
         """Test the functionality for a create metric request."""
         # Mock a message with create metric key and value
         message = Message()
         message.key = "create_metric_request"
-        message.value = json.dumps({"metric_create": "metric_details"})
+        message.value = json.dumps({"vim_uuid": "test_id", "metric_create": "metric_details"})
 
         # Call metric functionality and check config metric
         config_metric.return_value = "metric_id", "resource_id", True
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
         config_metric.assert_called_with(mock.ANY, mock.ANY, "metric_details")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "read_metric_data")
     def test_read_data_key(self, read_data):
         """Test the functionality for a read metric data request."""
         # Mock a message with a read data key and value
         message = Message()
         message.key = "read_metric_data_request"
-        message.value = json.dumps({"alarm_uuid": "alarm_id"})
+        message.value = json.dumps({"vim_uuid": "test_id", "alarm_uuid": "alarm_id"})
 
         # Call metric functionality and check read data metrics
         read_data.return_value = "time_stamps", "data_values"
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
         read_data.assert_called_with(
             mock.ANY, mock.ANY, json.loads(message.value))
diff --git a/osm_mon/test/OpenStack/test_notifier.py b/osm_mon/test/OpenStack/test_notifier.py
index 97b3c2a..81ef2e8 100644
--- a/osm_mon/test/OpenStack/test_notifier.py
+++ b/osm_mon/test/OpenStack/test_notifier.py
@@ -52,7 +52,7 @@
                    {"resource_id": "my_resource_id"}}'
 
 invalid_get_resp = '{"gnocchi_resources_threshold_rule":\
-                     {"resource_id": "None"}}'
+                     {"resource_id": null}}'
 
 valid_notify_resp = '{"notify_details": {"status": "current_state",\
                                          "severity": "critical",\
@@ -117,22 +117,24 @@
     def notify_alarm(self, values):
         """Mock the notify_alarm functionality to generate a valid response."""
         config = Config.instance()
-        config.read_environ("aodh")
+        config.read_environ()
         self._alarming = Alarming()
         self._common = Common()
         self._response = OpenStack_Response()
         self._producer = KafkaProducer('alarm_response')
         alarm_id = values['alarm_id']
 
-        auth_token = self._common._authenticate()
-        endpoint = self._common.get_endpoint("alarming")
+        vim_uuid = 'test_id'
+
+        auth_token = Common.get_auth_token(vim_uuid)
+        endpoint = Common.get_endpoint("alarming", vim_uuid)
 
         # If authenticated generate and send response message
-        if (auth_token is not None and endpoint is not None):
+        if auth_token is not None and endpoint is not None:
             url = "{}/v2/alarms/%s".format(endpoint) % alarm_id
 
             # Get the resource_id of the triggered alarm and the date
-            result = self._common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             alarm_details = json.loads(result.text)
             gnocchi_rule = alarm_details['gnocchi_resources_threshold_rule']
@@ -168,7 +170,7 @@
         """Test do_GET, generates headers for get request."""
         self.handler.do_GET()
 
-        set_head.assert_called_once
+        set_head.assert_called_once()
 
     @mock.patch.object(NotifierHandler, "notify_alarm")
     @mock.patch.object(NotifierHandler, "_set_headers")
@@ -176,12 +178,12 @@
         """Test do_POST functionality for a POST request."""
         self.handler.do_POST()
 
-        set_head.assert_called_once
+        set_head.assert_called_once()
         notify.assert_called_with(json.loads(post_data))
 
     @mock.patch.object(Common, "get_endpoint")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
     def test_notify_alarm_unauth(self, perf_req, auth, endpoint):
         """Test notify alarm when not authenticated with keystone."""
         # Response request will not be performed unless there is a valid
@@ -191,26 +193,26 @@
         endpoint.return_value = None
         self.handler.notify_alarm(json.loads(post_data))
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
         # Valid endpoint
         auth.return_value = None
         endpoint.return_value = "my_endpoint"
         self.handler.notify_alarm(json.loads(post_data))
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
         # Valid auth_token
         auth.return_value = "my_auth_token"
         endpoint.return_value = None
         self.handler.notify_alarm(json.loads(post_data))
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
     def test_notify_alarm_invalid_alarm(self, perf_req, auth, resp, endpoint):
         """Test valid authentication, invalid alarm details."""
         # Mock valid auth_token and endpoint
@@ -221,13 +223,14 @@
         self.handler.notify_alarm(json.loads(post_data))
 
         # Response is not generated
-        resp.assert_not_called
+        resp.assert_not_called()
 
+    @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
-    def test_notify_alarm_resp_call(self, perf_req, auth, response, endpoint):
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
+    def test_notify_alarm_resp_call(self, perf_req, auth, response, endpoint, notify):
         """Test notify_alarm tries to generate a response for SO."""
         # Mock valid auth token and endpoint, valid response from aodh
         auth.return_value = "my_auth_token"
@@ -235,6 +238,7 @@
         perf_req.return_value = Response(valid_get_resp)
         self.handler.notify_alarm(json.loads(post_data))
 
+        notify.assert_called()
         response.assert_called_with('notify_alarm', a_id="my_alarm_id",
                                     r_id="my_resource_id", sev="critical",
                                     date="dd-mm-yyyy 00:00",
@@ -244,8 +248,9 @@
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
+    @unittest.skip("Schema validation not implemented yet.")
     def test_notify_alarm_invalid_resp(
             self, perf_req, auth, response, notify, endpoint):
         """Test the notify_alarm function, sends response to the producer."""
@@ -257,13 +262,13 @@
 
         self.handler.notify_alarm(json.loads(post_data))
 
-        notify.assert_not_called
+        notify.assert_not_called()
 
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
     def test_notify_alarm_valid_resp(
             self, perf_req, auth, response, notify, endpoint):
         """Test the notify_alarm function, sends response to the producer."""
diff --git a/osm_mon/test/OpenStack/test_settings.py b/osm_mon/test/OpenStack/test_settings.py
index 66da6af..0f924ce 100644
--- a/osm_mon/test/OpenStack/test_settings.py
+++ b/osm_mon/test/OpenStack/test_settings.py
@@ -44,15 +44,7 @@
 
     def test_set_os_username(self):
         """Test reading the environment for OpenStack plugin configuration."""
-        os.environ["OS_USERNAME"] = "test"
-        self.cfg.read_environ("my_service")
+        os.environ["OS_NOTIFIER_URI"] = "test"
+        self.cfg.read_environ()
 
-        self.assertEqual(self.cfg.OS_USERNAME, "test")
-
-    @mock.patch.object(os, "environ")
-    def test_read_environ(self, environ):
-        """Test reading environment variables for configuration."""
-        self.cfg.read_environ("my_service")
-
-        # Called for each key in the configuration dictionary
-        environ.assert_called_once
+        self.assertEqual(self.cfg.OS_NOTIFIER_URI, "test")
diff --git a/osm_mon/test/integration/test_access_cred.py b/osm_mon/test/integration/test_access_cred.py
deleted file mode 100644
index 231711b..0000000
--- a/osm_mon/test/integration/test_access_cred.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 2017 Intel Research and Development Ireland Limited
-# *************************************************************
-
-# This file is part of OSM Monitoring module
-# All Rights Reserved to Intel Corporation
-
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-
-#         http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: helena.mcgough@intel.com or adrian.hoban@intel.com
-
-# __author__ = "Helena McGough"
-"""Test an end to end Openstack access_credentials requests."""
-
-import json
-import logging
-import unittest
-
-import mock
-from kafka import KafkaConsumer
-from kafka import KafkaProducer
-from kafka.errors import KafkaError
-from keystoneclient.v3 import client
-
-from osm_mon.plugins.OpenStack.Aodh import alarming
-from osm_mon.plugins.OpenStack.common import Common
-
-log = logging.getLogger(__name__)
-
-
-# TODO: Remove this file
-class AccessCredentialsTest(unittest.TestCase):
-    def setUp(self):
-        # Set up common and alarming class instances
-        self.alarms = alarming.Alarming()
-        self.openstack_auth = Common()
-
-        try:
-            self.producer = KafkaProducer(bootstrap_servers='localhost:9092')
-            self.req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092',
-                                              group_id='osm_mon',
-                                              consumer_timeout_ms=2000)
-            self.req_consumer.subscribe(['access_credentials'])
-        except KafkaError:
-            self.skipTest('Kafka server not present.')
-
-    @mock.patch.object(client, "Client")
-    def test_access_cred_req(self, keyclient):
-        """Test access credentials request message from KafkaProducer."""
-        # Set-up message, producer and consumer for tests
-        payload = {"vim_type": "OpenStack",
-                   "access_config":
-                       {"openstack_site": "my_site",
-                        "user": "my_user",
-                        "password": "my_password",
-                        "vim_tenant_name": "my_tenant"}}
-
-        self.producer.send('access_credentials', value=json.dumps(payload))
-
-        for message in self.req_consumer:
-            # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
-                self.openstack_auth._authenticate(message=message)
-
-                # A keystone client is created with the valid access_credentials
-                keyclient.assert_called_with(
-                    auth_url="my_site", username="my_user", password="my_password",
-                    tenant_name="my_tenant")
-
-                return
diff --git a/osm_mon/test/integration/test_alarm_integration.py b/osm_mon/test/integration/test_alarm_integration.py
index 13f0fef..368cc10 100644
--- a/osm_mon/test/integration/test_alarm_integration.py
+++ b/osm_mon/test/integration/test_alarm_integration.py
@@ -31,29 +31,31 @@
 from kafka import KafkaProducer
 from kafka.errors import KafkaError
 
+from osm_mon.core.auth import AuthManager
 from osm_mon.core.message_bus.producer import KafkaProducer as prod
 from osm_mon.plugins.OpenStack import response
 from osm_mon.plugins.OpenStack.Aodh import alarming
 from osm_mon.plugins.OpenStack.common import Common
+from keystoneclient.v3 import client
 
 log = logging.getLogger(__name__)
 
 
 class AlarmIntegrationTest(unittest.TestCase):
     def setUp(self):
+        try:
+            self.producer = KafkaProducer(bootstrap_servers='localhost:9092')
+            self.req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092',
+                                              consumer_timeout_ms=5000)
+            self.req_consumer.subscribe(['alarm_request'])
+        except KafkaError:
+            self.skipTest('Kafka server not present.')
         # Set up common and alarming class instances
         self.alarms = alarming.Alarming()
         self.openstack_auth = Common()
 
-        try:
-            self.producer = KafkaProducer(bootstrap_servers='localhost:9092')
-            self.req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092',
-                                              group_id='osm_mon',
-                                              consumer_timeout_ms=2000)
-            self.req_consumer.subscribe(['alarm_request'])
-        except KafkaError:
-            self.skipTest('Kafka server not present.')
-
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(prod, "update_alarm_response")
     @mock.patch.object(alarming.Alarming, "update_alarm")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -61,6 +63,7 @@
         """Test Aodh update alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_update_request":
                        {"correlation_id": 123,
                         "alarm_uuid": "alarm_id",
@@ -71,11 +74,10 @@
 
         for message in self.req_consumer:
             # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
+            if message.key == "update_alarm_request":
                 # Mock a valid alarm update
                 update_alarm.return_value = "alarm_id", True
-                self.alarms.alarming(message, self.openstack_auth, None)
+                self.alarms.alarming(message)
 
                 # A response message is generated and sent via MON's producer
                 resp.assert_called_with(
@@ -87,6 +89,8 @@
                 return
         self.fail("No message received in consumer")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(prod, "create_alarm_response")
     @mock.patch.object(alarming.Alarming, "configure_alarm")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -94,6 +98,7 @@
         """Test Aodh create alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_create_request":
                        {"correlation_id": 123,
                         "alarm_name": "my_alarm",
@@ -106,11 +111,10 @@
 
         for message in self.req_consumer:
             # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
+            if message.key == "create_alarm_request":
                 # Mock a valid alarm creation
                 config_alarm.return_value = "alarm_id", True
-                self.alarms.alarming(message, self.openstack_auth, None)
+                self.alarms.alarming(message)
 
                 # A response message is generated and sent via MON's produce
                 resp.assert_called_with(
@@ -122,6 +126,8 @@
                 return
         self.fail("No message received in consumer")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(prod, "list_alarm_response")
     @mock.patch.object(alarming.Alarming, "list_alarms")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -129,6 +135,7 @@
         """Test Aodh list alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_list_request":
                        {"correlation_id": 123,
                         "resource_uuid": "resource_id", }}
@@ -138,13 +145,12 @@
 
         for message in self.req_consumer:
             # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
+            if message.key == "list_alarm_request":
                 # Mock an empty list generated by the request
                 list_alarm.return_value = []
-                self.alarms.alarming(message, self.openstack_auth, None)
+                self.alarms.alarming(message)
 
-                # Resoonse message is generated
+                # Response message is generated
                 resp.assert_called_with(
                     'list_alarm_response', alarm_list=[],
                     cor_id=123)
@@ -155,6 +161,8 @@
                 return
         self.fail("No message received in consumer")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(alarming.Alarming, "delete_alarm")
     @mock.patch.object(prod, "delete_alarm_response")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -162,6 +170,7 @@
         """Test Aodh delete alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_delete_request":
                        {"correlation_id": 123,
                         "alarm_uuid": "alarm_id", }}
@@ -171,9 +180,8 @@
 
         for message in self.req_consumer:
             # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
-                self.alarms.alarming(message, self.openstack_auth, None)
+            if message.key == "delete_alarm_request":
+                self.alarms.alarming(message)
 
                 # Response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -190,19 +198,10 @@
         """Test Aodh acknowledge alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "ack_details":
                        {"alarm_uuid": "alarm_id", }}
 
         self.producer.send('alarm_request', key="acknowledge_alarm",
                            value=json.dumps(payload))
-
-        for message in self.req_consumer:
-            # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
-                self.alarms.alarming(message, self.openstack_auth, None)
-                # No response message is sent for and ack request
-                # Alarm state is updated from alarm -> ok
-                ack_alarm.assert_called_with(None, None, "alarm_id")
-                return
-        self.fail("No message received in consumer")
+        self.producer.flush()
diff --git a/osm_mon/test/integration/test_metric_integration.py b/osm_mon/test/integration/test_metric_integration.py
index 312359a..6b32a12 100644
--- a/osm_mon/test/integration/test_metric_integration.py
+++ b/osm_mon/test/integration/test_metric_integration.py
@@ -54,12 +54,14 @@
         try:
             self.producer = KafkaProducer(bootstrap_servers='localhost:9092')
             self.req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092',
-                                              group_id='osm_mon',
+                                              auto_offset_reset='earliest',
                                               consumer_timeout_ms=2000)
             self.req_consumer.subscribe(['metric_request'])
         except KafkaError:
             self.skipTest('Kafka server not present.')
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(metrics.Metrics, "configure_metric")
     @mock.patch.object(prod, "create_metrics_resp")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -67,6 +69,7 @@
         """Test Gnocchi create metric request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "1",
                    "correlation_id": 123,
                    "metric_create":
                        {"metric_name": "my_metric",
@@ -76,12 +79,13 @@
                            value=json.dumps(payload))
 
         for message in self.req_consumer:
+            print(message)
             # Check the vim desired by the message
             vim_type = json.loads(message.value)["vim_type"].lower()
             if vim_type == "openstack":
                 # A valid metric is created
                 config_metric.return_value = "metric_id", "resource_id", True
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -93,6 +97,8 @@
                 return
         self.fail("No message received in consumer")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(metrics.Metrics, "delete_metric")
     @mock.patch.object(prod, "delete_metric_response")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -100,6 +106,7 @@
         """Test Gnocchi delete metric request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "1",
                    "correlation_id": 123,
                    "metric_uuid": "metric_id",
                    "metric_name": "metric_name",
@@ -111,10 +118,10 @@
         for message in self.req_consumer:
             # Check the vim desired by the message
             vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
+            if message.key == "delete_metric_request":
                 # Metric has been deleted
                 del_metric.return_value = True
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -127,6 +134,8 @@
                 return
         self.fail("No message received in consumer")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(metrics.Metrics, "read_metric_data")
     @mock.patch.object(prod, "read_metric_data_response")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -134,6 +143,7 @@
         """Test Gnocchi read metric data request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "correlation_id": 123,
                    "metric_uuid": "metric_id",
                    "metric_name": "metric_name",
@@ -144,11 +154,10 @@
 
         for message in self.req_consumer:
             # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
+            if message.key == "read_metric_data_request":
                 # Mock empty lists generated by the request message
                 read_data.return_value = [], []
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -162,6 +171,8 @@
                 return
         self.fail("No message received in consumer")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(metrics.Metrics, "list_metrics")
     @mock.patch.object(prod, "list_metric_response")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -169,6 +180,7 @@
         """Test Gnocchi list metrics request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "1",
                    "metrics_list_request":
                        {"correlation_id": 123, }}
 
@@ -177,11 +189,10 @@
 
         for message in self.req_consumer:
             # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
+            if message.key == "list_metric_request":
                 # Mock an empty list generated by the request
                 list_metrics.return_value = []
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -192,6 +203,8 @@
                 return
         self.fail("No message received in consumer")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(metrics.Metrics, "get_metric_id")
     @mock.patch.object(prod, "update_metric_response")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -199,6 +212,7 @@
         """Test Gnocchi update metric request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "correlation_id": 123,
                    "metric_create":
                        {"metric_name": "my_metric",
@@ -209,13 +223,12 @@
 
         for message in self.req_consumer:
             # Check the vim desired by the message
-            vim_type = json.loads(message.value)["vim_type"].lower()
-            if vim_type == "openstack":
+            if message.key == "update_metric_request":
                 # Gnocchi doesn't support metric updates
                 get_id.return_value = "metric_id"
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
-                # Reponse message is generated and sent via MON's producer
+                # Response message is generated and sent via MON's producer
                 # No metric update has taken place
                 resp.assert_called_with(
                     'update_metric_response', status=False, cor_id=123,
diff --git a/osm_mon/test/integration/test_notify_alarm.py b/osm_mon/test/integration/test_notify_alarm.py
index 96458ba..db21c4e 100644
--- a/osm_mon/test/integration/test_notify_alarm.py
+++ b/osm_mon/test/integration/test_notify_alarm.py
@@ -28,8 +28,8 @@
 import socket
 import unittest
 
-from BaseHTTPServer import BaseHTTPRequestHandler
-from BaseHTTPServer import HTTPServer
+from six.moves.BaseHTTPServer import BaseHTTPRequestHandler
+from six.moves.BaseHTTPServer import HTTPServer
 
 from threading import Thread
 
@@ -87,22 +87,22 @@
     def notify_alarm(self, values):
         """Mock the notify_alarm functionality to generate a valid response."""
         config = Config.instance()
-        config.read_environ("aodh")
+        config.read_environ()
         self._alarming = Alarming()
         self._common = Common()
         self._response = OpenStack_Response()
         self._producer = KafkaProducer('alarm_response')
         alarm_id = values['alarm_id']
 
-        auth_token = self._common._authenticate()
-        endpoint = self._common.get_endpoint("alarming")
+        auth_token = Common.get_auth_token('test_id')
+        endpoint = Common.get_endpoint('alarming', 'test_id')
 
         # If authenticated generate and send response message
-        if (auth_token is not None and endpoint is not None):
+        if auth_token is not None and endpoint is not None:
             url = "{}/v2/alarms/%s".format(endpoint) % alarm_id
 
             # Get the resource_id of the triggered alarm and the date
-            result = self._common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             alarm_details = json.loads(result.text)
             gnocchi_rule = alarm_details['gnocchi_resources_threshold_rule']
@@ -156,9 +156,9 @@
 class AlarmNotificationTest(unittest.TestCase):
     @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     @mock.patch.object(Common, "get_endpoint")
-    @mock.patch.object(Common, "_authenticate")
+    @mock.patch.object(Common, "get_auth_token")
     def test_post_notify_alarm(self, auth, endpoint, perf_req, resp, notify):
         """Integration test for notify_alarm."""
         url = 'http://localhost:{port}/users'.format(port=mock_server_port)
@@ -178,14 +178,14 @@
         endpoint.return_value = "my_endpoint"
         perf_req.return_value = MockResponse(valid_get_resp)
 
-        # Generate a post reqest for testing
-        requests.post(url, json.dumps(payload))
-
+        # Generate a post request for testing
+        response = requests.post(url, json.dumps(payload))
+        self.assertEqual(response.status_code, 200)
         # A response message is generated with the following details
         resp.assert_called_with(
             "notify_alarm", a_id="my_alarm_id", r_id="my_resource_id",
             sev="critical", date='dd-mm-yyyy 00:00', state="current_state",
             vim_type="OpenStack")
 
-        # Reponse message is sent back to the SO via MON's producer
+        # Response message is sent back to the SO via MON's producer
         notify.assert_called_with("notify_alarm", mock.ANY, "alarm_response")
diff --git a/osm_mon/test/integration/test_vim_account.py b/osm_mon/test/integration/test_vim_account.py
index bc610c3..e84b3cb 100644
--- a/osm_mon/test/integration/test_vim_account.py
+++ b/osm_mon/test/integration/test_vim_account.py
@@ -49,10 +49,12 @@
         except KafkaError:
             self.skipTest('Kafka server not present.')
 
-    def test_create_vim_account(self):
+    # TODO: REFACTOR. This test requires common_consumer running. Needs to be changed so it does not.
+    @unittest.skip("Needs refactoring.")
+    def test_create_edit_delete_vim_account(self):
         """Test vim_account creation message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
-        payload = {
+        create_payload = {
             "_id": "test_id",
             "name": "test_name",
             "vim_type": "openstack",
@@ -66,12 +68,48 @@
                 }
         }
 
-        self.producer.send('vim_account', key=b'create', value=json.dumps(payload))
+        self.producer.send('vim_account', key=b'create', value=json.dumps(create_payload))
 
         self.producer.flush()
 
-        # FIXME: Create a schema for a vim_account_create_response, so we can test it
-        time.sleep(5)
-        creds = self.auth_manager.get_credentials(payload['_id'])
-        self.assertEqual(creds.name, payload['name'])
-        self.assertEqual(json.loads(creds.config), payload['config'])
+        time.sleep(1)
+        creds = self.auth_manager.get_credentials(create_payload['_id'])
+        self.assertIsNotNone(creds)
+        self.assertEqual(creds.name, create_payload['name'])
+        self.assertEqual(json.loads(creds.config), create_payload['config'])
+
+        # Set-up message, producer and consumer for tests
+        edit_payload = {
+            "_id": "test_id",
+            "name": "test_name_edited",
+            "vim_type": "openstack",
+            "vim_url": "auth_url",
+            "vim_user": "user",
+            "vim_password": "password",
+            "vim_tenant_name": "tenant",
+            "config":
+                {
+                    "foo_edited": "bar_edited"
+                }
+        }
+
+        self.producer.send('vim_account', key=b'edit', value=json.dumps(edit_payload))
+
+        self.producer.flush()
+
+        time.sleep(1)
+        creds = self.auth_manager.get_credentials(edit_payload['_id'])
+        self.assertEqual(creds.name, edit_payload['name'])
+        self.assertEqual(json.loads(creds.config), edit_payload['config'])
+
+        delete_payload = {
+            "_id": "test_id"
+        }
+
+        self.producer.send('vim_account', key=b'delete', value=json.dumps(delete_payload))
+
+        self.producer.flush()
+
+        time.sleep(1)
+        creds = self.auth_manager.get_credentials(delete_payload['_id'])
+        self.assertIsNone(creds)
