diff --git a/platform/features/imagery/bundle.js b/platform/features/imagery/bundle.js
index c1ff369b5a..ddca767501 100644
--- a/platform/features/imagery/bundle.js
+++ b/platform/features/imagery/bundle.js
@@ -79,6 +79,7 @@ define([
                     "depends": [
                         "$scope",
                         "$window",
+                        "$element",
                         "openmct"
                     ]
                 }
diff --git a/platform/features/imagery/src/controllers/ImageryController.js b/platform/features/imagery/src/controllers/ImageryController.js
index 473eb9047c..d8be8d46dc 100644
--- a/platform/features/imagery/src/controllers/ImageryController.js
+++ b/platform/features/imagery/src/controllers/ImageryController.js
@@ -39,7 +39,7 @@ define(
          * @memberof platform/features/imagery
          */
 
-        function ImageryController($scope, $window, openmct) {
+        function ImageryController($scope, $window, element, openmct) {
             this.$scope = $scope;
             this.$window = $window;
             this.openmct = openmct;
@@ -48,10 +48,8 @@ define(
             this.zone = "";
             this.imageUrl = "";
             this.requestCount = 0;
-            this.lastBound = undefined;
-            this.autoScroll = false;
-            this.scrollable =
-                $(document.getElementsByClassName('l-image-thumbs-wrapper')[0]);
+            this.scrollable = $(element[0]);
+            this.autoScroll = openmct.time.clock() ? true : false;
 
             this.$scope.imageHistory = [];
             this.$scope.filters = {
@@ -66,11 +64,9 @@ define(
             this.onBoundsChange = this.onBoundsChange.bind(this);
             this.onScroll = this.onScroll.bind(this);
 
-            // Subscribe to telemetry when a domain object becomes available
             this.subscribe(this.$scope.domainObject);
 
-            // Unsubscribe when the plot is destroyed
-            this.$scope.$on("$destroy", this.stopListening);
+            this.$scope.$on('$destroy', this.stopListening);
             this.openmct.time.on('bounds', this.onBoundsChange);
             this.scrollable.on('scroll', this.onScroll);
         }
@@ -109,19 +105,24 @@ define(
                 .request(this.domainObject, bounds)
                     .then(function (values) {
                         if (this.requestCount > requestId) {
-                            return Promise.reject('Stale request');
+                            return Promise.resolve('Stale request');
                         }
                         values.forEach(function (datum) {
                             this.updateHistory(datum);
-                        }.bind(this));
+                        }, this);
                         this.requestLad(true);
                     }.bind(this));
         };
 
-        // Optional addToHistory argument allows for two use cases:
-        //     updating url and timestamp only for standard imagery view,
-        //     i.e to populate the view before history is requested OR
-        //     appending to the running imagery history
+        /**
+         * Makes a request for the most recent datum in the
+         * telelmetry store. Optional addToHistory argument
+         * determines whether the requested telemetry should
+         * be added to history or only used to update the current
+         * image url and timestamp.
+         * @private
+         * @param {boolean} [addToHistory] if true, adds to history
+         */
         ImageryController.prototype.requestLad = function (addToHistory) {
             this.openmct.telemetry
                 .request(this.domainObject, {
@@ -145,16 +146,25 @@ define(
             }
         };
 
-        // Query for new historical data on manual bound change
+        /**
+         * Responds to bound change event be requesting new
+         * historical data if the bound change was manual.
+         * @private
+         * @param {object} [newBounds] new bounds object
+         * @param {boolean} [tick] true when change is automatic
+         */
         ImageryController.prototype.onBoundsChange = function (newBounds, tick) {
-            if (this.domainObject && !tick &&
-                !_.isEqual(this.lastBound, newBounds)) {
-                this.lastBound = newBounds;
+            if (this.domainObject && !tick) {
                 this.requestHistory(newBounds);
             }
         };
 
-        // Update displayable values to reflect latest image telemetry
+        /**
+         * Updates displayable values to match those of the most
+         * recently recieved datum.
+         * @param {object} [datum] the datum
+         * @private
+         */
         ImageryController.prototype.updateValues = function (datum) {
             if (this.isPaused) {
                 this.nextDatum = datum;
@@ -166,7 +176,12 @@ define(
 
         };
 
-        // Update displayable values and append datum to running history
+        /**
+         * Appends given imagery datum to running history.
+         * @private
+         * @param {object} [datum] target telemetry datum
+         * @returns {boolean} falsy when a duplicate datum is given
+         */
         ImageryController.prototype.updateHistory = function (datum) {
             if (this.$scope.imageHistory.length === 0 ||
                 !_.isEqual(this.$scope.imageHistory.slice(-1)[0], datum)) {
diff --git a/platform/features/imagery/test/controllers/ImageryControllerSpec.js b/platform/features/imagery/test/controllers/ImageryControllerSpec.js
index e9a708a7fc..ce81e6ef67 100644
--- a/platform/features/imagery/test/controllers/ImageryControllerSpec.js
+++ b/platform/features/imagery/test/controllers/ImageryControllerSpec.js
@@ -21,8 +21,14 @@
  *****************************************************************************/
 
 define(
-    ["../../src/controllers/ImageryController"],
-    function (ImageryController) {
+    [
+        "zepto",
+        "../../src/controllers/ImageryController"
+    ],
+    function ($, ImageryController) {
+
+        var MOCK_ELEMENT_TEMPLATE =
+            '<div class="l-image-thumbs-wrapper"></div>';
 
         describe("The Imagery controller", function () {
             var $scope,
@@ -34,7 +40,8 @@ define(
                 prefix,
                 controller,
                 hasLoaded,
-                mockWindow;
+                mockWindow,
+                mockElement;
 
             beforeEach(function () {
                 $scope = jasmine.createSpyObj('$scope', ['$on', '$watch']);
@@ -50,6 +57,7 @@ define(
                     ]),
                     time: jasmine.createSpyObj('timeAPI', [
                         'timeSystem',
+                        'clock',
                         'on',
                         'off'
                     ]),
@@ -94,18 +102,23 @@ define(
                 });
                 metadata.value.andReturn("timestamp");
                 metadata.valuesForHints.andReturn(["value"]);
+                mockElement = $(MOCK_ELEMENT_TEMPLATE);
                 mockWindow = jasmine.createSpyObj('$window', ['requestAnimationFrame']);
                 mockWindow.requestAnimationFrame.andCallFake(function (f) {
                     return f();
                 });
 
-                controller = new ImageryController($scope, mockWindow, openmct);
+                controller = new ImageryController(
+                    $scope,
+                    mockWindow,
+                    mockElement,
+                    openmct
+                );
             });
 
             describe("when loaded", function () {
                 var callback,
                     boundsListener;
-                var mockBounds = {start: 1434600000000, end: 1434600500000};
 
                 beforeEach(function () {
                     waitsFor(function () {
@@ -198,6 +211,7 @@ define(
                 });
 
                 it("listens for bounds event and responds to tick and manual change", function () {
+                    var mockBounds = {start: 1434600000000, end: 1434600500000};
                     expect(openmct.time.on).toHaveBeenCalled();
                     openmct.telemetry.request.reset();
                     boundsListener(mockBounds, true);
@@ -206,14 +220,6 @@ define(
                     expect(openmct.telemetry.request).toHaveBeenCalledWith(newDomainObject, mockBounds);
                 });
 
-                it("recognizes duplicate bounds", function () {
-                    openmct.telemetry.request.reset();
-                    boundsListener(mockBounds, false);
-                    boundsListener(mockBounds, false);
-                    boundsListener(mockBounds, false);
-                    expect(openmct.telemetry.request.calls.length).toBe(1);
-                });
-
                 it ("doesnt append duplicate datum", function () {
                     var mockDatum = {url: 'image/url', utc: 1434600000000};
                     expect(controller.updateHistory(mockDatum)).toBe(true);