public static function create( \Aimeos\MShop\Context\Item\Iface $context, $path )
	{
		if( empty( $path ) ) {
			throw new \Aimeos\Controller\Frontend\Exception( sprintf( 'Controller path is empty' ) );
		}

		if( self::$cache === false || !isset( self::$objects[$path] ) )
		{
			if( ctype_alnum( $path ) === false ) {
				throw new \Aimeos\Controller\Frontend\Exception( sprintf( 'Invalid characters in controller name "%1$s"', $path ) );
			}

			$factory = '\\Aimeos\\Controller\\Frontend\\' . ucfirst( $path ) . '\\Factory';

			if( class_exists( $factory ) === false ) {
				throw new \Aimeos\Controller\Frontend\Exception( sprintf( 'Class "%1$s" not available', $factory ) );
			}

			if( ( $controller = call_user_func_array( [$factory, 'create'], [$context] ) ) === false ) {
				throw new \Aimeos\Controller\Frontend\Exception( sprintf( 'Invalid factory "%1$s"', $factory ) );
			}

			self::$objects[$path] = $controller;
		}

		return clone self::$objects[$path];
	}