Index: src/wp-includes/theme.php
===================================================================
--- src/wp-includes/theme.php	(revision 37318)
+++ src/wp-includes/theme.php	(working copy)
@@ -1831,15 +1831,16 @@
  *
  * @since 3.0.0
  * @see add_theme_support()
- * @param string $feature the feature being added
- * @return bool|void Whether feature was removed.
+ * @param string $feature The feature being added.
+ * @param array $args Array of specific arguments to remove. Optional.
+ * @return bool|void Whether the feature was removed.
  */
-function remove_theme_support( $feature ) {
+function remove_theme_support( $feature, $args = array() ) {
 	// Blacklist: for internal registrations not used directly by themes.
 	if ( in_array( $feature, array( 'editor-style', 'widgets', 'menus' ) ) )
 		return false;
 
-	return _remove_theme_support( $feature );
+	return _remove_theme_support( $feature, $args );
 }
 
 /**
@@ -1852,9 +1853,11 @@
  * @global Custom_Image_Header $custom_image_header
  * @global Custom_Background   $custom_background
  *
- * @param string $feature
+ * @param string $feature The feature being added.
+ * @param array $args Array of specific arguments to remove. Optional.
+ * @return bool|void Whether the feature was removed.
  */
-function _remove_theme_support( $feature ) {
+function _remove_theme_support( $feature, $args = array() ) {
 	global $_wp_theme_features;
 
 	switch ( $feature ) {
@@ -1887,6 +1890,22 @@
 			remove_action( 'admin_menu', array( $GLOBALS['custom_background'], 'init' ) );
 			unset( $GLOBALS['custom_background'] );
 			break;
+
+		case 'post-formats':
+		case 'post-thumbnails':
+			if ( $args && is_bool( $_wp_theme_features[ $feature ] ) )
+				return false;
+
+		// This also applies to 'post-formats' and 'post-thumbnails' if they haven't returned yet.
+		case 'html5' :
+			if ( $args ) {
+				$_wp_theme_features[ $feature ][0] = array_diff( $_wp_theme_features[ $feature ][0], $args );
+
+				// Return only if there is still something in the feature array.
+				if ( ! empty( $_wp_theme_features[ $feature ][0] ) )
+					return true;
+			}
+			break;
 	}
 
 	unset( $_wp_theme_features[ $feature ] );
