diff --git a/Civi/DataProcessor/Output/UIOutputHelper.php b/Civi/DataProcessor/Output/UIOutputHelper.php
index 836baf6b8d611d4eaf57295d193c7aea1199426a..cdab5ca242e4e78e2503c93e8a9b19bb0e3899ed 100644
--- a/Civi/DataProcessor/Output/UIOutputHelper.php
+++ b/Civi/DataProcessor/Output/UIOutputHelper.php
@@ -70,12 +70,21 @@ class UIOutputHelper {
       if (CIVICRM_UF === 'UnitTests') {
         return;
       }
+      $factory = dataprocessor_get_factory();
       if ($op == 'delete') {
         $output = civicrm_api3('DataProcessorOutput', 'getsingle', ['id' => $id]);
+        $outputClass = $factory->getOutputByName($output['type']);
+        if ($outputClass instanceof UIOutputInterface) {
+          self::$rebuildMenu = TRUE;
+        }
         self::removeOutputFromNavigation($output['configuration']);
       }
       elseif ($op == 'edit') {
         $output = civicrm_api3('DataProcessorOutput', 'getsingle', ['id' => $id]);
+        $outputClass = $factory->getOutputByName($output['type']);
+        if ($outputClass instanceof UIOutputInterface) {
+          self::$rebuildMenu = TRUE;
+        }
         if (!isset($output['configuration']['navigation_id']) && !isset($params['configuration']['navigation_parent_path'])) {
           return;
         }
@@ -97,11 +106,14 @@ class UIOutputHelper {
           }
         }
       }
-      elseif ($op == 'create' && isset($params['configuration']['navigation_parent_path'])) {
-        $dataProcessor = civicrm_api3('DataProcessor', 'getsingle', ['id' => $params['data_processor_id']]);
-        $configuration = self::createOrUpdateNavigationItem($params, $dataProcessor);
-        if ($configuration) {
-          $params['configuration'] = $configuration;
+      elseif ($op == 'create') {
+        self::$rebuildMenu = true;
+        if (isset($params['configuration']['navigation_parent_path'])) {
+          $dataProcessor = civicrm_api3('DataProcessor', 'getsingle', ['id' => $params['data_processor_id']]);
+          $configuration = self::createOrUpdateNavigationItem($params, $dataProcessor);
+          if ($configuration) {
+            $params['configuration'] = $configuration;
+          }
         }
       }
     } elseif ($objectName == 'DataProcessor' && $op == 'edit') {
diff --git a/api/v3/DataProcessor.php b/api/v3/DataProcessor.php
index 7c0b50c705c54064cba8fc327a4e11eeab2fedcb..34d16b74d76cdc93392662fe5e606b2c16329a23 100644
--- a/api/v3/DataProcessor.php
+++ b/api/v3/DataProcessor.php
@@ -67,6 +67,7 @@ function civicrm_api3_data_processor_delete($params) {
   CRM_Dataprocessor_BAO_DataProcessorField::deleteWithDataProcessorId($params['id']);
   CRM_Dataprocessor_BAO_DataProcessorFilter::deleteWithDataProcessorId($params['id']);
   CRM_Dataprocessor_BAO_DataProcessorSource::deleteWithDataProcessorId($params['id']);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
diff --git a/api/v3/DataProcessorField.php b/api/v3/DataProcessorField.php
index a9047bd183c07ac2e767a530579b18ee5062c42b..10317fd861f9c9309d9d841e81fb74751ccd8b6a 100644
--- a/api/v3/DataProcessorField.php
+++ b/api/v3/DataProcessorField.php
@@ -56,6 +56,7 @@ function civicrm_api3_data_processor_field_create($params) {
 function civicrm_api3_data_processor_field_delete($params) {
   $dataProcessorId = civicrm_api3('DataProcessorField', 'getvalue', array('id' => $params['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
diff --git a/api/v3/DataProcessorFilter.php b/api/v3/DataProcessorFilter.php
index 22e6afc07639bac29da791ac3c0ebfd75710fb5a..a8ad730f6a71a6cf2a89493d1aeb52f4bbf77e95 100644
--- a/api/v3/DataProcessorFilter.php
+++ b/api/v3/DataProcessorFilter.php
@@ -56,6 +56,7 @@ function civicrm_api3_data_processor_filter_create($params) {
 function civicrm_api3_data_processor_filter_delete($params) {
   $dataProcessorId = civicrm_api3('DataProcessorFilter', 'getvalue', array('id' => $params['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
diff --git a/api/v3/DataProcessorOutput.php b/api/v3/DataProcessorOutput.php
index ff25aceaaed3ef1e76cfc6ab7f790d69fb7d5cd3..29330b15160d5e2b0f0fe865ab8f1a0b25496371 100644
--- a/api/v3/DataProcessorOutput.php
+++ b/api/v3/DataProcessorOutput.php
@@ -30,6 +30,7 @@ function civicrm_api3_data_processor_output_create($params) {
   $return = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
   $dataProcessorId = civicrm_api3('DataProcessorOutput', 'getvalue', array('id' => $return['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return $return;
 }
 
diff --git a/api/v3/DataProcessorSource.php b/api/v3/DataProcessorSource.php
index 4d93a0449e32d0c4c99a383e10e9e876f3bbe856..133030c9e09135c50facb43d0ecd2926ac4e275b 100644
--- a/api/v3/DataProcessorSource.php
+++ b/api/v3/DataProcessorSource.php
@@ -56,6 +56,7 @@ function civicrm_api3_data_processor_source_create($params) {
 function civicrm_api3_data_processor_source_delete($params) {
   $dataProcessorId = civicrm_api3('DataProcessorSource', 'getvalue', array('id' => $params['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }