public static function callObjectMethod( $object, $methodName, $parameters = array(), $checkMethod = TRUE, $allowProtected = FALSE )
	{
		if( !is_object( $object ) )
			throw new InvalidArgumentException( 'Invalid object' );

		$reflection	= new ReflectionObject( $object );												//  get Object Reflection
		if( $checkMethod && !$reflection->hasMethod( $methodName ) )								//  called Method is not existing
		{
			$message	= 'Method '.$reflection->getName().'::'.$methodName.' is not existing';		//  prepare Exception Message
			throw new BadMethodCallException( $message );											//  throw Exception
		}

		if( $reflection->hasMethod( $methodName ) )
		{
			$method		= $reflection->getMethod( $methodName );
		}
		else{
			$method		= $reflection->getMethod( '__call' );
			$parameters	= array(
				$methodName,
				$parameters
			);
		}
		if( $allowProtected && version_compare( PHP_VERSION, '5.3.2' ) >= 0 )
			$method->setAccessible( TRUE );															//  @see http://php.net/manual/de/reflectionmethod.setaccessible.php
		if( $parameters )																			//  if Method Parameters are set
			return $method->invokeArgs( $object, $parameters );										//  invoke Method with Parameters
		return $method->invoke( $object );															//  else invoke Method without Parameters
	}