Index: wp-includes/rewrite.php
--- wp-includes/rewrite.php
+++ wp-includes/rewrite.php
@@ -292,7 +292,7 @@
 
 	// Check to see if we are using rewrite rules
 	$rewrite = $wp_rewrite->wp_rewrite_rules();
-
+	
 	// Not using rewrite rules, and 'p=N' and 'page_id=N' methods failed, so we're out of options
 	if ( empty($rewrite) )
 		return 0;
@@ -332,6 +332,13 @@
 
 	$request = $url;
 
+	$post_type_query_vars = array();
+	foreach ( $GLOBALS['wp_post_types'] as $post_type => $t ) {
+		if ( !empty( $t->query_var ) ) {
+			$post_type_query_vars[$t->query_var] = $post_type;
+		}
+	}
+
 	// Look for matches.
 	$request_match = $request;
 	foreach ( (array)$rewrite as $match => $query) {
@@ -361,10 +368,15 @@
 			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 )
