protected function modifyCallback($matches) {
		if (!empty($matches[1])) {
			parent::modify($matches[1]);
		}

		list($y, $m, $d) = explode('-', $this->format('y-M-d'));
		$change = strtolower($matches[2]);
		$unit = strtolower($matches[3]);

		switch ($change) {
			case "next":
				$change = 1;
				break;

			case "last":
			case "previous":
				$change = -1;
				break;
		}

		switch ($unit) {
			case "month":
				$m += $change;
				if ($m > 12) {
					$y += floor($m/12);
					$m = $m % 12;
				} elseif ($m < 1) {
					$y += ceil($m/12) - 1;
					$m = $m % 12 + 12;
				}
				break;

			case "year":
				$y += $change;
				break;
		}

		$this->setDate($y, $m, $d);

		return '';
	}