Index: lib/OpenLayers/Control/SelectFeature.js
===================================================================
--- lib/OpenLayers/Control/SelectFeature.js	(revision 3197)
+++ lib/OpenLayers/Control/SelectFeature.js	(working copy)
@@ -27,13 +27,15 @@
     
     /**
      * @type {Function} Optional function to be called when a feature is selected.
-     *                  The function should expect to be called with a feature.
+     *                  The function should expect to be called with a feature and a 
+     *                  mouse event.
      */
     onSelect: function() {},
 
     /**
      * @type {Function} Optional function to be called when a feature is unselected.
-     *                  The function should expect to be called with a feature.
+     *                  The function should expect to be called with a feature and a 
+     *                  mouse event.
      */
     onUnselect: function() {},
 
@@ -76,28 +78,29 @@
 
     /**
      * Called when the feature handler detects a mouse-down on a feature
-     * @param {OpenLayers.Vector.Feature}
+     * @param {OpenLayers.Vector.Feature} feature
+     * @param {OpenLayers.Events} event
      */
-    downFeature: function(feature) {
+    downFeature: function(feature, event) {
         if(this.hover) {
             return;
         }
         if (this.multiple) {
             if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) {
-                this.unselect(feature);
+                this.unselect(feature, event);
             } else {
-                this.select(feature);
+                this.select(feature, event);
             }
         } else {
             if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) {
-                this.unselect(feature);
+                this.unselect(feature, event);
             } else {
                 if (this.layer.selectedFeatures) {
                     for (var i = 0; i < this.layer.selectedFeatures.length; i++) {
-                        this.unselect(this.layer.selectedFeatures[i]);
+                        this.unselect(this.layer.selectedFeatures[i], event);
                     }
                 }
-                this.select(feature);
+                this.select(feature, event);
             }
         }
     },
@@ -105,57 +108,61 @@
     /**
      * Called when the feature handler detects a mouse-over on a feature.
      * Only responds if this.hover is true.
-     * @param {OpenLayers.Feature.Vector}
+     * @param {OpenLayers.Feature.Vector} feature
+     * @param {OpenLayers.Events} event
      */
-    overFeature: function(feature) {
+    overFeature: function(feature, event) {
         if(!this.hover) {
             return;
         }
         if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1)) {
-            this.select(feature);
+            this.select(feature, event);
         }
     },
 
     /**
      * Called when the feature handler detects a mouse-out on a feature.
      * Only responds if this.hover is true.
-     * @param {OpenLayers.Feature.Vector}
+     * @param {OpenLayers.Feature.Vector} feature
+     * @param {OpenLayers.Events} event
      */
-    outFeature: function(feature) {
+    outFeature: function(feature, event) {
         if(!this.hover) {
             return;
         }
-        this.unselect(feature);
+        this.unselect(feature, event);
     },
     
     /**
      * Add feature to the layer's selectedFeature array, render the feature as
      * selected, and call the onSelect function.
      * @param {OpenLayers.Feature.Vector} feature
+     * @param {OpenLayers.Events} event
      */
-    select: function(feature) {
+    select: function(feature, event) {
         // Store feature style for restoration later
         if(feature.originalStyle == null) {
             feature.originalStyle = feature.style;
         }
         this.layer.selectedFeatures.push(feature);
         this.layer.drawFeature(feature, this.selectStyle);
-        this.onSelect(feature);
+        this.onSelect(feature, event);
     },
 
     /**
      * Remove feature from the layer's selectedFeature array, render the feature as
      * normal, and call the onUnselect function.
      * @param {OpenLayers.Feature.Vector} feature
+     * @param {OpenLayers.Events} event
      */
-    unselect: function(feature) {
+    unselect: function(feature, event) {
         // Store feature style for restoration later
         if(feature.originalStyle == null) {
             feature.originalStyle = feature.style;
         }
         this.layer.drawFeature(feature, feature.originalStyle);
         OpenLayers.Util.removeItem(this.layer.selectedFeatures, feature);
-        this.onUnselect(feature);
+        this.onUnselect(feature, event);
     },
 
     /** Set the map property for the control. 
Index: lib/OpenLayers/Handler/Feature.js
===================================================================
--- lib/OpenLayers/Handler/Feature.js	(revision 3197)
+++ lib/OpenLayers/Handler/Feature.js	(working copy)
@@ -33,7 +33,7 @@
      * @param {Array} callbacks An object with a 'over' property whos value is
      *                          a function to be called when the mouse is over
      *                          a feature. The callback should expect to recieve
-     *                          a single argument, the feature.
+     *                          two arguments: the feature and the mouse event.
      * @param {Object} options
      */
     initialize: function(control, layer, callbacks, options) {
@@ -98,19 +98,19 @@
             // over a new, out of the last and over a new, or still on the last
             if(!this.feature) {
                 // over a new feature
-                this.callback('over', [feature]);
+                this.callback('over', [feature, evt]);
             } else if(this.feature != feature) {
                 // out of the last and over a new
-                this.callback('out', [this.feature]);
-                this.callback('over', [feature]);
+                this.callback('out', [this.feature, evt]);
+                this.callback('over', [feature, evt]);
             }
             this.feature = feature;
-            this.callback(type, [feature]);
+            this.callback(type, [feature, evt]);
             return true;
         } else {
             if(this.feature) {
                 // out of the last
-                this.callback('out', [this.feature]);
+                this.callback('out', [this.feature, evt]);
                 this.feature = null;
             }
             return false;
