public function field($name = null, $flatten = false, $tabular_form = true)
	{
		if ($name === null)
		{
			$fields = $this->fields;

			if ($flatten)
			{
				foreach ($this->fieldset_children as $fs_name => $fieldset)
				{
					if ($tabular_form or ! $fieldset->get_tabular_form())
					{
						\Arr::insert_after_key($fields, $fieldset->field(null, true), $fs_name);
					}
					unset($fields[$fs_name]);
				}
			}
			return $fields;
		}

		if ( ! array_key_exists($name, $this->fields))
		{
			if ($flatten)
			{
				foreach ($this->fieldset_children as $fieldset)
				{
					if (($field = $fieldset->field($name)) !== false)
					{
						return $field;
					}
				}
			}
			return false;
		}

		return $this->fields[$name];
	}