The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
 
+## [2.1.1]
+### Changed
+* Fixes for Flask, MarkupSafe versions + tox (DCAEGEN2-3086)
+
 ## [2.1.0]
 ### Changed
 * Exit Handler Update (DCAEGEN2-3084)
 
     logger.info(f'API call received to delete measurement group: {measurement_group_name}')
     try:
         measurement_group_administrative_status = \
-            measurement_group_service.query_get_meas_group_admin_status(subscription_name, measurement_group_name)
+            measurement_group_service.query_get_meas_group_admin_status(subscription_name,
+                                                                        measurement_group_name)
         if measurement_group_administrative_status == AdministrativeState.LOCKED.value:
-            if measurement_group_service.query_to_delete_meas_group(subscription_name, measurement_group_name) == 1:
+            if measurement_group_service.query_to_delete_meas_group(subscription_name,
+                                                                    measurement_group_name) == 1:
                 return None, HTTPStatus.NO_CONTENT
             else:
                 logger.error(f'Measurement Group not found with name {measurement_group_name}')
-                return {'error': f'Measurement Group not found with name {measurement_group_name}'}, \
-                    HTTPStatus.NOT_FOUND.value
+                return {'error': f'Measurement Group not found with name '
+                                 f'{measurement_group_name}'}, HTTPStatus.NOT_FOUND.value
         else:
             logger.error('Measurement Group was not deleted because the Administrative State '
                          f'was {measurement_group_administrative_status}')
 
         int: Returns '1' if subscription exists and deleted successfully else '0'
     """
     affected_rows = db.session.query(MeasurementGroupModel) \
-        .filter_by(subscription_name=subscription_name, measurement_group_name=measurement_group_name).delete()
+        .filter_by(subscription_name=subscription_name,
+                   measurement_group_name=measurement_group_name).delete()
     db.session.commit()
     return affected_rows
 
 
   <groupId>org.onap.dcaegen2.services</groupId>
   <artifactId>pmsh</artifactId>
   <name>dcaegen2-services-pm-subscription-handler</name>
-  <version>2.1.0-SNAPSHOT</version>
+  <version>2.1.1-SNAPSHOT</version>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <sonar.sources>.</sonar.sources>
 
 
 setup(
     name="pm_subscription_handler",
-    version="2.1.0",
+    version="2.1.1",
     packages=find_packages(),
     author="lego@est.tech",
     author_email="lego@est.tech",
         "requests==2.22.0",
         "tenacity==6.0.0",
         "connexion==2.5.0",
+        "MarkupSafe==2.0.1",
         "flask_sqlalchemy==2.4.1",
-        "Flask==1.1.1",
+        "Flask==1.1.4",
         "tornado==6.1",
         "swagger-ui-bundle==0.0.6",
         "psycopg2-binary==2.8.6",
 
 # ============LICENSE_START===================================================
-#  Copyright (C) 2020-2021 Nordix Foundation.
+#  Copyright (C) 2020-2022 Nordix Foundation.
 # ============================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
         super().tearDownClass()
 
     @patch('mod.pmsh_config.AppConfig.get_from_topic')
-    @patch('mod.aai_event_handler.NetworkFunction.delete')
-    def test_process_aai_delete_events(self, mock_nf_delete, mr_aai_mock):
+    @patch('mod.network_function.NetworkFunction.set_nf_model_params')
+    @patch('mod.network_function.NetworkFunction.delete')
+    def test_process_aai_delete_events(self, mock_nf_delete, mock_set_sdnc_params, mr_aai_mock):
+        mock_set_sdnc_params.return_value = True
         mr_aai_mock.return_value = self.mr_aai_events
         aai_handler = AAIEventHandler(self.app)
         network_function = NetworkFunctionModel(
 
         self.assertEqual(query_meas_group_by_name('MG_unlocked', 'MG1').measurement_group_name,
                          'MG1')
 
-
     def test_delete_sub_when_state_locked(self):
         subscription_unlocked_data = create_subscription_data('MG_locked')
         subscription_unlocked_data.measurement_groups[0].measurement_group_name = 'lock'
 
 major=2
 minor=1
-patch=0
+patch=1
 base_version=${major}.${minor}.${patch}
 release_version=${base_version}
 snapshot_version=${base_version}-SNAPSHOT