Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 6226)
+++ wp-includes/functions.php	(working copy)
@@ -391,7 +391,99 @@
 	return true;
 }
 
+function get_general_meta( $meta_type = '', $object_id = 0, $meta_key = '') {
+	global $wpdb;
+	$object_id = (int) $object_id;
 
+	if ( !$object_id )
+		return false;
+
+	if ( !empty($meta_key) ) {
+		$meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
+		$metas = $wpdb->get_results("SELECT meta_value FROM $wpdb->meta WHERE object_id = '$object_id' AND meta_key = '$meta_key'");
+	} else {
+		$metas = $wpdb->get_results("SELECT meta_value FROM $wpdb->meta WHERE object_id = '$object_id'");
+	}
+
+	if ( empty($metas) ) {
+		if ( empty($meta_key) )
+			return array();
+		else
+			return '';
+	}
+
+	foreach ($metas as $meta) 
+		$values[] = maybe_unserialize($meta->meta_value);
+
+	if ( count($values) == 1 )
+		return $values[0];
+	else
+		return $values;
+}
+
+function update_general_meta( $meta_type = '', $object_id = 0, $meta_key = '', $meta_value = '') {
+	global $wpdb;
+	$object_id = (int) $object_id;
+
+	if ( !$object_id )
+		return false;
+
+	if ( empty( $meta_key ) )
+		return false;
+	$meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
+	if ( is_string($meta_value) )
+		$meta_value = stripslashes($meta_value);
+	$meta_value = maybe_serialize($meta_value);
+
+	$where = $wpdb->prepare("object_id = %d AND meta_key = %s ", $object_id, $meta_key);
+	$where .= ( empty($meta_type) ) ? '' : $wpdb->prepare("AND meta_type = %s ", $meta_type);
+
+	$cur = $wpdb->get_row("SELECT * FROM $wpdb->meta WHERE $where");
+	if ( !$cur ) {
+		$wpdb->db_insert($wpdb->meta, array(
+			'meta_type' => $meta_type,
+			'object_id' => $object_id, 
+			'meta_key' => $meta_key,
+			'meta_value' => $meta_value,
+		));
+	} else if ( $cur->meta_value != $meta_value ) {
+		$wpdb->query($wpdb->prepare("UPDATE $wpdb->meta SET meta_value = %s WHERE $where",$meta_value));
+	} else {
+		return false;
+	}
+	return true;
+}
+
+function delete_general_meta( $meta_type = '', $object_id = 0, $meta_key = '', $meta_value = '') {
+	global $wpdb;
+	$object_id = (int) $object_id;
+
+	if ( !$object_id )
+		return false;
+
+	if ( empty( $meta_key ) )
+		return false;
+	$meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
+
+	if ( ! empty($meta_value) ) {
+		if ( is_string($meta_value) )
+			$meta_value = stripslashes($meta_value);
+		$meta_value = maybe_serialize($meta_value);
+	}
+
+	$where = $wpdb->prepare("object_id = %d AND meta_key = %s ", $object_id, $meta_key);
+	$where .= ( empty($meta_type) ) ? '' : $wpdb->prepare("AND meta_type = %s ", $meta_type);
+	$where .= ( empty($meta_value) ) ? '' : $wpdb->prepare("AND meta_value = %s ",$meta_value);
+
+	$cur = $wpdb->get_row("SELECT * FROM $wpdb->meta WHERE $where");
+	if ( !$cur ) {
+		return false;
+	} else {
+		$wpdb->query("DELETE FROM $wpdb->meta WHERE $where");
+	}
+	return true;
+}
+
 function maybe_serialize( $data ) {
 	if ( is_string( $data ) )
 		$data = trim( $data );
Index: wp-settings.php
===================================================================
--- wp-settings.php	(revision 6226)
+++ wp-settings.php	(working copy)
@@ -135,6 +135,7 @@
 $wpdb->link2cat       = $wpdb->prefix . 'link2cat';
 $wpdb->links          = $wpdb->prefix . 'links';
 $wpdb->options        = $wpdb->prefix . 'options';
+$wpdb->meta           = $wpdb->prefix . 'meta';
 $wpdb->postmeta       = $wpdb->prefix . 'postmeta';
 $wpdb->usermeta       = $wpdb->prefix . 'usermeta';
 $wpdb->terms          = $wpdb->prefix . 'terms';
Index: wp-admin/includes/schema.php
===================================================================
--- wp-admin/includes/schema.php	(revision 6226)
+++ wp-admin/includes/schema.php	(working copy)
@@ -10,7 +10,18 @@
 		$charset_collate .= " COLLATE $wpdb->collate";
 }
 
-$wp_queries="CREATE TABLE $wpdb->terms (
+$wp_queries="CREATE TABLE $wpdb->meta (
+  meta_id bigint(20) NOT NULL auto_increment,
+  object_id bigint(20) NOT NULL default '0',
+  meta_type varchar(32) NOT NULL default '',
+  meta_key varchar(255) default NULL,
+  meta_value longtext,
+  PRIMARY KEY  (meta_id),
+  KEY object_id (object_id),
+  KEY meta_type (meta_type),
+  KEY meta_key (meta_key)
+) $charset_collate;
+CREATE TABLE $wpdb->terms (
  term_id bigint(20) NOT NULL auto_increment,
  name varchar(55) NOT NULL default '',
  slug varchar(200) NOT NULL default '',

