Index: tests/test_Tween.html
===================================================================
--- tests/test_Tween.html	(revision 6382)
+++ tests/test_Tween.html	(working copy)
@@ -46,12 +46,18 @@
     }
 
     function test_Tween_stop(t) {
-        t.plan(1);
+        t.plan(2);
         
         var tween = new OpenLayers.Tween();
         tween.interval = window.setInterval(function() {}, 10);
+        tween.playing = true;
         tween.stop();
         t.eq(tween.interval, null, "tween correctly stopped");
+        
+        tween.interval = window.setInterval(function() {}, 10);
+        tween.playing = false;
+        tween.stop();
+        t.ok(tween.interval != null, "stop method doesn't do anything if tween isn't running");
     }
 
     </script> 
Index: lib/OpenLayers/Map.js
===================================================================
--- lib/OpenLayers/Map.js	(revision 6382)
+++ lib/OpenLayers/Map.js	(working copy)
@@ -318,6 +318,12 @@
      *           Default is to fall through.
      */
     fallThrough: true,
+    
+    /**
+     * Property: panTween
+     * {OpenLayers.Tween} Animated panning tween object, see panTo()
+     */
+    panTween: null,
 
     /**
      * Constructor: OpenLayers.Map
Index: lib/OpenLayers/Tween.js
===================================================================
--- lib/OpenLayers/Tween.js	(revision 6382)
+++ lib/OpenLayers/Tween.js	(working copy)
@@ -58,6 +58,12 @@
      */
     interval: null,
     
+    /**
+     * APIProperty: playing
+     * {Boolean} Tells if the easing is currently playing
+     */
+    playing: false,
+    
     /** 
      * Constructor: OpenLayers.Tween
      * Creates a Tween.
@@ -80,6 +86,7 @@
      * options - {Object} hash of options (for example callbacks (start, eachStep, done))
      */
     start: function(begin, finish, duration, options) {
+        this.playing = true;
         this.begin = begin;
         this.finish = finish;
         this.duration = duration;
@@ -98,14 +105,20 @@
     
     /**
      * APIMethod: stop
-     * Stops the Tween, and calls the finish callback
+     * Stops the Tween, and calls the done callback
+     *     Doesn't do anything if animation is already finished
      */
     stop: function() {
+        if (!this.playing) {
+            return
+        }
+        
         if (this.callbacks && this.callbacks.done) {
             this.callbacks.done.call(this, this.finish);
         }
         window.clearInterval(this.interval);
         this.interval = null;
+        this.playing = false;
     },
     
     /**
