docs: function(vertex, pixel) {
          var pos = this.map.getLonLatFromViewPortPx(pixel);
          var geom = vertex.geometry;
          geom.move(pos.lon - geom.x, pos.lat - geom.y);
          this.modified = true;
          /**
           * Five cases:
           * 1) dragging a simple point
           * 2) dragging a virtual vertex
           * 3) dragging a drag handle
           * 4) dragging a real vertex
           * 5) dragging a radius handle
           */
          if(this.feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
              // dragging a simple point
              this.layer.events.triggerEvent("vertexmodified", {
                  vertex: vertex.geometry,
                  feature: this.feature,
                  pixel: pixel
              });
          } else {
              if(vertex._index) {
                  // dragging a virtual vertex
                  vertex.geometry.parent.addComponent(vertex.geometry,
                                                      vertex._index);
                  // move from virtual to real vertex
                  delete vertex._index;
                  OpenLayers.Util.removeItem(this.virtualVertices, vertex);
                  this.vertices.push(vertex);
              } else if(vertex == this.dragHandle) {
                  // dragging a drag handle
                  this.layer.removeFeatures(this.vertices, {silent: true});
                  this.vertices = [];
                  if(this.radiusHandle) {
                      this.layer.destroyFeatures([this.radiusHandle], {silent: true});
                      this.radiusHandle = null;
                  }
              } else if(vertex !== this.radiusHandle) {
                  // dragging a real vertex
                  this.layer.events.triggerEvent("vertexmodified", {
                      vertex: vertex.geometry,
                      feature: this.feature,
                      pixel: pixel
                  });
              }
              // dragging a radius handle - no special treatment
              if(this.virtualVertices.length > 0) {
                  this.layer.destroyFeatures(this.virtualVertices, {silent: true});
                  this.virtualVertices = [];
              }
              this.layer.drawFeature(this.feature, this.standalone ? undefined :
                                              'select');
          }
          // keep the vertex on top so it gets the mouseout after dragging
          // this should be removed in favor of an option to draw under or
          // maintain node z-index
          this.layer.drawFeature(vertex);
      }