diff --git wp-admin/includes/deprecated.php wp-admin/includes/deprecated.php
index 6a66e43..bc49030 100644
--- wp-admin/includes/deprecated.php
+++ wp-admin/includes/deprecated.php
@@ -943,7 +943,7 @@ function current_theme_info() {
 
 /**
  * This was once used to display an 'Insert into Post' button. Now it is deprecated and stubbed.
- * 
+ *
  * @deprecated 3.5.0
  */
 function _insert_into_post_button( $type ) {
@@ -952,9 +952,25 @@ function _insert_into_post_button( $type ) {
 
 /**
  * This was once used to display a media button. Now it is deprecated and stubbed.
- * 
+ *
  * @deprecated 3.5.0
  */
 function _media_button($title, $icon, $type, $id) {
 	_deprecated_function( __FUNCTION__, '3.5' );
 }
+
+/**
+ * Get an existing post and format it for editing.
+ *
+ * @since 2.0.0
+ * @deprecated 3.5.0
+ *
+ * @param int $id
+ * @return object
+ */
+function get_post_to_edit( $id ) {
+	_deprecated_function( __FUNCTION__, '3.5', 'get_post()' );
+
+	return get_post( $id, OBJECT, 'edit' );
+}
+
diff --git wp-admin/includes/post.php wp-admin/includes/post.php
index c57b72c..7ee873d 100644
--- wp-admin/includes/post.php
+++ wp-admin/includes/post.php
@@ -463,24 +463,6 @@ function get_default_page_to_edit() {
 }
 
 /**
- * Get an existing post and format it for editing.
- *
- * @since 2.0.0
- *
- * @param unknown_type $id
- * @return unknown
- */
-function get_post_to_edit( $id ) {
-
-	$post = get_post( $id, OBJECT, 'edit' );
-
-	if ( $post->post_type == 'page' )
-		$post->page_template = get_post_meta( $id, '_wp_page_template', true );
-
-	return $post;
-}
-
-/**
  * Determine if a post exists based on title, content, and date
  *
  * @since 2.0.0
@@ -927,7 +909,7 @@ function get_available_post_mime_types($type = 'attachment') {
 /**
  * Executes a query for attachments. An array of WP_Query arguments
  * can be passed in, which will override the arguments set by this function.
- * 
+ *
  * @since 2.5.0
  * @uses apply_filters() Calls 'upload_per_page' on posts_per_page argument
  *
diff --git wp-includes/deprecated.php wp-includes/deprecated.php
index def4722..3deb0e3 100644
--- wp-includes/deprecated.php
+++ wp-includes/deprecated.php
@@ -3203,4 +3203,24 @@ function sticky_class( $post_id = null ) {
  */
 function _get_post_ancestors( &$post ) {
 	_deprecated_function( __FUNCTION__, '3.5' );
-}
\ No newline at end of file
+}
+
+/**
+ * Retrieve a single post, based on post ID.
+ *
+ * Has categories in 'post_category' property or key. Has tags in 'tags_input'
+ * property or key.
+ *
+ * @since 1.0.0
+ * @deprecated 3.5.0
+ * @see get_post()
+ *
+ * @param int $postid Post ID.
+ * @param string $mode How to return result, either OBJECT, ARRAY_N, or ARRAY_A.
+ * @return object|array Post object or array holding post contents and information
+ */
+function wp_get_single_post( $postid = 0, $mode = OBJECT ) {
+	_deprecated_function( __FUNCTION__, '3.5', 'get_post()' );
+	return get_post( $postid, $mode, 'edit' );
+}
+
diff --git wp-includes/post.php wp-includes/post.php
index 7aed6b5..39b632e 100644
--- wp-includes/post.php
+++ wp-includes/post.php
@@ -402,6 +402,9 @@ function get_post( $post, $output = OBJECT, $filter = 'raw' ) {
 
 	$_post = $_post->filter( $filter );
 
+	if ( 'edit' == $filter )
+		$_post = new WP_Post_To_Edit( $_post );
+
 	if ( $output == ARRAY_A )
 		return $_post->to_array();
 	elseif ( $output == ARRAY_N )
@@ -440,7 +443,7 @@ function get_post( $post, $output = OBJECT, $filter = 'raw' ) {
  * @property $comment_count;
  * @property $ancestors;
  */
-final class WP_Post {
+class WP_Post {
 
 	public $filter;
 
@@ -511,6 +514,57 @@ final class WP_Post {
 }
 
 /**
+ * A WP_Post class, with added magic
+ */
+class WP_Post_To_Edit extends WP_Post {
+
+	public function __isset( $key ) {
+		if ( 'page_template' == $key )
+			return ( 'page' == $this->post_type );
+
+		if ( 'post_category' == $key )
+		   return true;
+
+		if ( 'tags_input' == $key )
+		   return true;
+
+		return parent::__isset( $key );
+	}
+
+	public function __get( $key ) {
+		if ( 'page_template' == $key && $this->__isset( $key ) )
+			return get_post_meta( $this->ID, '_wp_page_template', true );
+
+		if ( 'post_category' == $key ) {
+			if  ( is_object_in_taxonomy( $this->post_type, 'category' ) )
+				return wp_get_post_categories( $this->ID );
+
+			return array();
+		}
+
+		if ( 'tags_input' == $key && $this->__isset( $key ) ) {
+			if  ( is_object_in_taxonomy( $this->post_type, 'post_tag' ) )
+				return wp_get_post_tags( $this->ID, array( 'fields' => 'names' ) );
+
+			return array();
+		}
+
+		return parent::__get( $key );
+	}
+
+	public function to_array() {
+		$post = parent::to_array();
+
+		foreach ( array( 'page_template', 'post_category', 'tags_input' ) as $key ) {
+			if ( $this->__isset( $key ) )
+				$post['page_template'] = $this->__get( $key );
+		}
+
+		return $post;
+	}
+}
+
+/**
  * Retrieve ancestors of a post.
  *
  * @since 2.5.0
@@ -2489,49 +2543,6 @@ function wp_get_recent_posts( $args = array(), $output = ARRAY_A ) {
 }
 
 /**
- * Retrieve a single post, based on post ID.
- *
- * Has categories in 'post_category' property or key. Has tags in 'tags_input'
- * property or key.
- *
- * @since 1.0.0
- *
- * @param int $postid Post ID.
- * @param string $mode How to return result, either OBJECT, ARRAY_N, or ARRAY_A.
- * @return object|array Post object or array holding post contents and information
- */
-function wp_get_single_post($postid = 0, $mode = OBJECT) {
-	$postid = (int) $postid;
-
-	$post = get_post($postid, $mode);
-
-	if (
-		( OBJECT == $mode && empty( $post->ID ) ) ||
-		( OBJECT != $mode && empty( $post['ID'] ) )
-	)
-		return ( OBJECT == $mode ? null : array() );
-
-	// Set categories and tags
-	if ( $mode == OBJECT ) {
-		$post->post_category = array();
-		if ( is_object_in_taxonomy($post->post_type, 'category') )
-			$post->post_category = wp_get_post_categories($postid);
-		$post->tags_input = array();
-		if ( is_object_in_taxonomy($post->post_type, 'post_tag') )
-			$post->tags_input = wp_get_post_tags($postid, array('fields' => 'names'));
-	} else {
-		$post['post_category'] = array();
-		if ( is_object_in_taxonomy($post['post_type'], 'category') )
-			$post['post_category'] = wp_get_post_categories($postid);
-		$post['tags_input'] = array();
-		if ( is_object_in_taxonomy($post['post_type'], 'post_tag') )
-			$post['tags_input'] = wp_get_post_tags($postid, array('fields' => 'names'));
-	}
-
-	return $post;
-}
-
-/**
  * Insert a post.
  *
  * If the $postarr parameter has 'ID' set to a value, then post will be updated.
