public function recentchanges( $namespace = 0, $pgTag = null, $start = null, $end = null, $user = null, $excludeuser = null, $dir = 'older', $minor = null, $bot = null, $anon = null, $redirect = null, $patrolled = null, $prop = null, $limit = 50 ) {

		if( is_array( $namespace ) ) {
			$namespace = implode( '|', $namespace );
		}

		if( is_null( $prop ) ) {
			$prop = array(
				'user', 'comment', 'flags', 'timestamp', 'title', 'ids', 'sizes', 'tags'
			);
		}

		$rcArray = array(
			'list'        => 'recentchanges',
			'_code'       => 'rc',
			'rcnamespace' => $namespace,
			'rcdir'       => $dir,
			'rcprop'      => implode( '|', $prop ),
			'_limit'      => $limit
		);

		if( !is_null( $pgTag ) ) $rcArray['rctag'] = $pgTag;
		if( !is_null( $start ) ) $rcArray['rcstart'] = $start;
		if( !is_null( $end ) ) $rcArray['rcend'] = $end;
		if( !is_null( $user ) ) $rcArray['rcuser'] = $user;
		if( !is_null( $excludeuser ) ) $rcArray['rcexcludeuser'] = $excludeuser;

		$rcshow = array();

		if( !is_null( $minor ) ) {
			if( $minor ) {
				$rcshow[] = 'minor';
			} else {
				$rcshow[] = '!minor';
			}
		}

		if( !is_null( $bot ) ) {
			if( $bot ) {
				$rcshow[] = 'bot';
			} else {
				$rcshow[] = '!bot';
			}
		}

		if( !is_null( $anon ) ) {
			if( $minor ) {
				$rcshow[] = 'anon';
			} else {
				$rcshow[] = '!anon';
			}
		}

		if( !is_null( $redirect ) ) {
			if( $redirect ) {
				$rcshow[] = 'redirect';
			} else {
				$rcshow[] = '!redirect';
			}
		}

		if( !is_null( $patrolled ) ) {
			if( $minor ) {
				$rcshow[] = 'patrolled';
			} else {
				$rcshow[] = '!patrolled';
			}
		}

		if( count( $rcshow ) ) $rcArray['rcshow'] = implode( '|', $rcshow );

		$rcArray['limit'] = $this->apiQueryLimit;

		Hooks::runHook( 'PreQueryRecentchanges', array( &$rcArray ) );

		pecho( "Getting recent changes...\n\n", PECHO_NORMAL );

		return $this->listHandler( $rcArray );

	}