Index: src/wp-includes/query.php
===================================================================
--- src/wp-includes/query.php	(revision 28972)
+++ src/wp-includes/query.php	(working copy)
@@ -4227,7 +4227,7 @@
 	 *
 	 * @since 3.1.0
 	 *
-	 * @param mixed $page Page ID, title, slug, or array of such.
+	 * @param mixed $page Page ID, title, slug, path, or array of such.
 	 * @return bool
 	 */
 	public function is_page( $page = '' ) {
@@ -4241,12 +4241,21 @@
 
 		$page = (array) $page;
 
-		if ( in_array( $page_obj->ID, $page ) )
+		if ( in_array( $page_obj->ID, $page ) ) {
 			return true;
-		elseif ( in_array( $page_obj->post_title, $page ) )
+		} elseif ( in_array( $page_obj->post_title, $page ) ) {
 			return true;
-		else if ( in_array( $page_obj->post_name, $page ) )
+		} else if ( in_array( $page_obj->post_name, $page ) ) {
 			return true;
+		} else {
+			foreach ( $page as $index => $pagepath ) {
+				$pagepath_page_obj = get_page_by_path( $pagepath );
+
+				if ( $pagepath_page_obj && ( $pagepath_page_obj->ID == $page_obj->ID ) ) {
+					return true;
+				}
+			}
+		}
 
 		return false;
 	}
Index: tests/phpunit/tests/query/conditionals.php
===================================================================
--- tests/phpunit/tests/query/conditionals.php	(revision 28972)
+++ tests/phpunit/tests/query/conditionals.php	(working copy)
@@ -709,6 +709,39 @@
 		$this->assertTrue( is_page( $post->post_name ) );
 	}
 
+	/**
+	 * @ticket 16802
+	 */
+	function test_is_page_with_parent() {
+		$parent_id = $this->factory->post->create( array(
+			'post_type' => 'page',
+			'post_name' => 'foo',
+		) );
+		$post_id = $this->factory->post->create( array(
+			'post_type'   => 'page',
+			'post_name'   => 'bar',
+			'post_parent' => $parent_id,
+		) );
+		$this->go_to( "/?page_id=$post_id" );
+
+		$post = get_queried_object();
+		$q = $GLOBALS['wp_query'];
+
+		$this->assertTrue( is_page() );
+		$this->assertFalse( $q->is_single );
+		$this->assertTrue( $q->is_page );
+		$this->assertFalse( $q->is_attachment );
+		$this->assertTrue( is_page( $post ) );
+		$this->assertTrue( is_page( $post->ID ) );
+		$this->assertTrue( is_page( $post->post_title ) );
+		$this->assertTrue( is_page( $post->post_name ) );
+		$this->assertTrue( is_page( 'foo/bar' ) );
+		$this->assertFalse( is_page( $parent_id ) );
+		$this->assertFalse( is_page( 'foo/bar/baz' ) );
+		$this->assertFalse( is_page( 'bar/bar' ) );
+		$this->assertFalse( is_page( 'foo' ) );
+	}
+
 	function test_is_attachment() {
 		$post_id = $this->factory->post->create( array( 'post_type' => 'attachment' ) );
 		$this->go_to( "/?attachment_id=$post_id" );
