public static function blueprint( $data, $path ) 
	{
		
		if ( !is_array( $data ) )
		{
			throw new \InvalidArgumentException( "CCOrbit_Ship::blueprint - first argument has to be an array." );
		}
		
		$ship = new static();
		
		$name = $data['name'];
		$namespace = $data['namespace'];
		
		// check if we have a name if not use dir name
		if ( is_null( $name ) ) {
			$name = basename( $path );
		}
		
		// get ship namespace
		if ( $namespace === true ) {
			$namespace = $name;
		}
		
		// try to load other ship class
		if ( is_string( $namespace ) ) 
		{
			
			// register the namespace
			\CCFinder::bundle( $namespace, $path );
			
			$class = $namespace.'\\Ship';
			
			if ( class_exists( $class ) ) 
			{
				$ship = new $class();
			}
		}
		
		// set the path
		$ship->name = $name;
		$ship->path = $path;
		$ship->namespace = $namespace;
		
		// assign the data
		foreach( $data as $key => $item ) 
		{
			if ( property_exists( $ship, $key ) ) 
			{
				$ship->$key = $item;
			}
		}
		
		// check the namespace
		if ( $ship->namespace === false ) 
		{
			if ( is_null( $ship->wake ) ) 
			{
				$ship->wake = 'shipyard/wake'.EXT;
			}
			if ( is_null( $ship->install ) ) 
			{
				$ship->install = 'shipyard/install'.EXT;
			}
			if ( is_null( $ship->uninstall ) ) 
			{
				$ship->uninstall = 'shipyard/uninstall'.EXT;
			}
		} 
		elseif ( is_string( $ship->namespace ) ) 
		{
			if ( is_null( $ship->wake ) ) 
			{
				$ship->wake = 'Ship::wake';
			}
			if ( is_null( $ship->install ) ) 
			{
				$ship->install = 'Ship::install';
			}
			if ( is_null( $ship->uninstall ) ) 
			{
				$ship->uninstall = 'Ship::uninstall';
			}
		}
		
		return $ship;
	}