docs: function (newOptions, reinitialize) {
  
          if (this.options == null) {
              this.options = {};
          }
          
          if (newOptions) {
              // make sure this.projection references a projection object
              if(typeof newOptions.projection == "string") {
                  newOptions.projection = new OpenLayers.Projection(newOptions.projection);
              }
              if (newOptions.projection) {
                  // get maxResolution, units and maxExtent from projection defaults if
                  // they are not defined already
                  OpenLayers.Util.applyDefaults(newOptions,
                      OpenLayers.Projection.defaults[newOptions.projection.getCode()]);
              }
              // allow array for extents
              if (newOptions.maxExtent && !(newOptions.maxExtent instanceof OpenLayers.Bounds)) {
                  newOptions.maxExtent = new OpenLayers.Bounds(newOptions.maxExtent);
              }
              if (newOptions.minExtent && !(newOptions.minExtent instanceof OpenLayers.Bounds)) {
                  newOptions.minExtent = new OpenLayers.Bounds(newOptions.minExtent);
              }
          }
  
          // update our copy for clone
          OpenLayers.Util.extend(this.options, newOptions);
  
          // add new options to this
          OpenLayers.Util.extend(this, newOptions);
          
          // get the units from the projection, if we have a projection
          // and it it has units
          if(this.projection && this.projection.getUnits()) {
              this.units = this.projection.getUnits();
          }
  
          // re-initialize resolutions if necessary, i.e. if any of the
          // properties of the "properties" array defined below is set
          // in the new options
          if(this.map) {
              // store current resolution so we can try to restore it later
              var resolution = this.map.getResolution();
              var properties = this.RESOLUTION_PROPERTIES.concat(
                  ["projection", "units", "minExtent", "maxExtent"]
              );
              for(var o in newOptions) {
                  if(newOptions.hasOwnProperty(o) &&
                     OpenLayers.Util.indexOf(properties, o) >= 0) {
  
                      this.initResolutions();
                      if (reinitialize && this.map.baseLayer === this) {
                          // update map position, and restore previous resolution
                          this.map.setCenter(this.map.getCenter(),
                              this.map.getZoomForResolution(resolution),
                              false, true
                          );
                          // trigger a changebaselayer event to make sure that
                          // all controls (especially
                          // OpenLayers.Control.PanZoomBar) get notified of the
                          // new options
                          this.map.events.triggerEvent("changebaselayer", {
                              layer: this
                          });
                      }
                      break;
                  }
              }
          }
      }