diff --git a/core/ViewDataTable/Factory.php b/core/ViewDataTable/Factory.php
index 67e329e6c7415850cb40bd4e9b5ef2dcde09fd3c..01a301cb19ce2f619b69a9b3d3835e49c1d50102 100644
--- a/core/ViewDataTable/Factory.php
+++ b/core/ViewDataTable/Factory.php
@@ -97,10 +97,6 @@ class Factory
 
         $defaultViewType = self::getDefaultViewTypeForReport($apiAction);
 
-        if (!$forceDefault && !empty($defaultViewType)) {
-            $defaultType = $defaultViewType;
-        }
-
         $isWidget = Common::getRequestVar('widget', '0', 'string');
 
         if (!empty($isWidget)) {
@@ -115,14 +111,22 @@ class Factory
             $savedViewDataTable = $params['viewDataTable'];
         }
 
-        $type = Common::getRequestVar('viewDataTable', $savedViewDataTable, 'string');
+        // order of default viewDataTables' priority is: function specified default, saved default, configured default for report
+        //   function specified default is preferred
+        // -> force default == true : defaultType ?: saved ?: defaultView
+        // -> force default == false : saved ?: defaultType ?: defaultView
+        if ($forceDefault) {
+            $defaultType = $defaultType ?: $savedViewDataTable ?: $defaultViewType;
+        } else {
+            $defaultType = $savedViewDataTable ?: $defaultType ?: $defaultViewType;
+        }
+
+        $type = Common::getRequestVar('viewDataTable', $defaultType, 'string');
 
         // Common::getRequestVar removes backslashes from the defaultValue in case magic quotes are enabled.
         // therefore do not pass this as a default value to getRequestVar()
-        if ('' === $type
-            || $forceDefault
-        ) {
-            $type = $defaultType ? : HtmlTable::ID;
+        if ('' === $type) {
+            $type = $defaultType ?: HtmlTable::ID;
         }
 
         $params['viewDataTable'] = $type;