Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 21501)
+++ wp-includes/taxonomy.php	(working copy)
@@ -3284,3 +3278,118 @@
 
 	return $parent;
 }
+
+/**
+ * Retrieve term meta field for a term.
+ *
+ * @since 3.5.0
+ * @link http://codex.wordpress.org/Function_Reference/get_term_meta
+ *
+ * @param int $term_id Term ID.
+ * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.
+ * @param bool $single Whether to return a single value.
+ * @return mixed Will be an array if $single is false. Will be value of meta data field if $single
+ *  is true.
+ */
+function get_term_meta( $term_id, $key = '', $single = FALSE ) {
+	return get_metadata( 'term', $term_id, $key, $single );
+}
+
+/**
+ * Update term meta field based on term ID.
+ *
+ * Use the $prev_value parameter to differentiate between meta fields with the
+ * same key and term ID.
+ *
+ * If the meta field for the term does not exist, it will be added.
+ *
+ * @since 3.5.0
+ * @uses $wpdb
+ * @link http://codex.wordpress.org/Function_Reference/update_term_meta
+ *
+ * @param int $term_id Term ID.
+ * @param string $meta_key Metadata key.
+ * @param mixed $meta_value Metadata value.
+ * @param mixed $prev_value Optional. Previous value to check before removing.
+ * @return bool False on failure, true if success.
+ */
+function update_term_meta( $term_id, $meta_key, $meta_value, $prev_value = '' ) {
+
+	return update_metadata( 'term', $term_id, $meta_key, $meta_value, $prev_value );
+}
+
+/**
+ * Delete everything from term meta matching meta key.
+ *
+ * @since 3.5.0
+ * @uses $wpdb
+ *
+ * @param string $term_meta_key Key to search for when deleting.
+ * @return bool Whether the term meta key was deleted from the database
+ */
+function delete_term_meta_by_key( $term_meta_key ) {
+	return delete_metadata( 'term', null, $term_meta_key, '', TRUE );
+}
+
+/**
+ * Retrieve term meta fields, based on term ID.
+ *
+ * The term meta fields are retrieved from the cache where possible,
+ * so the function is optimized to be called more than once.
+ *
+ * @since 3.5.0
+ * @link http://codex.wordpress.org/Function_Reference/get_term_custom
+ *
+ * @param int $term_id term ID.
+ * @return array
+ */
+function get_term_custom( $term_id = 0 ) {
+	$term_id = absint( $term_id );
+	if ( ! $term_id )
+		$term_id = get_the_ID();
+
+	return get_term_meta( $term_id );
+}
+
+/**
+ * Retrieve meta field names for a term.
+ *
+ * If there are no meta fields, then nothing (null) will be returned.
+ *
+ * @since 3.5.0
+ * @link http://codex.wordpress.org/Function_Reference/get_term_custom_keys
+ *
+ * @param int $term_id term ID
+ * @return array|null Either array of the keys, or null if keys could not be retrieved.
+ */
+function get_term_custom_keys( $term_id = 0 ) {
+	$custom = get_term_custom( $term_id );
+
+	if ( ! is_array( $custom ) )
+		return;
+
+	if ( $keys = array_keys( $custom ) )
+		return $keys;
+}
+
+/**
+ * Retrieve values for a custom term field.
+ *
+ * The parameters must not be considered optional. All of the term meta fields
+ * will be retrieved and only the meta field key values returned.
+ *
+ * @since 3.5.0
+ * @link http://codex.wordpress.org/Function_Reference/get_term_custom_values
+ *
+ * @param string $key Meta field key.
+ * @param int $term_id Term ID
+ * @return array Meta field values.
+ */
+function get_term_custom_values( $key = '', $term_id = 0 ) {
+	if ( ! $key )
+		return null;
+
+	$custom = get_term_custom( $term_id );
+
+	return isset( $custom[ $key ] ) ? $custom[ $key ] : null;
+}
\ No newline at end of file
Index: wp-includes/wp-db.php
===================================================================
--- wp-includes/wp-db.php	(revision 21501)
+++ wp-includes/wp-db.php	(working copy)
@@ -197,7 +197,7 @@
 	 * @var array
 	 */
 	var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
-		'terms', 'term_taxonomy', 'term_relationships', 'commentmeta' );
+		'terms', 'termmeta', 'term_taxonomy', 'term_relationships', 'commentmeta' );
 
 	/**
 	 * List of deprecated WordPress tables
@@ -294,6 +294,15 @@
 	 * @var string
 	 */
 	var $terms;
+	
+	/**
+	 * WordPress Term meta table
+	 *
+	 * @since 3.5.0
+	 * @access public
+	 * @var string
+	 */
+	var $termmeta;
 
 	/**
 	 * WordPress Term Relationships table
Index: wp-admin/includes/schema.php
===================================================================
--- wp-admin/includes/schema.php	(revision 21501)
+++ wp-admin/includes/schema.php	(working copy)
@@ -54,6 +54,15 @@
  UNIQUE KEY slug (slug),
  KEY name (name)
 ) $charset_collate;
+CREATE TABLE $wpdb->termmeta (
+  meta_id bigint(20) unsigned NOT NULL auto_increment,
+  term_id bigint(20) unsigned NOT NULL default '0',
+  meta_key varchar(255) default NULL,
+  meta_value longtext,
+  PRIMARY KEY  (meta_id),
+  KEY term_id (term_id),
+  KEY meta_key (meta_key)
+) $charset_collate;
 CREATE TABLE $wpdb->term_taxonomy (
  term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default 0,
