public function router($option, $client = null, $version = null)
	{
		$option = $this->canonical($option);
		$client = ($client ? $client : $this->app['client']->alias);
		$key    = $option . $client;

		if (!isset(self::$routers[$key]))
		{
			$compname = ucfirst(substr($option, 4));

			$client = ucfirst($client);

			$legacy = $compname . 'Router';
			$name   = '\\Components\\' . $compname . '\\' . $client . '\\Router';

			if (!class_exists($name) && !class_exists($legacy))
			{
				// Use the component routing handler if it exists
				$paths = array();
				if (!is_null($version))
				{
					$paths[] = $this->path($option) . DIRECTORY_SEPARATOR . strtolower($client) . DIRECTORY_SEPARATOR . 'routerv' . $version . '.php';
				}
				$paths[] = $this->path($option) . DIRECTORY_SEPARATOR . strtolower($client) . DIRECTORY_SEPARATOR . 'router.php';
				$paths[] = $this->path($option) . DIRECTORY_SEPARATOR . 'router.php';

				// Use the custom routing handler if it exists
				foreach ($paths as $path)
				{
					if (file_exists($path))
					{
						require_once $path;
						break;
					}
				}
			}

			if (class_exists($name))
			{
				$reflection = new ReflectionClass($name);

				if (in_array('Hubzero\\Component\\Router\\RouterInterface', $reflection->getInterfaceNames()))
				{
					self::$routers[$key] = new $name;
				}
			}
			else if (class_exists($legacy))
			{
				$reflection = new ReflectionClass($legacy);

				if (in_array('Hubzero\\Component\\Router\\RouterInterface', $reflection->getInterfaceNames()))
				{
					self::$routers[$key] = new $legacy;
				}
			}

			if (!isset(self::$routers[$key]))
			{
				self::$routers[$key] = new Legacy($compname);
			}
		}

		return self::$routers[$key];
	}