protected function _getSubManager( $domain, $manager, $name )
	{
		$domain = strtolower( $domain );
		$manager = strtolower( $manager );
		$config = $this->_getContext()->getConfig();


		if( empty( $domain ) || ctype_alnum( $domain ) === false ) {
			throw new MAdmin_Exception( sprintf('Invalid characters in domain name "%1$s"', $domain ) );
		}

		if( $name === null ) {
			$name = $config->get( 'classes/' . $domain . '/manager/' . $manager . '/name', 'Default' );
		}

		if( empty( $name ) || ctype_alnum( $name ) === false ) {
			throw new MAdmin_Exception( sprintf( 'Invalid characters in manager name "%1$s"', $name ) );
		}

		$domainname = ucfirst( $domain );
		$subnames = $this->_createSubNames( $manager );

		$classname = 'MAdmin_'. $domainname . '_Manager_' . $subnames . '_' . $name;
		$interface = 'MAdmin_'. $domainname . '_Manager_' . $subnames . '_Interface';

		if( class_exists( $classname ) === false ) {
			throw new MAdmin_Exception( sprintf('Class "%1$s" not available', $classname ) );
		}

		$subManager = new $classname( $this->_getContext() );

		if( ( $subManager instanceof $interface ) === false ) {
			throw new MAdmin_Exception( sprintf( 'Class "%1$s" does not implement interface "%2$s"', $classname, $interface ) );
		}

		return $subManager;
	}