Index: src/wp-includes/functions.php
===================================================================
--- src/wp-includes/functions.php	(revision 48816)
+++ src/wp-includes/functions.php	(working copy)
@@ -742,7 +742,10 @@
 function xmlrpc_getposttitle( $content ) {
 	global $post_default_title;
 	if ( preg_match( '/<title>(.+?)<\/title>/is', $content, $matchtitle ) ) {
-		$post_title = $matchtitle[1];
+		$post_title = trim( $matchtitle[1] );
+		if( empty( $post_title ) ) {
+			$post_title = $post_default_title;
+		}
 	} else {
 		$post_title = $post_default_title;
 	}
@@ -767,7 +770,13 @@
 	global $post_default_category;
 	if ( preg_match( '/<category>(.+?)<\/category>/is', $content, $matchcat ) ) {
 		$post_category = trim( $matchcat[1], ',' );
-		$post_category = explode( ',', $post_category );
+		$post_category = array_unique( array_map('trim', explode( ',', $post_category ) ) );
+		if ( count($post_category) === 1 ){
+			$post_category = $post_category[0];
+		}
+		if( empty( $post_category ) ) {
+			$post_category = $post_default_category;
+		}
 	} else {
 		$post_category = $post_default_category;
 	}
@@ -5391,7 +5400,7 @@
 
 	if ( ! is_null( $force ) ) {
 		$old_forced = $forced;
-		$forced     = $force;
+		$forced     = ( $force === true || trim( $force ) === 'true' ) ? true : false;
 		return $old_forced;
 	}
 
Index: tests/phpunit/tests/functions/xmlrpc-getpostcatergory.php
===================================================================
--- tests/phpunit/tests/functions/xmlrpc-getpostcatergory.php	(nonexistent)
+++ tests/phpunit/tests/functions/xmlrpc-getpostcatergory.php	(working copy)
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @group functions.php
+ * @group xmlrpc
+ *
+ * Class Tests_Xmlrpc_Getpostcategory
+ * test the xmlrpc_getpostcategory function
+ */
+class Tests_Xmlrpc_GetPostCategory extends WP_UnitTestCase
+{
+
+	/**
+	 * setup
+	 * declare the default category needed in function
+	 */
+	function setup(){
+		global $post_default_category;
+		$post_default_category = 'post_default_category';
+	}
+
+	/**
+	 * remove global
+	 */
+	function tearDown(){
+		global $post_default_category;
+		$post_default_category = null;
+	}
+
+	/**
+	 * @dataProvider xmlrpc_getpostcategory_data
+	 *
+	 * @covers ::xmlrpc_getpostcategory
+	 */
+	function test_xmlrpc_getpostcategory( $expected, $value,  $text){
+
+		$this->assertEquals($expected, xmlrpc_getpostcategory($value), $text);
+	}
+
+
+	function xmlrpc_getpostcategory_data(){
+		$post_default_category = 'post_default_category';
+		return array(
+			array('good_category', '<category>good_category</category>', 'single category'),
+			array(array('good_category1', 'good_category2', 'good_category3'), '<category>good_category1, good_category2, good_category3</category>', 'multiple categories'),
+			array(array(0 => 'good_category1', 2 => 'good_category3'), '<category>good_category1, good_category1, good_category3,</category>', 'duplicate categories'),
+			array('good_category', '<post><category>good_category</category><cat>fsdfsfsf</cat></post>', 'category in post tag'),
+			array('<category>category', '<category> <category>category</category> </category>', 'nested categories terms'),
+			array('<span>category</span>', '<category> <span>category</span> </category>', 'category nested span tags'),
+			array('category1', '<category>category1</category><category>category2</category>', 'find just the first category'),
+			array('<![CDATA["category"]]>', '<category><![CDATA["category"]]></category>', 'CDATA'),
+			array('<![CDATA["<category>category', '<category><![CDATA["<category>category</category>"]]></category>', 'cdata with tag category'),
+
+			array($post_default_category, null, 'null'),
+			array($post_default_category, '<category>good_category<category>ssssss', 'missing close tag'),
+			array($post_default_category, '<category></category>', 'no category in tag'),
+			array($post_default_category, '<category> </category>', 'space in tag'),
+			array($post_default_category, '<category <span>category</span> </category>', 'bad opening tag'),
+			array($post_default_category, '<category>category</category dddddd>', 'bad closing tag'),
+			array($post_default_category, '<category id="id">category</category>', 'dosen\'t find category if attribute set'),
+
+
+			array( 'good_category', $this->_xml_rpc_request_fixture('<title>good_title</title>', '<category>good_category</category>' ), 'single title in XML'),
+		);
+	}
+	private function _xml_rpc_request_fixture( $title = '', $category = '' )
+	{
+		$XML_RPC = "
+				<?xml version=\"1.0\"?>
+					<methodResponse>
+					  <params>
+						<param>
+						  $title
+						  $category
+						</param>
+					  </params>
+					</methodResponse>
+ 		";
+
+		return $XML_RPC;
+	}
+}
Index: tests/phpunit/tests/functions/xmlrpc-getposttitle.php
===================================================================
--- tests/phpunit/tests/functions/xmlrpc-getposttitle.php	(nonexistent)
+++ tests/phpunit/tests/functions/xmlrpc-getposttitle.php	(working copy)
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * @group functions.php
+ * @group xmlrpc
+ *
+ * Class Tests_Xmlrpc_Getposttitle
+ * test the xmlrpc_getposttitle function
+ */
+class Tests_Xmlrpc_Getposttitle extends WP_UnitTestCase
+{
+
+	/**
+	 * setup
+	 * declare the default title needed in function
+	 */
+	function setup()
+	{
+		global $post_default_title;
+		$post_default_title = 'post_default_title';
+	}
+
+	/**
+	 * remove global
+	 */
+	function tearDown()
+	{
+		global $post_default_title;
+		$post_default_title = null;
+	}
+
+	/**
+	 * @dataProvider xmlrpc_getposttitle_data
+	 *
+	 * @covers ::xmlrpc_getposttitle
+	 */
+	function test_xmlrpc_getposttitle( $expected, $value, $text)
+	{
+		$this->assertEquals($expected, xmlrpc_getposttitle( $value), $text);
+	}
+
+
+	function xmlrpc_getposttitle_data(){
+		$post_default_title = 'post_default_title';
+		return array(
+			array( 'good_title', '<title>good_title</title>', 'single title'),
+			array( 'good_title', '<post><title>good_title</title><cat>fsdfsfsf</cat></post>', 'good title in lot of content'),
+			array( '<title>title', '<title> <title>title</title> </title>', 'nested title'),
+			array( '<span>title</span>', '<title> <span>title</span> </title>', 'title with spans'),
+			array( '<![CDATA["title"]]>', '<title><![CDATA["title"]]></title>', 'pass cdata'),
+			array( '<![CDATA["<title>title', '<title><![CDATA["<title>title</title>"]]></title>', 'cdata with tag title'),
+
+			array($post_default_title, null, 'null'),
+			array($post_default_title, '<title>good_title<title>ssssss', 'missing close'),
+			array($post_default_title, '<title></title>', 'title has no content'),
+			array($post_default_title, '<title> </title>', 'title is just space'),
+			array($post_default_title, '<title <span>title</span> </title>', 'bad opening tag'),
+			array($post_default_title, '<title>title</title dddddd>', ' bad closing tag'),
+
+			array( 'good_title', $this->_xml_rpc_request_fixture('<title>good_title</title>', '<category>good_category</category>' ), 'single title in XML'),
+		);
+	}
+
+	private function _xml_rpc_request_fixture( $title = '', $category = '' )
+	{
+		$XML_RPC = "
+				<?xml version=\"1.0\"?>
+					<methodResponse>
+					  <params>
+						<param>
+						  $title
+						  $category
+						</param>
+					  </params>
+					</methodResponse>
+ 		";
+
+		return $XML_RPC;
+	}
+}
Index: tests/phpunit/tests/functions/xmlrpc-removepostdata.php
===================================================================
--- tests/phpunit/tests/functions/xmlrpc-removepostdata.php	(nonexistent)
+++ tests/phpunit/tests/functions/xmlrpc-removepostdata.php	(working copy)
@@ -0,0 +1,64 @@
+<?php
+/**
+ * @group functions.php
+ * @group xmlrpc
+ *
+ * Class Tests_Xmlrpc_Removepostdata
+ * test the xmlrpc_removepostdata function
+ */
+
+
+class Tests_Xmlrpc_Removepostdata extends WP_UnitTestCase{
+
+	/**
+	 * @dataProvider xmlrpc_getposttitle_data
+	 *
+	 * @covers ::xmlrpc_getposttitle
+	 */
+	function test_xmlrpc_getposttitle($expected, $value, $text)
+	{
+		foreach ($expected as $regx ){
+
+			$this->assertEquals(0, preg_match( $regx, xmlrpc_removepostdata($value), $matchcat), $text .'shouldn\'t exists after the xmlrpc_removepostdata call');
+		}
+
+	}
+
+
+	function xmlrpc_getposttitle_data()
+	{
+		$post_default_title = 'post_default_title';
+		return array(
+			array( array('/<title>(.+?)<\/title>/is'), $this->_xml_rpc_request_fixture('<title>good_title</title>' ), 'single title'),
+//			array('good_title', '<post><title>good_title</title><cat>fsdfsfsf</cat></post>', 'good title in lot of content'),
+//			array('<title>title', '<title> <title>title</title> </title>', 'nested title'),
+//			array('<span>title</span>', '<title> <span>title</span> </title>', 'title with spans'),
+//			array('<![CDATA["title"]]>', '<title><![CDATA["title"]]></title>', 'pass cdata'),
+//			array('<![CDATA["<title>title', '<title><![CDATA["<title>title</title>"]]></title>', 'cdata with tag title'),
+
+			array( array('/<category>(.+?)<\/category>/is'),  $this->_xml_rpc_request_fixture('', '<category>good_category</category>'), 'single category' ),
+			array( array('/<category>(.+?)<\/category>/is'),  $this->_xml_rpc_request_fixture('', '<category>good_category1, good_category2, good_category3</category>' ), 'multiple categories'),
+
+			array( array('/<category>(.+?)<\/category>/is','/<title>(.+?)<\/title>/is'),  $this->_xml_rpc_request_fixture('<title>good_title</title>','<category>good_category</category>'), 'single category' ),
+			array( array('/<category>(.+?)<\/category>/is', '/<title>(.+?)<\/title>/is'),  $this->_xml_rpc_request_fixture('<title>good_title</title>','<category>good_category1, good_category2, good_category3</category>' ), 'multiple categories'),
+
+		);
+	}
+
+	private function _xml_rpc_request_fixture( $title = '', $category = '' )
+	{
+		$XML_RPC = "
+				<?xml version=\"1.0\"?>
+					<methodResponse>
+					  <params>
+						<param>
+						  $title
+						  $category
+						</param>
+					  </params>
+					</methodResponse>
+ 		";
+
+		return $XML_RPC;
+	}
+}
