docs: function (component, o) {
              var _newOverlay = null;
              if (_ju.isArray(o)) {	// this is for the shorthand ["Arrow", { width:50 }] syntax
                  // there's also a three arg version:
                  // ["Arrow", { width:50 }, {location:0.7}]
                  // which merges the 3rd arg into the 2nd.
                  var type = o[0],
                  // make a copy of the object so as not to mess up anyone else's reference...
                      p = _jp.extend({component: component, _jsPlumb: component._jsPlumb.instance}, o[1]);
                  if (o.length == 3) _jp.extend(p, o[2]);
                  _newOverlay = new _jp.Overlays[component._jsPlumb.instance.getRenderMode()][type](p);
              } else if (o.constructor == String) {
                  _newOverlay = new _jp.Overlays[component._jsPlumb.instance.getRenderMode()][o]({component: component, _jsPlumb: component._jsPlumb.instance});
              } else {
                  _newOverlay = o;
              }
  
              _newOverlay.id = _newOverlay.id || _ju.uuid();
              component.cacheTypeItem("overlay", _newOverlay, _newOverlay.id);
              //component._jsPlumb.overlays.push(_newOverlay);
              component._jsPlumb.overlays[_newOverlay.id] = _newOverlay;
  
              return _newOverlay;
          }