diff --git wp-includes/class-wp.php wp-includes/class-wp.php
index dc77688..a254609 100644
--- wp-includes/class-wp.php
+++ wp-includes/class-wp.php
@@ -247,7 +247,7 @@ class WP {
 
 		$this->public_query_vars = apply_filters('query_vars', $this->public_query_vars);
 
-		foreach ( $GLOBALS['wp_post_types'] as $post_type => $t )
+		foreach ( get_post_types( array(), 'objects' ) as $post_type => $t )
 			if ( $t->query_var )
 				$post_type_query_vars[$t->query_var] = $post_type;
 
@@ -280,7 +280,7 @@ class WP {
 		}
 
 		// Convert urldecoded spaces back into +
-		foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t )
+		foreach ( get_taxonomies( array() , 'objects' ) as $taxonomy => $t )
 			if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) )
 				$this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] );
 
diff --git wp-includes/query.php wp-includes/query.php
index 04286aa..22ba6ab 100644
--- wp-includes/query.php
+++ wp-includes/query.php
@@ -1699,7 +1699,7 @@ class WP_Query {
 			);
 		}
 
-		foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) {
+		foreach ( get_taxonomies( array() , 'objects' ) as $taxonomy => $t ) {
 			if ( 'post_tag' == $taxonomy )
 				continue;	// Handled further down in the $q['tag'] block
 
diff --git wp-includes/rewrite.php wp-includes/rewrite.php
index e2dbc80..114471a 100644
--- wp-includes/rewrite.php
+++ wp-includes/rewrite.php
@@ -338,6 +338,12 @@ function url_to_postid($url) {
 	$url = trim($url, '/');
 
 	$request = $url;
+	$post_type_query_vars = array();
+
+	foreach ( get_post_types( array() , 'objects' ) as $post_type => $t ) {
+		if ( ! empty( $t->query_var ) )
+			$post_type_query_vars[ $t->query_var ] = $post_type;
+	}
 
 	// Look for matches.
 	$request_match = $request;
@@ -365,16 +371,21 @@ function url_to_postid($url) {
 
 			// Filter out non-public query vars
 			global $wp;
-			parse_str($query, $query_vars);
+			parse_str( $query, $query_vars );
 			$query = array();
 			foreach ( (array) $query_vars as $key => $value ) {
-				if ( in_array($key, $wp->public_query_vars) )
+				if ( in_array( $key, $wp->public_query_vars ) ){
 					$query[$key] = $value;
+					if ( isset( $post_type_query_vars[$key] ) ) {
+						$query['post_type'] = $post_type_query_vars[$key];
+						$query['name'] = $value;
+					}
+				}
 			}
 
 			// Do the query
-			$query = new WP_Query($query);
-			if ( !empty($query->posts) && $query->is_singular )
+			$query = new WP_Query( $query );
+			if ( ! empty( $query->posts ) && $query->is_singular )
 				return $query->post->ID;
 			else
 				return 0;
