function itemFilter(event) {
  return event.item;
}

function markTarget(event) {
  // grab upstream collector feeding the mark operator
  var source = event.item.mark.source;
  return source.source || source;
}

function invoke(name) {
  return function(_, event) {
    return event.vega.view()
      .changeset()
      .encode(event.item, name);
  };
}

export default function(hoverSet, leaveSet) {
  // invoke hover set upon mouseover
  this.on(
    this.events('view', 'mouseover', itemFilter),
    markTarget,
    invoke(hoverSet || 'hover')
  );

  // invoke leave set upon mouseout
  this.on(
    this.events('view', 'mouseout', itemFilter),
    markTarget,
    invoke(leaveSet || 'update')
  );

  return this;
}

@@ -391,24 +391,106 @@
 leaveSet) %7B%0A
+  hoverSet = hoverSet %7C%7C 'hover';%0A  leaveSet = %5BleaveSet %7C%7C 'update', hoverSet%5D;%0A%0A
   // invoke 
@@ -514,16 +514,16 @@
 useover%0A
-
   this.o
@@ -610,27 +610,16 @@
 hoverSet
- %7C%7C 'hover'
 )%0A  );%0A%0A
@@ -722,32 +722,32 @@
     markTarget,%0A
+
     invoke(leave
@@ -749,28 +749,16 @@
 leaveSet
- %7C%7C 'update'
 )%0A  );%0A%0A

Update hover handling to prevent unnecessary processing.