Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 14075)
+++ wp-includes/taxonomy.php	(working copy)
@@ -75,17 +75,12 @@
 function get_taxonomies( $args = array(), $output = 'names' ) {
 	global $wp_taxonomies;
 
-	$taxonomies = array();
-	foreach ( (array) $wp_taxonomies as $taxname => $taxobj )
-		if ( empty($args) || array_intersect_assoc((array) $taxobj, $args) )
-			$taxonomies[$taxname] = $taxobj;
+	$field = ('names' == $output) ? 'name' : false;
 
-	if ( 'names' == $output )
-		return array_keys($taxonomies);
-
-	return $taxonomies;
+	return wp_filter_object_list($wp_taxonomies, $args, $field);
 }
 
+
 /**
  * Return all of the taxonomy names that are of $object_type.
  *
Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 14075)
+++ wp-includes/post.php	(working copy)
@@ -692,7 +692,7 @@
  * @param mixed $the_post Optional. Post object or post ID.
  * @return bool|string post type or false on failure.
  */
-function get_post_type($the_post = false) {
+function get_post_type( $the_post = false ) {
 	global $post;
 
 	if ( false === $the_post )
@@ -736,7 +736,6 @@
  * @since 2.9.0
  * @uses $wp_post_types
  * @see register_post_type
- * @see get_post_types
  *
  * @param array|string $args An array of key => value arguments to match against the post types.
  *  Only post types having attributes that match all arguments are returned.
@@ -746,26 +745,9 @@
 function get_post_types( $args = array(), $output = 'names' ) {
 	global $wp_post_types;
 
-	$do_names = false;
-	if ( 'names' == $output )
-		$do_names = true;
+	$field = ('names' == $output) ? 'name' : false;
 
-	$post_types = array();
-	foreach ( (array) $wp_post_types as $post_type ) {
-		if ( empty($args) ) {
-			if ( $do_names )
-				$post_types[] = $post_type->name;
-			else
-				$post_types[] = $post_type;
-		} elseif ( array_intersect_assoc((array) $post_type, $args) ) {
-			if ( $do_names )
-				$post_types[] = $post_type->name;
-			else
-				$post_types[] = $post_type;
-		}
-	}
-
-	return $post_types;
+	return wp_filter_object_list($wp_post_types, $args, $field);
 }
 
 /**
Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 14075)
+++ wp-includes/functions.php	(working copy)
@@ -2901,7 +2901,7 @@
  * @param array|string $list
  * @return array Sanitized array of IDs
  */
-function wp_parse_id_list($list) {
+function wp_parse_id_list( $list ) {
 	if ( !is_array($list) )
 		$list = preg_split('/[\s,]+/', $list);
 
@@ -2909,6 +2909,30 @@
 }
 
 /**
+ * Filters a list of objects, returning only those that match all arguments
+ *
+ * @since 3.0.0
+ *
+ * @param array $list An array of objects to filter
+ * @param array $args An array of key => value arguments to match against each object
+ * @param bool|string $field A field from the object to place instead of the entire object
+ * @return array A list of objects or object fields
+ */
+function wp_filter_object_list( $list, $args = array(), $field = false ) {
+	if ( !is_array($list) )
+		return array();
+
+	$count = count($args);
+
+	$filtered = array();
+	foreach ( $list as $key => $obj )
+		if ( count(array_intersect_assoc(get_object_vars($obj), $args)) == $count )
+			$filtered[$key] = $field ? $obj->$field : $obj;
+
+	return $filtered;
+}
+
+/**
  * Determines if default embed handlers should be loaded.
  *
  * Checks to make sure that the embeds library hasn't already been loaded. If
