public function set($name, $value, $emulate = null)
  {
    if (!strpos($name, '.'))
    {
      $this->__set($name, $value);
      return $this;
    }
    $name = $this->get_field_name($name);
    $this->_operations['$set'][$name] = $value;
    if ($emulate === FALSE || ($emulate === null && $this->_emulate === FALSE))
    {
      return $this->_set_dirty($name);
    }
    else
    {
      $ref = & $this->get_field_reference($name, TRUE);
      $ref = $value;
      return $this;
    }
  }