Index: wp-includes/query.php
===================================================================
--- wp-includes/query.php	(revision 13254)
+++ wp-includes/query.php	(working copy)
@@ -2304,7 +2304,7 @@
 
 		// Turn each row into a classed object, e.g. wp_post, wp_comment.
 		if ( is_array($this->posts) )
-			$this->posts = array_map(array('wp_row', 'get'), $this->posts);
+			$this->posts = array_map(array('WP_Object_Factory', 'create'), $this->posts);
 
 		if ( !empty($this->posts) && $this->is_comment_feed && $this->is_singular ) {
 			$cjoin = apply_filters('comment_feed_join', '');
Index: wp-includes/classes.php
===================================================================
--- wp-includes/classes.php	(revision 13254)
+++ wp-includes/classes.php	(working copy)
@@ -707,6 +707,139 @@
 	}
 }
 
+class WP_Object_Factory {
+	/* static */ function create($object = null) {
+		if ( is_a($object, 'WP_Object') )
+			return $object;
+
+		if ( is_array($object) )
+			$object = (object) $object;
+
+		if ( 
+			isset($object->post_type) && 
+			class_exists('WP_' . $object->post_type) 
+		) {
+			$object_type = 'WP_' . $object->post_type;
+		} elseif ( 
+			isset($object->comment_type) &&
+			class_exists('WP_' . $object->comment_type)
+		) {
+			$object_type = 'WP_' . $object->comment_type;
+		} else {
+			$object_type = false;
+		}
+
+		$object_type = apply_filters('wp_object_class', $object_type, $object);
+
+		if ( false != $object_type ) {
+
+			$_object = new $object_type($object);
+			
+			if ( is_subclass_of( $_object, 'WP_Object' ) ) {
+				return $_object;
+			}
+
+		}
+
+		return $object;
+	}
+}
+
+/* abstract */ class WP_Object {
+	var $_id;
+	var $_title;
+	var $_content;
+	var $_object_type;
+
+	function WP_Object($object = null) {
+		return $this->__construct($object);
+	}
+
+	function __construct($object = null) {
+		foreach( (array) $object as $n => $v ) 
+			$this->$n = $v;
+		
+		$mapped_properties = array(
+			'comment_content' => 'content',
+			'comment_date' => 'date',
+			'comment_date_gmt' => 'date_gmt',
+			'comment_ID' => 'id',
+			'ID' => 'id',
+			'post_content' => 'content',
+			'post_date' => 'date',
+			'post_date_gmt' => 'date_gmt',
+			'post_title' => 'title',
+		);
+
+		$mapped_properties = apply_filters('wp_object_mapped_properties', $mapped_properties, $this->_object_type, $object);
+
+			foreach( $mapped_properties as $db_prop => $obj_prop ) {
+				if ( isset( $object->$db_prop ) ) {
+					$this->set_property($obj_prop, $object->$db_prop);
+				}
+			}
+
+	}
+
+	function get_id() {
+		return (int) $this->_id;	
+	}
+
+	function get_title() {
+		return $this->_title;
+	}
+
+	function get_content() {
+		return $this->_content;
+	}
+
+	function get_object_type() {
+		return $this->_object_type;
+	}
+
+	function set_property($name = '', $value = null) {
+		$property_name = '_' . preg_replace('/[^a-z0-9_]/', '', strtolower($name));
+		$this->$property_name = $value;
+	}
+}
+
+class WP_Page extends WP_Post {
+	var $_object_type = 'page';	
+}
+
+class WP_Post extends WP_Object {
+	var $_object_type = 'post';	
+
+	function WP_Post($object = null) {
+		return $this->__construct($object);
+	}
+
+	function __construct($object = null) {
+		if ( is_numeric($object) ) {
+			$object = get_post($object);
+		}
+
+		return parent::__construct($object);
+	}
+}
+
+class WP_Comment extends WP_Object {
+	var $_object_type = 'comment';
+
+	function WP_Comment($object = null) {
+		return $this->__construct($object);
+	}
+
+	function __construct($object = null) {
+		if ( is_numeric($object) ) {
+			$object = get_comment($object);
+		}
+
+		return parent::__construct($object);
+	}
+}
+
+
 /**
  * Check whether variable is a WordPress Error.
  *
@@ -1696,102 +1829,4 @@
 
 }
 
-// A factory and constructor that upgrades stdClass "rows" to WordPress classes.
-class wp_row {
-	// Factory. Call statically to upgrade a stdClass object to its specialized class: $o = wp_row::get($row).
-	function get($row) {
-		if ( is_a($row, 'wp_row') || is_subclass_of($row, 'wp_row') )
-			return $row;
-
-		if ( is_array($row) )
-			$row = (object) $row;
-
-		$class = 'wp_row';
-		if ( isset($row->post_type) ) {
-			if ( class_exists("wp_" . $row->post_type) )
-				$class = "wp_" . $row->post_type;
-			else
-				$class = "wp_post";
-		} elseif ( isset($row->comment_type) ) {
-			if ( class_exists("wp_" . $row->comment_type) )
-				$class = "wp_" . $row->comment_type;
-			else
-				$class = "wp_comment";
-		}
-
-		if ( function_exists("apply_filters") ) {
-			$filtered_class = apply_filters("wp_row_class", $class, $row);
-			if ( class_exists($filtered_class) )
-				$class = $filtered_class;
-		}
-
-		return call_user_func(array($class, 'get'), $row);
-	}
-
-	function wp_row(&$row) {
-		return $this->__construct($row);
-	}
-
-	function __construct($row) {
-		if ( is_array($row) )
-			$row = (object) $row;
-
-		foreach ( (array) $row as $k => $v )
-			$this->$k = $row->$k;
-	}
-}
-
-class wp_post extends wp_row {
-	// Factory
-	function get($post) {
-		if ( $post = get_post($post) )
-			return new wp_post($post);
-		else
-			return new WP_Error(404, "Post not found.");
-	}
-
-	function id() { return $this->ID; }
-	function post_id() { return $this->ID; }
-	function type_id() { return 'post-' . $this->ID; }
-	function classes($class='') { return join( ' ', get_post_class( $class, $this->id() ) ); }
-
-	function permalink() { return get_permalink($this); }
-	function title() { return get_the_title($this); }
-	function date($format='') { return; }
-	function time($format='') { return get_the_time($format, $this); }
-	function author() { $authordata = get_userdata($this->post_author); return $authordata->display_name; }
-	function content() { return get_content($this); }
-}
-
-class wp_comment extends wp_row {
-	// Factory
-	function get($comment) {
-		if ( $comment = get_comment($comment) )
-			return new wp_comment($comment);
-		else
-			return new WP_Error(404, "Comment not found.");
-	}
-
-	function id() { return $this->comment_ID; }
-	function post_id() { return $this->comment_post_ID; }
-	function type_id() { return 'comment-' . $this->comment_ID; }
-	function classes($class='') { return join( ' ', get_comment_class( $class, $this->id() ) ); }
-
-	function permalink() { return get_comment_link($this); }
-	function title() { return sprintf(__("Comment on %s"), get_the_title($this->post_id())); }
-	function time($format='') { return mysql2date($format?$format:get_option('time_format'), $this->comment_date); }
-	function date($format='') { return date($format?$format:get_option('date_format'), $this->time('U')); }
-	function author() { return $this->comment_author; }
-	function excerpt() { return $this->comment_content; }
-	function content() { return get_comment_content($this); }
-}
-
-function is_post($object) {
-	return is_a('wp_post', $object);
-}
-
-function is_comment($object) {
-	return is_a('wp_comment', $object);
-}
-
 ?>
