Index: wp-admin/includes/plugin.php
===================================================================
--- wp-admin/includes/plugin.php	(wersja 30339)
+++ wp-admin/includes/plugin.php	(kopia robocza)
@@ -32,6 +32,7 @@
  * Network: Optional. Specify "Network: true" to require that a plugin is activated
  *		across all sites in an installation. This will prevent a plugin from being
  *		activated on a single site when Multisite is enabled.
+ * Upgrade: Optional. Specify "Upgrade: false" to exclude plugin from checking for updates.
  *  * / # Remove the space to close comment
  * </code>
  *
@@ -47,6 +48,7 @@
  *		'TextDomain' - Plugin's text domain for localization.
  *		'DomainPath' - Plugin's relative directory path to .mo files.
  *		'Network' - Boolean. Whether the plugin can only be activated network wide.
+ *		'Upgrade' - Boolean. Whether the plugin should be checked for updates on api.wordpress.org/plugins/update-check/
  *
  * Some users have issues with opening large files and manipulating the contents
  * for want is usually the first 1kiB or 2kiB. This function stops pulling in
@@ -81,6 +83,7 @@
 		'TextDomain' => 'Text Domain',
 		'DomainPath' => 'Domain Path',
 		'Network' => 'Network',
+		'Upgrade' => 'Upgrade',
 		// Site Wide Only is deprecated in favor of Network.
 		'_sitewide' => 'Site Wide Only',
 	);
@@ -95,6 +98,9 @@
 	$plugin_data['Network'] = ( 'true' == strtolower( $plugin_data['Network'] ) );
 	unset( $plugin_data['_sitewide'] );
 
+	// verify and set boolean value Upgrade header
+	$plugin_data['Upgrade'] = ( empty( $plugin_data['Upgrade'] ) || 'true' == strtolower( $plugin_data['Upgrade'] ) );
+
 	if ( $markup || $translate ) {
 		$plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate );
 	} else {
Index: wp-includes/class-wp-theme.php
===================================================================
--- wp-includes/class-wp-theme.php	(wersja 30339)
+++ wp-includes/class-wp-theme.php	(kopia robocza)
@@ -27,6 +27,7 @@
 		'Tags'        => 'Tags',
 		'TextDomain'  => 'Text Domain',
 		'DomainPath'  => 'Domain Path',
+		'Upgrade'     => 'Upgrade',
 	);
 
 	/**
@@ -239,6 +240,8 @@
 				if ( basename( $this->stylesheet ) != $default_theme_slug )
 					$this->headers['Name'] .= '/' . $this->stylesheet;
 			}
+			// verify and set boolean value Upgrade header
+			$this->headers['Upgrade'] = ( empty( $this->headers['Upgrade'] ) || 'true' == strtolower( $this->headers['Upgrade'] ) );
 		}
 
 		// (If template is set from cache [and there are no errors], we know it's good.)
Index: wp-includes/update.php
===================================================================
--- wp-includes/update.php	(wersja 30339)
+++ wp-includes/update.php	(kopia robocza)
@@ -223,6 +223,13 @@
 			}
 	}
 
+	// filter out plugins that not allow updating
+	foreach ( $plugins as $file => $p ) {
+		if ( ! $p['Upgrade'] ) {
+			unset( $plugins[ $file ] );
+		}
+	}
+
 	$time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
 
 	if ( $time_not_changed && ! $extra_stats ) {
@@ -355,6 +362,11 @@
 	$request['active'] = get_option( 'stylesheet' );
 
 	foreach ( $installed_themes as $theme ) {
+		// omit themes that not allow updating
+		if ( ! $theme->get('Upgrade') ) {
+			continue;
+		}
+
 		$checked[ $theme->get_stylesheet() ] = $theme->get('Version');
 
 		$themes[ $theme->get_stylesheet() ] = array(
