public function diff( $method = 'unified', $rev1, $rev2, $rev3 = null ) {
		$r1array = array(
			'action' => 'query',
			'prop'   => 'revisions',
			'revids' => $rev1,
			'rvprop' => 'content'
		);
		$r2array = array(
			'action' => 'query',
			'prop'   => 'revisions',
			'revids' => $rev2,
			'rvprop' => 'content'
		);
		$r3array = array(
			'action' => 'query',
			'prop'   => 'revisions',
			'revids' => $rev3,
			'rvprop' => 'content'
		);

		Hooks::runHook( 'PreDiff', array( &$r1array, &$r2array, &$r3array, &$method ) );

		$r1text = $r2text = $r3text = null;
		if( !is_null( $rev3 ) ) {
			pecho( "Getting $method diff of revisions $rev1, $rev2, and $rev3...\n\n", PECHO_NORMAL );
			$r3 = $this->apiQuery( $r3array );

			if( isset( $r3['query']['badrevids'] ) ) {
				pecho( "A bad third revision ID was passed.\n\n", PECHO_FATAL );
				return false;
			}

			foreach( $r3['query']['pages'] as $r3pages ){
				$r3text = $r3pages['revisions'][0]['*'];
			}
		} else {
			pecho( "Getting $method diff of revisions $rev1 and $rev2...\n\n", PECHO_NORMAL );
		}

		$r1 = $this->apiQuery( $r1array );
		$r2 = $this->apiQuery( $r2array );

		if( isset( $r1['query']['badrevids'] ) ) {
			pecho( "A bad first revision ID was passed.\n\n", PECHO_FATAL );
			return false;
		} elseif( isset( $r2['query']['badrevids'] ) ) {
			pecho( "A bad second revision ID was passed.\n\n", PECHO_FATAL );
			return false;
		} else {
			foreach( $r1['query']['pages'] as $r1pages ){
				$r1text = $r1pages['revisions'][0]['*'];
			}
			foreach( $r2['query']['pages'] as $r2pages ){
				$r2text = $r2pages['revisions'][0]['*'];
			}

			if( $method == "raw" ) return array( $r1text, $r2text, $r3text );
			return Diff::load( $method, $r1text, $r2text, $r3text );
		}
	}