diff --git src/wp-admin/admin-ajax.php src/wp-admin/admin-ajax.php
index d57d56b..3f1e3ca 100644
--- src/wp-admin/admin-ajax.php
+++ src/wp-admin/admin-ajax.php
@@ -43,7 +43,7 @@ do_action( 'admin_init' );
 
 $core_actions_get = array(
 	'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache',
-	'autocomplete-user', 'dashboard-widgets', 'logged-in',
+	'autocomplete-user', 'dashboard-widgets', 'logged-in', 'autocomplete-page',
 );
 
 $core_actions_post = array(
diff --git src/wp-admin/includes/ajax-actions.php src/wp-admin/includes/ajax-actions.php
index caf6311..18ce8f2 100644
--- src/wp-admin/includes/ajax-actions.php
+++ src/wp-admin/includes/ajax-actions.php
@@ -241,6 +241,46 @@ function wp_ajax_autocomplete_user() {
 	wp_die( json_encode( $return ) );
 }
 
+function wp_ajax_autocomplete_page() {
+	$return = array();
+
+	// Check the type of request
+	// Current allowed values are `search`
+	if ( isset( $_REQUEST['autocomplete_type'] ) && 'search' === $_REQUEST['autocomplete_type'] ) {
+		$type = $_REQUEST['autocomplete_type'];
+	} else {
+		$type = 'search';
+	}
+
+	// Check the desired field for value
+	// Current allowed values are `post_title` and `post_slug`
+	if ( isset( $_REQUEST['autocomplete_field'] ) && 'ID' === $_REQUEST['autocomplete_field'] ) {
+		$field = $_REQUEST['autocomplete_field'];
+	} else {
+		$field = 'post_title';
+	}
+
+	$pages = get_pages( array(
+		'depth' => 0, 'child_of' => 0,
+		'selected' => 0, 'echo' => 1,
+		'name' => 'page_id', 'id' => '',
+		'show_option_none' => '', 'post_status' => array('publish'),
+		'search' => '*' . $_REQUEST['term'] . '*',
+		'search_columns' => array( 'post_title' )
+	) );
+
+	foreach ($pages as $page) {
+		$return[] = array(
+			/* translators: 1: post_title */
+			'id'	=> $page->{$field},
+			'label'	=> sprintf( __('%1$s'), $page->post_title ),
+			'value'	=> sprintf( __('%1$s'), $page->post_title )
+		);
+	}
+
+	wp_die( json_encode( $return ) );
+}
+
 function wp_ajax_dashboard_widgets() {
 	require_once ABSPATH . 'wp-admin/includes/dashboard.php';
 
diff --git src/wp-admin/js/page-suggest.js src/wp-admin/js/page-suggest.js
new file mode 100644
index 0000000..b8cb1d3
--- /dev/null
+++ src/wp-admin/js/page-suggest.js
@@ -0,0 +1,32 @@
+/* global ajaxurl, isRtl */
+
+(function( $ ) {
+	$(document).ready( function() {
+		var position = { offset: '0, -1' };
+		if ( typeof isRtl !== 'undefined' && isRtl ) {
+			position.my = 'right top';
+			position.at = 'right bottom';
+		}
+		$( '.wp-suggest-page' ).each( function(){
+			var $this = $( this ),
+				autocompleteType = ( typeof $this.data( 'autocompleteType' ) !== 'undefined' ) ? $this.data( 'autocompleteType' ) : 'add',
+				autocompleteField = ( typeof $this.data( 'autocompleteField' ) !== 'undefined' ) ? $this.data( 'autocompleteField' ) : 'post_title';
+
+			$this.autocomplete({
+				source:    ajaxurl + '?action=autocomplete-page&autocomplete_type=' + autocompleteType + '&autocomplete_field=' + autocompleteField,
+				delay:     500,
+				minLength: 2,
+				position:  position,
+				select: function (event, ui) {
+					$('#parent_id').val(ui.item.id);
+				},
+				open: function() {
+					$( this ).addClass( 'open' );
+				},
+				close: function() {
+					$( this ).removeClass( 'open' );
+				}
+			});
+		});
+	});
+})( jQuery );
diff --git src/wp-includes/post-template.php src/wp-includes/post-template.php
index 64aee53..f8b8649 100644
--- src/wp-includes/post-template.php
+++ src/wp-includes/post-template.php
@@ -780,29 +780,49 @@ function wp_dropdown_pages($args = '') {
 		'selected' => 0, 'echo' => 1,
 		'name' => 'page_id', 'id' => '',
 		'show_option_none' => '', 'show_option_no_change' => '',
-		'option_none_value' => ''
+		'option_none_value' => '', 'autocomplete' => false,
 	);
 
 	$r = wp_parse_args( $args, $defaults );
 	extract( $r, EXTR_SKIP );
 
 	$pages = get_pages($r);
+
+	if ( is_admin() ) {
+		$autocomplete = apply_filters( 'admin_page_dropdown_autocomplete', count( $pages ) > 100, $pages, $args );
+	}
+
 	$output = '';
 	// Back-compat with old system where both id and name were based on $name argument
 	if ( empty($id) )
 		$id = $name;
 
 	if ( ! empty($pages) ) {
-		$output = "<select name='" . esc_attr( $name ) . "' id='" . esc_attr( $id ) . "'>\n";
-		if ( $show_option_no_change )
-			$output .= "\t<option value=\"-1\">$show_option_no_change</option>";
-		if ( $show_option_none )
-			$output .= "\t<option value=\"" . esc_attr($option_none_value) . "\">$show_option_none</option>\n";
-		$output .= walk_page_dropdown_tree($pages, $depth, $r);
-		$output .= "</select>\n";
-	}
+		if ( $autocomplete ) {
+			wp_enqueue_script( 'page-suggest' );
+
+			$display = '';
+			$parent_id = 0;
+			if ( $selected > 0) {
+				$display = get_the_title( $selected );
+			}
+
+			$output = "<input name='{$name}' type='text' size='25' class='wp-suggest-page' data-autocomplete-type='search' data-autocomplete-field='ID' title='" . esc_attr( 'Page Title' ) . "' value='" . esc_attr( $display ) . "'/>\n";
+			$output .= "<input type='hidden' name='{$name}' id='" . esc_attr( $id ) . "' value='" . esc_attr($selected) . "'/>\n";
 
-	$output = apply_filters('wp_dropdown_pages', $output);
+			$output = apply_filters('wp_autocomplete_pages', $output);
+		} else {
+			$output = "<select name='" . esc_attr( $name ) . "' id='" . esc_attr( $id ) . "'>\n";
+			if ( $show_option_no_change )
+				$output .= "\t<option value=\"-1\">$show_option_no_change</option>";
+			if ( $show_option_none )
+				$output .= "\t<option value=\"" . esc_attr($option_none_value) . "\">$show_option_none</option>\n";
+			$output .= walk_page_dropdown_tree($pages, $depth, $r);
+			$output .= "</select>\n";
+
+			$output = apply_filters('wp_dropdown_pages', $output);
+		}
+	}
 
 	if ( $echo )
 		echo $output;
diff --git src/wp-includes/post.php src/wp-includes/post.php
index 50b9c44..6db7cd6 100644
--- src/wp-includes/post.php
+++ src/wp-includes/post.php
@@ -3708,6 +3708,7 @@ function get_pages( $args = array() ) {
 		'authors' => '', 'parent' => -1, 'exclude_tree' => '',
 		'number' => '', 'offset' => 0,
 		'post_type' => 'page', 'post_status' => 'publish',
+		'search' => '', 'search_columns' => '',
 	);
 
 	$r = wp_parse_args( $args, $defaults );
@@ -3824,6 +3825,43 @@ function get_pages( $args = array() ) {
 		$where_post_type = $wpdb->prepare( "post_type = %s AND post_status IN ('$post_status')", $post_type );
 	}
 
+	if ( $search ) {
+		$leading_wild = ( ltrim($search, '*') != $search );
+		$trailing_wild = ( rtrim($search, '*') != $search );
+		if ( $leading_wild && $trailing_wild )
+			$wild = 'both';
+		elseif ( $leading_wild )
+			$wild = 'leading';
+		elseif ( $trailing_wild )
+			$wild = 'trailing';
+		else
+			$wild = false;
+		if ( $wild )
+			$search = trim($search, '*');
+
+		if ( $search_columns )
+			$search_columns = array_intersect( $search_columns, array( 'ID', 'post_title' ) );
+		if ( ! $search_columns )
+			$search_columns = array('post_title');
+
+		// Maybe a filter here?
+		// $search_columns = apply_filters( 'user_search_columns', $search_columns, $search, $this );
+
+		$search = esc_sql( $search );
+
+		$searches = array();
+		$leading_wild = ( 'leading' == $wild || 'both' == $wild ) ? '%' : '';
+		$trailing_wild = ( 'trailing' == $wild || 'both' == $wild ) ? '%' : '';
+		foreach ( $search_columns as $col ) {
+			if ( 'ID' == $col )
+				$searches[] = "$col = '$search'";
+			else
+				$searches[] = "$col LIKE '$leading_wild" . like_escape($search) . "$trailing_wild'";
+		}
+
+		$where .= ' AND (' . implode(' OR ', $searches) . ')';
+	}
+
 	$orderby_array = array();
 	$allowed_keys = array('author', 'post_author', 'date', 'post_date', 'title', 'post_title', 'name', 'post_name', 'modified',
 						  'post_modified', 'modified_gmt', 'post_modified_gmt', 'menu_order', 'parent', 'post_parent',
diff --git src/wp-includes/script-loader.php src/wp-includes/script-loader.php
index 6414760..7b1ed16 100644
--- src/wp-includes/script-loader.php
+++ src/wp-includes/script-loader.php
@@ -337,6 +337,8 @@ function wp_default_scripts( &$scripts ) {
 
 	$scripts->add( 'user-suggest', "/wp-admin/js/user-suggest$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 );
 
+	$scripts->add( 'page-suggest', "/wp-admin/js/page-suggest$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 );
+
 	$scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", array(), false, 1 );
 
 	$scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), false, 1 );
