diff --git a/src/ui/public/visualize/visualization.js b/src/ui/public/visualize/visualization.js
index 769da61c07148..96ce3bc7b5f8f 100644
--- a/src/ui/public/visualize/visualization.js
+++ b/src/ui/public/visualize/visualization.js
@@ -6,6 +6,7 @@ import { uiModules } from 'ui/modules';
 import { ResizeCheckerProvider } from 'ui/resize_checker';
 import visualizationTemplate from 'ui/visualize/visualization.html';
 import { getUpdateStatus } from 'ui/vis/update_status';
+import { PersistedState } from 'ui/persisted_state';
 import 'angular-sanitize';
 
 uiModules
@@ -35,9 +36,12 @@ uiModules
 
         $scope.addLegend = false;
 
+        // Set the passed in uiState to the vis object, so we don't require any
+        // users of the <visualization/> directive to manually set the uiState.
+        if (!$scope.uiState) $scope.uiState = new PersistedState({});
+        $scope.vis.setUiState($scope.uiState);
         // Whenever the uiState changed, that the visualization should use,
-        // attach it to the actual Vis class. Thus we don't require any users
-        // of the <visualization/> directive to manuallay set the uiState.
+        // attach it to the actual Vis class.
         $scope.$watch('uiState', (uiState) => {
           $scope.vis.setUiState(uiState);
         });
diff --git a/test/functional/apps/dashboard/_dashboard_state.js b/test/functional/apps/dashboard/_dashboard_state.js
index ad62cc8af22ca..6ef47a5f17b5e 100644
--- a/test/functional/apps/dashboard/_dashboard_state.js
+++ b/test/functional/apps/dashboard/_dashboard_state.js
@@ -134,7 +134,7 @@ export default function ({ getService, getPageObjects }) {
       expect(headers[1]).to.be('agent');
     });
 
-    it.skip('Tile map with no changes will update with visualization changes', async () => {
+    it('Tile map with no changes will update with visualization changes', async () => {
       await PageObjects.dashboard.gotoDashboardLandingPage();
 
       await PageObjects.dashboard.clickNewDashboard();