diff --git a/.gitignore b/.gitignore
index e949d8c80b82..2bf954a0e72e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,18 @@
-*~
-/.project
-/.settings
-/.buildpath
+# IDE & System Related Files #
+.buildpath
+.project
+.settings
+.DS_Store
+.idea
+
+# Local System Files (i.e. cache, logs, etc.) #
+/administrator/cache
+/cache
+/logs
+/tmp
 /configuration.php
+/.htaccess
+/web.config
+
+# Test Related Files #
+/phpunit.xml
diff --git a/administrator/components/com_admin/views/help/tmpl/default.php b/administrator/components/com_admin/views/help/tmpl/default.php
index a710296e2e21..f510c0230161 100644
--- a/administrator/components/com_admin/views/help/tmpl/default.php
+++ b/administrator/components/com_admin/views/help/tmpl/default.php
@@ -39,7 +39,7 @@
 			</div>
 		</div>
 		<div class="span9">
-			<iframe name="helpFrame" height="70%" src="<?php echo $this->page;?>" class="helpFrame table table-bordered"></iframe>
+			<iframe name="helpFrame" height="2100px" src="<?php echo $this->page;?>" class="helpFrame table table-bordered"></iframe>
 		</div>
 	</div>
 	<input class="textarea" type="hidden" name="option" value="com_admin" />
diff --git a/administrator/components/com_contact/config.xml b/administrator/components/com_contact/config.xml
index 03e85c9f764a..d38e8650ff87 100644
--- a/administrator/components/com_contact/config.xml
+++ b/administrator/components/com_contact/config.xml
@@ -499,27 +499,39 @@
 		label="JGLOBAL_LIST_LAYOUT_OPTIONS"
 		description="COM_CONTACT_FIELD_CONFIG_TABLE_OF_CONTACTS_DESC"
 	>
-		<field name="show_pagination_limit" type="radio"
-				default="1"
-				class="btn-group"
-				description="JGLOBAL_DISPLAY_SELECT_DESC"
-				label="JGLOBAL_DISPLAY_SELECT_LABEL"
+		<field
+			name="filter_field"
+			type="radio"
+			class="btn-group"
+			default="1"
+			description="JGLOBAL_FILTER_FIELD_DESC"
+			label="JGLOBAL_FILTER_FIELD_LABEL"
 			>
-
-				<option value="0">JHIDE</option>
+				<option value="hide">JHIDE</option>
 				<option value="1">JSHOW</option>
-			</field>
+		</field>
 
-			<field name="show_headings" type="radio"
-				default="1"
-				class="btn-group"
-				description="JGLOBAL_SHOW_HEADINGS_DESC"
-				label="JGLOBAL_SHOW_HEADINGS_LABEL"
-			>
+		<field name="show_pagination_limit" type="radio"
+			default="1"
+			class="btn-group"
+			description="JGLOBAL_DISPLAY_SELECT_DESC"
+			label="JGLOBAL_DISPLAY_SELECT_LABEL"
+		>
 
-				<option value="0">JHIDE</option>
-				<option value="1">JSHOW</option>
-			</field>
+			<option value="0">JHIDE</option>
+			<option value="1">JSHOW</option>
+		</field>
+
+		<field name="show_headings" type="radio"
+			default="1"
+			class="btn-group"
+			description="JGLOBAL_SHOW_HEADINGS_DESC"
+			label="JGLOBAL_SHOW_HEADINGS_LABEL"
+		>
+
+			<option value="0">JHIDE</option>
+			<option value="1">JSHOW</option>
+		</field>
 
 		<field name="show_position_headings" type="radio"
 			default="1"
diff --git a/administrator/components/com_content/views/articles/tmpl/modal.php b/administrator/components/com_content/views/articles/tmpl/modal.php
index 11675f631e17..9414a3d551bc 100644
--- a/administrator/components/com_content/views/articles/tmpl/modal.php
+++ b/administrator/components/com_content/views/articles/tmpl/modal.php
@@ -32,19 +32,23 @@
 				<label for="filter_search">
 					<?php echo JText::_('JSEARCH_FILTER_LABEL'); ?>
 				</label>
+			</div>
+			<div class="btn-group pull-left">
 				<input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" size="30" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" />
 			</div>
 			<div class="btn-group pull-left">
 				<button type="submit" class="btn hasTooltip" data-placement="bottom" title="<?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?>">
-					<i class="icon-search"></i></button>
+					<span class="icon-search"></span><?php echo '&#160;' . JText::_('JSEARCH_FILTER_SUBMIT'); ?></button>
 				<button type="button" class="btn hasTooltip" data-placement="bottom" title="<?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?>" onclick="document.id('filter_search').value='';this.form.submit();">
-					<i class="icon-remove"></i></button>
+					<span class="icon-remove"></span><?php echo '&#160;' . JText::_('JSEARCH_FILTER_CLEAR'); ?></button>
 			</div>
-			<input onclick="if (window.parent) window.parent.<?php echo $this->escape($function);?>('0', '<?php echo $this->escape(addslashes(JText::_('COM_CONTENT_SELECT_AN_ARTICLE'))); ?>', null, null);" class="btn" type="button" value="<?php echo JText::_('COM_CONTENT_NONE'); ?>" />
+			<?php if ($app->isAdmin()) : ?>
+				<input onclick="if (window.parent) window.parent.<?php echo $this->escape($function);?>('0', '<?php echo $this->escape(addslashes(JText::_('COM_CONTENT_SELECT_AN_ARTICLE'))); ?>', null, null);" class="btn" type="button" value="<?php echo JText::_('COM_CONTENT_NONE'); ?>" />
+			<?php endif; ?>
 			<div class="clearfix"></div>
 		</div>
 		<hr class="hr-condensed" />
-		<div class="filters">
+		<div class="filters pull-left">
 			<select name="filter_access" class="input-medium" onchange="this.form.submit()">
 				<option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS');?></option>
 				<?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access'));?>
diff --git a/administrator/components/com_finder/config.xml b/administrator/components/com_finder/config.xml
index 478bd10abd82..1508d2af03de 100644
--- a/administrator/components/com_finder/config.xml
+++ b/administrator/components/com_finder/config.xml
@@ -225,6 +225,7 @@
 			label="COM_FINDER_CONFIG_STEMMER_LABEL"
 			description="COM_FINDER_CONFIG_STEMMER_DESCRIPTION" >
 			<option value="porter_en">COM_FINDER_CONFIG_STEMMER_PORTER_EN</option>
+			<option value="fr">COM_FINDER_CONFIG_STEMMER_FR</option>
 			<option value="snowball">COM_FINDER_CONFIG_STEMMER_SNOWBALL</option>
 		</field>
 		<field
diff --git a/administrator/components/com_finder/helpers/indexer/helper.php b/administrator/components/com_finder/helpers/indexer/helper.php
index 84c088b0b77b..2dc933c51ee8 100644
--- a/administrator/components/com_finder/helpers/indexer/helper.php
+++ b/administrator/components/com_finder/helpers/indexer/helper.php
@@ -79,8 +79,8 @@ public static function tokenize($input, $lang, $phrase = false)
 		 * Parsing the string input into terms is a multi-step process.
 		 *
 		 * Regexes:
-		 *	1. Remove everything except letters, numbers, quotes, apostrophe, plus, dash, period, and comma.
-		 *	2. Remove plus, dash, period, and comma characters located before letter characters.
+		 *  1. Remove everything except letters, numbers, quotes, apostrophe, plus, dash, period, and comma.
+		 *  2. Remove plus, dash, period, and comma characters located before letter characters.
 		 *  3. Remove plus, dash, period, and comma characters located after other characters.
 		 *  4. Remove plus, period, and comma characters enclosed in alphabetical characters. Ungreedy.
 		 *  5. Remove orphaned apostrophe, plus, dash, period, and comma characters.
@@ -348,7 +348,7 @@ public static function getDefaultLanguage()
 	{
 		static $lang;
 
-		// Get the default language.
+		// We need to go to com_languages to get the site default language, it's the best we can guess.
 		if (empty($lang))
 		{
 			$lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB');
diff --git a/administrator/components/com_finder/helpers/indexer/indexer.php b/administrator/components/com_finder/helpers/indexer/indexer.php
index 0a89e0e4e11f..50cd34440085 100644
--- a/administrator/components/com_finder/helpers/indexer/indexer.php
+++ b/administrator/components/com_finder/helpers/indexer/indexer.php
@@ -315,137 +315,140 @@ protected function tokenizeToDB($input, $context, $lang, $format)
 		$count = 0;
 		$buffer = null;
 
-		// If the input is a resource, batch the process out.
-		if (is_resource($input))
+		if (!empty($input))
 		{
-			// Batch the process out to avoid memory limits.
-			while (!feof($input))
+			// If the input is a resource, batch the process out.
+			if (is_resource($input))
 			{
-				// Read into the buffer.
-				$buffer .= fread($input, 2048);
-
-				// If we haven't reached the end of the file, seek to the last
-				// space character and drop whatever is after that to make sure
-				// we didn't truncate a term while reading the input.
-				if (!feof($input))
+				// Batch the process out to avoid memory limits.
+				while (!feof($input))
 				{
-					// Find the last space character.
-					$ls = strrpos($buffer, ' ');
+					// Read into the buffer.
+					$buffer .= fread($input, 2048);
 
-					// Adjust string based on the last space character.
-					if ($ls)
+					// If we haven't reached the end of the file, seek to the last
+					// space character and drop whatever is after that to make sure
+					// we didn't truncate a term while reading the input.
+					if (!feof($input))
 					{
-						// Truncate the string to the last space character.
-						$string = substr($buffer, 0, $ls);
-
-						// Adjust the buffer based on the last space for the
-						// next iteration and trim.
-						$buffer = JString::trim(substr($buffer, $ls));
+						// Find the last space character.
+						$ls = strrpos($buffer, ' ');
+
+						// Adjust string based on the last space character.
+						if ($ls)
+						{
+							// Truncate the string to the last space character.
+							$string = substr($buffer, 0, $ls);
+
+							// Adjust the buffer based on the last space for the
+							// next iteration and trim.
+							$buffer = JString::trim(substr($buffer, $ls));
+						}
+						// No space character was found.
+						else
+						{
+							$string = $buffer;
+						}
 					}
-					// No space character was found.
+					// We've reached the end of the file, so parse whatever remains.
 					else
 					{
 						$string = $buffer;
 					}
-				}
-				// We've reached the end of the file, so parse whatever remains.
-				else
-				{
-					$string = $buffer;
-				}
 
-				// Parse the input.
-				$string = FinderIndexerHelper::parse($string, $format);
+					// Parse the input.
+					$string = FinderIndexerHelper::parse($string, $format);
 
-				// Check the input.
-				if (empty($string))
-				{
-					continue;
-				}
+					// Check the input.
+					if (empty($string))
+					{
+						continue;
+					}
 
-				// Tokenize the input.
-				$tokens = FinderIndexerHelper::tokenize($string, $lang);
+					// Tokenize the input.
+					$tokens = FinderIndexerHelper::tokenize($string, $lang);
 
-				// Add the tokens to the database.
-				$count += $this->addTokensToDB($tokens, $context);
+					// Add the tokens to the database.
+					$count += $this->addTokensToDB($tokens, $context);
 
-				// Check if we're approaching the memory limit of the token table.
-				if ($count > self::$state->options->get('memory_table_limit', 30000))
-				{
-					self::toggleTables(false);
-				}
+					// Check if we're approaching the memory limit of the token table.
+					if ($count > self::$state->options->get('memory_table_limit', 30000))
+					{
+						self::toggleTables(false);
+					}
 
-				unset($string);
-				unset($tokens);
+					unset($string);
+					unset($tokens);
+				}
 			}
-		}
-		// If the input is greater than 2K in size, it is more efficient to
-		// batch out the operation into smaller chunks of work.
-		elseif (strlen($input) > 2048)
-		{
-			$start = 0;
-			$end = strlen($input);
-			$chunk = 2048;
-
-			// As it turns out, the complex regular expressions we use for
-			// sanitizing input are not very efficient when given large
-			// strings. It is much faster to process lots of short strings.
-			while ($start < $end)
+			// If the input is greater than 2K in size, it is more efficient to
+			// batch out the operation into smaller chunks of work.
+			elseif (strlen($input) > 2048)
 			{
-				// Setup the string.
-				$string = substr($input, $start, $chunk);
+				$start = 0;
+				$end = strlen($input);
+				$chunk = 2048;
+
+				// As it turns out, the complex regular expressions we use for
+				// sanitizing input are not very efficient when given large
+				// strings. It is much faster to process lots of short strings.
+				while ($start < $end)
+				{
+					// Setup the string.
+					$string = substr($input, $start, $chunk);
 
-				// Find the last space character if we aren't at the end.
-				$ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false);
+					// Find the last space character if we aren't at the end.
+					$ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false);
 
-				// Truncate to the last space character.
-				if ($ls !== false)
-				{
-					$string = substr($string, 0, $ls);
-				}
+					// Truncate to the last space character.
+					if ($ls !== false)
+					{
+						$string = substr($string, 0, $ls);
+					}
+
+					// Adjust the start position for the next iteration.
+					$start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk);
+
+					// Parse the input.
+					$string = FinderIndexerHelper::parse($string, $format);
+
+					// Check the input.
+					if (empty($string))
+					{
+						continue;
+					}
 
-				// Adjust the start position for the next iteration.
-				$start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk);
+					// Tokenize the input.
+					$tokens = FinderIndexerHelper::tokenize($string, $lang);
 
+					// Add the tokens to the database.
+					$count += $this->addTokensToDB($tokens, $context);
+
+					// Check if we're approaching the memory limit of the token table.
+					if ($count > self::$state->options->get('memory_table_limit', 30000))
+					{
+						self::toggleTables(false);
+					}
+				}
+			}
+			else
+			{
 				// Parse the input.
-				$string = FinderIndexerHelper::parse($string, $format);
+				$input = FinderIndexerHelper::parse($input, $format);
 
 				// Check the input.
-				if (empty($string))
+				if (empty($input))
 				{
-					continue;
+					return $count;
 				}
 
 				// Tokenize the input.
-				$tokens = FinderIndexerHelper::tokenize($string, $lang);
+				$tokens = FinderIndexerHelper::tokenize($input, $lang);
 
 				// Add the tokens to the database.
-				$count += $this->addTokensToDB($tokens, $context);
-
-				// Check if we're approaching the memory limit of the token table.
-				if ($count > self::$state->options->get('memory_table_limit', 30000))
-				{
-					self::toggleTables(false);
-				}
+				$count = $this->addTokensToDB($tokens, $context);
 			}
 		}
-		else
-		{
-			// Parse the input.
-			$input = FinderIndexerHelper::parse($input, $format);
-
-			// Check the input.
-			if (empty($input))
-			{
-				return $count;
-			}
-
-			// Tokenize the input.
-			$tokens = FinderIndexerHelper::tokenize($input, $lang);
-
-			// Add the tokens to the database.
-			$count = $this->addTokensToDB($tokens, $context);
-		}
 
 		return $count;
 	}
diff --git a/administrator/components/com_finder/helpers/indexer/result.php b/administrator/components/com_finder/helpers/indexer/result.php
index efa492e6cb2d..54a48ba18f92 100644
--- a/administrator/components/com_finder/helpers/indexer/result.php
+++ b/administrator/components/com_finder/helpers/indexer/result.php
@@ -178,6 +178,24 @@ class FinderIndexerResult
 	 */
 	public $type_id;
 
+	/**
+	 * The default language for content.
+	 *
+	 * @var    string
+	 * @since  3.0.2
+	 */
+	public $defaultLanguage;
+
+	/**
+	 * Constructor
+	 *
+	 * @since   3.0.3
+	 */
+	public function __construct()
+	{
+		$this->defaultLanguage = JComponentHelper::getParams('com_languages')->get('site', 'en-GB');
+	}
+
 	/**
 	 * The magic set method is used to push additional values into the elements
 	 * array in order to preserve the cleanliness of the object.
@@ -395,4 +413,11 @@ public function addTaxonomy($branch, $title, $state = 1, $access = 1)
 		// Add the node to the taxonomy branch.
 		$this->taxonomy[$branch][$node->title] = $node;
 	}
+	public function setLanguage()
+	{
+		if ($this->language = '*' || $this->language = '')
+		{
+			$this->language = $this->defaultLanguage;
+		}
+	}
 }
diff --git a/administrator/components/com_finder/helpers/indexer/stemmer/fr.php b/administrator/components/com_finder/helpers/indexer/stemmer/fr.php
new file mode 100644
index 000000000000..7ca15209dce1
--- /dev/null
+++ b/administrator/components/com_finder/helpers/indexer/stemmer/fr.php
@@ -0,0 +1,276 @@
+<?php
+/**
+ * @package     Joomla.Administrator
+ * @subpackage  com_finder
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license     GNU General Public License version 2 or later; see LICENSE
+ */
+
+defined('_JEXEC') or die;
+
+/**
+ * French stemmer class for Smart Search indexer.
+ *
+ * First contributed by Eric Sanou (bobotche@hotmail.fr)
+ * This class is inspired in  Alexis Ulrich's French stemmer code (http://alx2002.free.fr)
+ *
+ * @package     Joomla.Administrator
+ * @subpackage  com_finder
+ * @since       3.0
+ */
+class FinderIndexerStemmerFr extends FinderIndexerStemmer
+{
+	/**
+	 * Stemming rules.
+	 *
+	 * @var    Array
+	 * @since  3.0
+	 */
+	private static $_stemRules = null;
+
+	/**
+	 * Method to stem a token and return the root.
+	 *
+	 * @param   string  $token  The token to stem.
+	 * @param   string  $lang   The language of the token.
+	 *
+	 * @return  string  The root token.
+	 *
+	 * @since   3.0
+	 */
+	public function stem($token, $lang)
+	{
+		// Check if the token is long enough to merit stemming.
+		if (strlen($token) <= 2)
+		{
+			return $token;
+		}
+
+		// Check if the language is French or All.
+		if ($lang !== 'fr' && $lang != '*')
+		{
+			return $token;
+		}
+
+		// Stem the token if it is not in the cache.
+		if (!isset($this->cache[$lang][$token]))
+		{
+			// Stem the token.
+			$result = static::_getStem($token);
+
+			// Add the token to the cache.
+			$this->cache[$lang][$token] = $result;
+		}
+
+		return $this->cache[$lang][$token];
+	}
+
+	/**
+	 * French stemmer rules variables.
+	 *
+	 * @return  array  The rules
+	 *
+	 * @since   3.0
+	 */
+	protected static function getStemRules()
+	{
+		if (static::$_stemRules)
+		{
+			return static::$_stemRules;
+		}
+
+		$vars = array();
+
+		// French accented letters in ISO-8859-1 encoding
+		$vars['accents'] = chr(224) . chr(226) . chr(232) . chr(233) . chr(234) . chr(235) . chr(238) . chr(239) . chr(244) . chr(251) . chr(249) . chr(231);
+
+		// The rule patterns include all accented words for french language
+		$vars['rule_pattern'] = "/^([a-z" . $vars['accents'] . "]*)(\*){0,1}(\d)([a-z" . $vars['accents'] . "]*)([.|>])/";
+
+		// French vowels (including y) in ISO-8859-1 encoding
+		$vars['vowels'] = chr(97) . chr(224) . chr(226) . chr(101) . chr(232) . chr(233) . chr(234) . chr(235) . chr(105) . chr(238) . chr(239) . chr(111) . chr(244) . chr(117) . chr(251) . chr(249) . chr(121);
+
+		// The French rules in ISO-8859-1 encoding
+		$vars['rules'] = array(
+			'esre1>','esio1>','siol1.','siof0.','sioe0.','sio3>','st1>','sf1>','sle1>',
+			'slo1>','s'.chr(233).'1>',chr(233).'tuae5.',chr(233).'tuae2.','tnia0.','tniv1.','tni3>','suor1.',
+			'suo0.','sdrail5.','sdrai4.','er'.chr(232).'i1>','sesue3x>','esuey5i.','esue2x>',
+			'se1>','er'.chr(232).'g3.','eca1>','esiah0.','esi1>','siss2.','sir2>','sit2>','egan'.chr(233).'1.',
+			'egalli6>','egass1.','egas0.','egat3.','ega3>','ette4>','ett2>','etio1.',
+			'tio'.chr(231).'4c.','tio0.','et1>','eb1>','snia1>','eniatnau8>','eniatn4.','enia1>',
+			'niatnio3.','niatg3.','e'.chr(233).'1>',''.chr(233).'hcat1.',''.chr(233).'hca4.',''.chr(233).'tila5>',''.chr(233).'tici5.',''.chr(233).'tir1.',
+			''.chr(233).'ti3>',''.chr(233).'gan1.',''.chr(233).'ga3>',''.chr(233).'tehc1.',''.chr(233).'te3>',''.chr(233).'it0.',''.chr(233).'1>','eire4.','eirue5.',
+			'eio1.','eia1.','ei1>','eng1.','xuaessi7.','xuae1>','uaes0.','uae3.',
+			'xuave2l.','xuav2li>','xua3la>','ela1>','lart2.','lani2>','la'.chr(233).'2>','siay4i.',
+			'siassia7.','siarv1*.','sia1>','tneiayo6i.','tneiay6i.','tneiassia9.',
+			'tneiareio7.','tneia5>','tneia4>','tiario4.','tiarim3.','tiaria3.',
+			'tiaris3.','tiari5.','tiarve6>','tiare5>','iare4>','are3>','tiay4i.',
+			'tia3>','tnay4i.','em'.chr(232).'iu5>','em'.chr(232).'i4>','tnaun3.','tnauqo3.','tnau4>','tnaf0.',
+			'tnat'.chr(233).'2>','tna3>','tno3>','zeiy4i.','zey3i.','zeire5>','zeird4.','zeirio4.',
+			'ze2>','ssiab0.','ssia4.','ssi3.','tnemma6>','tnemesuey9i.','tnemesue8>',
+			'tnemevi7.','tnemessia5.','tnemessi8.','tneme5>','tnemia4.','tnem'.chr(233).'5>',
+			'el2l>','lle3le>','let'.chr(244).'0.','lepp0.','le2>','srei1>','reit3.','reila2.',
+			'rei3>','ert'.chr(226).'e5.','ert'.chr(226).''.chr(233).'1.','ert'.chr(226).'4.','drai4.','erdro0.','erute5.','ruta0.',
+			'eruta1.','erutiov1.','erub3.','eruh3.','erul3.','er2r>','nn1>','r'.chr(232).'i3.',
+			'srev0.','sr1>','rid2>','re2>','xuei4.','esuei5.','lbati3.','lba3>',
+			'rueis0.','ruehcn4.','ecirta6.','ruetai6.','rueta5.','rueir0.','rue3>',
+			'esseti6.','essere6>','esserd1.','esse4>','essiab1.','essia5.','essio1.',
+			'essi4.','essal4.','essa1>','ssab1.','essurp1.','essu4.','essi1.','ssor1.',
+			'essor2.','esso1>','ess2>','tio3.','r'.chr(232).'s2re.','r'.chr(232).'0e.','esn1.','eu1>',
+			'sua0.','su1>','utt1>','tu'.chr(231).'3c.','u'.chr(231).'2c.','ur1.','ehcn2>','ehcu1>','snorr3.',
+			'snoru3.','snorua3.','snorv3.','snorio4.','snori5.','snore5>','snortt4>',
+			'snort'.chr(238).'a7.','snort3.','snor4.','snossi6.','snoire6.','snoird5.','snoitai7.',
+			'snoita6.','snoits1>','noits0.','snoi4>','noitaci7>','noitai6.','noita5.',
+			'noitu4.','noi3>','snoya0.','snoy4i.','sno'.chr(231).'a1.','sno'.chr(231).'r1.','snoe4.',
+			'snosiar1>','snola1.','sno3>','sno1>','noll2.','tnennei4.','ennei2>',
+			'snei1>','sne'.chr(233).'1>','enne'.chr(233).'5e.','ne'.chr(233).'3e.','neic0.','neiv0.','nei3.','sc1.',
+			'sd1.','sg1.','sni1.','tiu0.','ti2.','sp1>','sna1>','sue1.','enn2>','nong2.',
+			'noss2.','rioe4.','riot0.','riorc1.','riovec5.','rio3.','ric2.','ril2.',
+			'tnerim3.','tneris3>','tneri5.','t'.chr(238).'a3.','riss2.','t'.chr(238).'2.','t'.chr(226).'2>','ario2.',
+			'arim1.','ara1.','aris1.','ari3.','art1>','ardn2.','arr1.','arua1.','aro1.',
+			'arv1.','aru1.','ar2.','rd1.','ud1.','ul1.','ini1.','rin2.','tnessiab3.',
+			'tnessia7.','tnessi6.','tnessni4.','sini2.','sl1.','iard3.','iario3.','ia2>',
+			'io0.','iule2.','i1>','sid2.','sic2.','esoi4.','ed1.','ai2>','a1>','adr1.',
+			'tner'.chr(232).'5>','evir1.','evio4>','evi3.','fita4.','fi2>','enie1.','sare4>',
+			'sari4>','sard3.','sart2>','sa2.','tnessa6>','tnessu6>','tnegna3.','tnegi3.',
+			'tneg0.','tneru5>','tnemg0.','tnerni4.','tneiv1.','tne3>','une1.','en1>',
+			'nitn2.','ecnay5i.','ecnal1.','ecna4.','ec1>','nn1.','rit2>','rut2>','rud2.',
+			'ugn1>','eg1>','tuo0.','tul2>','t'.chr(251).'2>','ev1>','v'.chr(232).'2ve>','rtt1>','emissi6.',
+			'em1.','ehc1.','c'.chr(233).'i2c'.chr(232).'.','libi2l.','llie1.','liei4i.','xuev1.','xuey4i.',
+			'xueni5>','xuell4.','xuere5.','xue3>','rb'.chr(233).'3rb'.chr(232).'.','tur2.','rir'.chr(233).'4re.','rir2.',
+			'c'.chr(226).'2ca.','snu1.','rt'.chr(238).'a4.','long2.','vec2.',''.chr(231).'1c>','ssilp3.','silp2.',
+			't'.chr(232).'hc2te.','n'.chr(232).'m2ne.','llepp1.','tan2.','rv'.chr(232).'3rve.','rv'.chr(233).'3rve.','r'.chr(232).'2re.',
+			'r'.chr(233).'2re.','t'.chr(232).'2te.','t'.chr(233).'2te.','epp1.','eya2i.','ya1i.','yo1i.','esu1.','ugi1.',
+			'tt1.',
+			'end0.'
+		);
+
+		static::$_stemRules = $vars;
+
+		return static::$_stemRules;
+	}
+
+	/**
+	 * Returns the number of the first rule from the rule number
+	 * that can be applied to the given reversed input.
+	 * returns -1 if no rule can be applied, ie the stem has been found
+	 *
+	 * @param   string   $reversed_input
+	 * @param   integer  $rule_number
+	 *
+	 * @return  integer  Number of the first rule
+	 *
+	 * @since   3.0
+	 */
+	private static function _getFirstRule($reversed_input, $rule_number)
+	{
+		$vars = static::getStemRules();
+
+		$nb_rules = count($vars['rules']);
+
+		for ($i = $rule_number; $i < $nb_rules; $i++)
+		{
+			// Gets the letters from the current rule
+			$rule = $vars['rules'][$i];
+			$rule = preg_replace($vars['rule_pattern'], "\\1", $rule);
+
+			if (strncasecmp(utf8_decode($rule), $reversed_input, strlen(utf8_decode($rule))) == 0)
+			{
+				return $i;
+			}
+		}
+
+		return -1;
+	}
+
+	/**
+	 * Check the acceptability of a stem for French language
+	 *
+	 * @param   string  $reversed_stem  The stem to check in reverse form
+	 *
+	 * @return  boolean  True if stem is acceptable
+	 *
+	 * @since   3.0
+	 */
+	private static function _check($reversed_stem)
+	{
+		$vars = static::getStemRules();
+
+		if (preg_match('/[' . $vars['vowels'] . ']$/', utf8_encode($reversed_stem)))
+		{
+			// If the form starts with a vowel then at least two letters must remain after stemming (e.g.: "etaient" --> "et")
+			return (strlen($reversed_stem) > 2);
+		}
+		else
+		{
+			// If the reversed stem starts with a consonant then at least two letters must remain after stemming
+			if (strlen($reversed_stem) <= 2)
+			{
+				return false;
+			}
+
+			// And at least one of these must be a vowel or "y"
+			return (preg_match('/[' . $vars['vowels'] . ']/', utf8_encode($reversed_stem)));
+		}
+	}
+
+	/**
+	 * Paice/Husk stemmer which returns a stem for the given $input
+	 *
+	 * @param   string  $input  The word for which we want the stem in UTF-8
+	 *
+	 * @return  string  The stem
+	 *
+	 * @since   3.0
+	 */
+	private static function _getStem($input)
+	{
+		$vars = static::getStemRules();
+
+		$intact = true;
+		$reversed_input = strrev(utf8_decode($input));
+		$rule_number = 0;
+
+		// This loop goes through the rules' array until it finds an ending one (ending by '.') or the last one ('end0.')
+		while (true)
+		{
+			$rule_number = static::_getFirstRule($reversed_input, $rule_number);
+
+			if ($rule_number == -1)
+			{
+				// No other rule can be applied => the stem has been found
+				break;
+			}
+			$rule = $vars['rules'][$rule_number];
+			preg_match($vars['rule_pattern'], $rule, $matches);
+
+			if (($matches[2] != '*') || ($intact))
+			{
+				$reversed_stem = utf8_decode($matches[4]) . substr($reversed_input, $matches[3], strlen($reversed_input) - $matches[3]);
+
+				if (self::_check($reversed_stem))
+				{
+					$reversed_input = $reversed_stem;
+
+					if ($matches[5] == '.')
+					{
+						break;
+					}
+				}
+				else
+				{
+					// Go to another rule
+					$rule_number++;
+				}
+			}
+			else
+			{
+				// Go to another rule
+				$rule_number++;
+			}
+		}
+
+		return utf8_encode(strrev($reversed_input));
+	}
+}
diff --git a/administrator/components/com_modules/helpers/modules.php b/administrator/components/com_modules/helpers/modules.php
index 583ca170a4ca..1a936869073d 100644
--- a/administrator/components/com_modules/helpers/modules.php
+++ b/administrator/components/com_modules/helpers/modules.php
@@ -84,7 +84,7 @@ public static function getClientOptions()
 	 *
 	 * @return  array  A list of positions
 	 */
-	public static function getPositions($clientId)
+	public static function getPositions($clientId, $editPositions = false)
 	{
 		$db		= JFactory::getDbo();
 		$query	= $db->getQuery(true);
@@ -111,7 +111,7 @@ public static function getPositions($clientId)
 		$options = array();
 		foreach ($positions as $position)
 		{
-			if (!$position)
+			if (!$position && !$editPositions)
 			{
 				$options[]	= JHtml::_('select.option', 'none', ':: ' . JText::_('JNONE') . ' ::');
 
diff --git a/administrator/components/com_modules/views/module/tmpl/edit_positions.php b/administrator/components/com_modules/views/module/tmpl/edit_positions.php
index cab8bb0722f6..991b437d6e7a 100644
--- a/administrator/components/com_modules/views/module/tmpl/edit_positions.php
+++ b/administrator/components/com_modules/views/module/tmpl/edit_positions.php
@@ -44,11 +44,10 @@
 
 // Add custom position to options
 $customGroupText = JText::_('COM_MODULES_CUSTOM_POSITION');
-if (!empty($this->item->position) && !$isTemplatePosition)
-{
-	$option = ModulesHelper::createOption($this->item->position);
-	$templateGroups[$customGroupText] = ModulesHelper::createOptionGroup($customGroupText, array($option));
-}
+
+$editPositions = true;
+$customPositions = ModulesHelper::getPositions($clientId, $editPositions);
+$templateGroups[$customGroupText] = ModulesHelper::createOptionGroup($customGroupText, $customPositions);
 
 // Build field
 $attr = array(
diff --git a/administrator/components/com_newsfeeds/config.xml b/administrator/components/com_newsfeeds/config.xml
index 4f4853a3e9d0..18ee2bff6522 100644
--- a/administrator/components/com_newsfeeds/config.xml
+++ b/administrator/components/com_newsfeeds/config.xml
@@ -254,6 +254,18 @@
 		label="JGLOBAL_LIST_LAYOUT_OPTIONS"
 		description="COM_NEWSFEEDS_FIELD_CONFIG_LIST_SETTINGS_DESC">
 
+		<field
+			name="filter_field"
+			type="radio"
+			class="btn-group"
+			default="1"
+			description="JGLOBAL_FILTER_FIELD_DESC"
+			label="JGLOBAL_FILTER_FIELD_LABEL"
+			>
+				<option value="hide">JHIDE</option>
+				<option value="1">JSHOW</option>
+		</field>
+
 		<field
 			name="show_pagination_limit"
 			type="radio"
diff --git a/administrator/components/com_users/views/levels/tmpl/default.php b/administrator/components/com_users/views/levels/tmpl/default.php
index 93522b6f8a0d..282e4e5dde93 100644
--- a/administrator/components/com_users/views/levels/tmpl/default.php
+++ b/administrator/components/com_users/views/levels/tmpl/default.php
@@ -51,7 +51,7 @@
 					<th class="left">
 						<?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_LEVEL_NAME', 'a.title', $listDirn, $listOrder); ?>
 					</th>
-					<th width="10%" class="nowrap center hidden-phone">
+					<th width="10%" class="nowrap">
 						<?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?>
 						<?php if ($canOrder && $saveOrder) :?>
 							<?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'levels.saveorder'); ?>
@@ -92,19 +92,21 @@
 							<?php echo $this->escape($item->title); ?>
 						<?php endif; ?>
 					</td>
-					<td class="order center">
+					<td class="order">
 						<?php if ($canChange) : ?>
+							<div class="input-prepend">
 							<?php if ($saveOrder) :?>
 								<?php if ($listDirn == 'asc') : ?>
-									<span><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span>
-									<span><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span>
+									<span class="add-on"><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span>
+									<span class="add-on"><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span>
 								<?php elseif ($listDirn == 'desc') : ?>
-									<span><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span>
-									<span><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span>
+									<span class="add-on"><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span>
+									<span class="add-on"><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span>
 								<?php endif; ?>
 							<?php endif; ?>
 							<?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?>
-							<input class="span1" type="text" name="order[]" size="5" value="<?php echo $item->ordering;?>" <?php echo $disabled ?> class="text-area-order" />
+						 	<input type="text" name="order[]" size="5" value="<?php echo $item->ordering;?>" <?php echo $disabled ?> class="width-20 text-area-order" />
+						 </div>
 						<?php else : ?>
 							<?php echo $item->ordering; ?>
 						<?php endif; ?>
diff --git a/administrator/components/com_weblinks/config.xml b/administrator/components/com_weblinks/config.xml
index 55956952bf97..b88da89b4680 100644
--- a/administrator/components/com_weblinks/config.xml
+++ b/administrator/components/com_weblinks/config.xml
@@ -219,6 +219,18 @@
 		description="COM_WEBLINKS_LIST_LAYOUT_DESC"
 	>
 
+		<field
+			name="filter_field"
+			type="radio"
+			class="btn-group"
+			default="1"
+			description="JGLOBAL_FILTER_FIELD_DESC"
+			label="JGLOBAL_FILTER_FIELD_LABEL"
+			>
+				<option value="hide">JHIDE</option>
+				<option value="1">JSHOW</option>
+		</field>
+
 		<field
 			name="show_pagination_limit"
 			type="radio" default="1"
diff --git a/administrator/components/com_weblinks/views/weblinks/tmpl/default.php b/administrator/components/com_weblinks/views/weblinks/tmpl/default.php
index fb5c627d12e3..36c02d584c84 100644
--- a/administrator/components/com_weblinks/views/weblinks/tmpl/default.php
+++ b/administrator/components/com_weblinks/views/weblinks/tmpl/default.php
@@ -88,7 +88,7 @@
 					<th width="1%" class="hidden-phone">
 						<input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" />
 					</th>
-					<th width="1%" class="nowrap center">
+					<th width="1%" style="min-width:55px" class="nowrap center">
 						<?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?>
 					</th>
 					<th class="title">
@@ -146,10 +146,10 @@
 					<td class="center hidden-phone">
 						<?php echo JHtml::_('grid.id', $i, $item->id); ?>
 					</td>
-					<td class="center hidden-phone">
+					<td class="center">
 						<?php echo JHtml::_('jgrid.published', $item->state, $i, 'weblinks.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?>
 					</td>
-					<td class="nowrap">
+					<td class="nowrap has-context">
 						<?php if ($item->checked_out) : ?>
 							<?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'weblinks.', $canCheckin); ?>
 						<?php endif; ?>
diff --git a/administrator/includes/application.php b/administrator/includes/application.php
index 23d5fd356175..b6beeea772c3 100644
--- a/administrator/includes/application.php
+++ b/administrator/includes/application.php
@@ -278,10 +278,22 @@ public function getTemplate($params = false)
 				$template->template = 'isis';
 			}
 		}
+
+		if (!file_exists(JPATH_THEMES . '/' . $template->template . '/index.php')) {
+			$error = JText::sprintf('JERROR_COULD_NOT_FIND_TEMPLATE', $template->template);
+			// Load the catch-all error page
+			if (!file_exists(JPATH_ADMINISTRATOR . '/includes/error.php')) {
+				throw new InvalidArgumentException($error);
+			}
+			else {
+				require(JPATH_ADMINISTRATOR . '/includes/error.php');
+				JFactory::getApplication()->close();
+			}
+		}
+
 		if ($params) {
 			return $template;
 		}
-
 		return $template->template;
 	}
 
diff --git a/administrator/includes/error.php b/administrator/includes/error.php
new file mode 100644
index 000000000000..e8f02744d3a3
--- /dev/null
+++ b/administrator/includes/error.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * @package    Joomla.Administrator
+ *
+ * @copyright  Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license    GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+defined('_JEXEC') or die;
+
+$doc = JFactory::getDocument();
+?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $doc->getLanguage(); ?>" lang="<?php echo $doc->getLanguage(); ?>" dir="<?php echo $doc->getDirection(); ?>">
+	<head>
+		<title><?php echo JText::_('JERROR_AN_ERROR_HAS_OCCURRED'); ?></title>
+		<!-- Add Stylesheets -->
+		<link rel="stylesheet" href="../media/system/css/system.css" type="text/css" />
+		<link rel="stylesheet" href="../media/jui/css/bootstrap.css" type="text/css" />
+		<link rel="stylesheet" href="../media/jui/css/bootstrap-extended.css" type="text/css" />
+		<link rel="stylesheet" href="../media/jui/css/bootstrap-responsive.css" type="text/css" />
+		<style type="text/css">
+		.header {
+			background-color: #FFFFFF;
+			background-image: linear-gradient(#D9EFFA, #D9EFFA 25%, #FFFFFF);
+			background-repeat: no-repeat;
+			border-top: 3px solid #0088CC;
+			padding: 20px 0;
+			text-align: center;
+		}
+		</style>
+		<!--[if lt IE 9]>
+		<script src="../media/jui/js/html5.js"></script>
+		<![endif]-->
+	</head>
+	<body>
+		<!-- Header -->
+		<div class="header">
+			<img src="../media/jui/img/joomla.png" alt="Joomla" />
+			<hr />
+		</div>
+		<!-- Container -->
+		<div class="container">
+			<div id="system-message-container">
+				<div id="system-message">
+					<div class="alert alert-error">
+						<h3><?php echo $error; ?></h3>
+					</div>
+				</div>
+			</div>
+		</div>
+	</body>
+</html>
\ No newline at end of file
diff --git a/administrator/language/en-GB/en-GB.com_finder.ini b/administrator/language/en-GB/en-GB.com_finder.ini
index 66cafeffc91f..65db5d3079e6 100644
--- a/administrator/language/en-GB/en-GB.com_finder.ini
+++ b/administrator/language/en-GB/en-GB.com_finder.ini
@@ -61,6 +61,7 @@ COM_FINDER_CONFIG_SHOW_URL_LABEL="Result URL"
 COM_FINDER_CONFIG_STEMMER_DESCRIPTION="The language stemmer to use. Choose snowball if a stemmer for your language is not available or you have multilingual content."
 COM_FINDER_CONFIG_STEMMER_ENABLE_DESCRIPTION="Enable language stemming if available."
 COM_FINDER_CONFIG_STEMMER_ENABLE_LABEL="Enable stemmer"
+COM_FINDER_CONFIG_STEMMER_FR="French Only"
 COM_FINDER_CONFIG_STEMMER_LABEL="Stemmer"
 COM_FINDER_CONFIG_STEMMER_PORTER_EN="English Only"
 COM_FINDER_CONFIG_STEMMER_SNOWBALL="Snowball"
diff --git a/administrator/language/en-GB/en-GB.ini b/administrator/language/en-GB/en-GB.ini
index 456bd02a3bf4..82eab6b715e3 100644
--- a/administrator/language/en-GB/en-GB.ini
+++ b/administrator/language/en-GB/en-GB.ini
@@ -142,6 +142,7 @@ JERROR_LOGIN_DENIED="You do not have access to the administrator section of this
 JERROR_NO_ITEMS_SELECTED="No item(s) selected."
 JERROR_NOLOGIN_BLOCKED="Login denied! Your account has either been blocked or you have not activated it yet."
 JERROR_SAVE_FAILED="Could not save data. Error: %s"
+JERROR_COULD_NOT_FIND_TEMPLATE="Could not find template "_QQ_"%s"_QQ_"."
 
 JFIELD_ACCESS_DESC="The access level group that is allowed to view this item."
 JFIELD_ACCESS_LABEL="Access"
@@ -318,7 +319,7 @@ JGLOBAL_FIELDSET_PUBLISHING="Publishing Options"
 JGLOBAL_FILTER_ATTRIBUTES_DESC="3. List additional attributes, separating each attribute name with a space or comma. For example: <i>class,title,id</i>"
 JGLOBAL_FILTER_ATTRIBUTES_LABEL="Filter Attributes<sup>3</sup>"
 JGLOBAL_FILTER_CLIENT="- Select Location -"
-JGLOBAL_FILTER_FIELD_DESC="Whether to show a Filter field for the list of articles. Select Hide to hide the filter field, or select which field you wish to filter on."
+JGLOBAL_FILTER_FIELD_DESC="Whether to show a Filter field for the list. Select Hide to hide the filter field"
 JGLOBAL_FILTER_FIELD_LABEL="Filter Field"
 JGLOBAL_FILTER_GROUPS_DESC="This sets the user groups that you want filters applied to. Other groups will have no filtering performed."
 JGLOBAL_FILTER_GROUPS_LABEL="Filter Groups"
diff --git a/administrator/language/en-GB/en-GB.lib_joomla.ini b/administrator/language/en-GB/en-GB.lib_joomla.ini
index a6c84ad487b4..1841c489e225 100644
--- a/administrator/language/en-GB/en-GB.lib_joomla.ini
+++ b/administrator/language/en-GB/en-GB.lib_joomla.ini
@@ -471,6 +471,7 @@ JLIB_INSTALLER_ABORT_NOINSTALLPATH="Install path does not exist"
 JLIB_INSTALLER_ABORT_NOUPDATEPATH="Update path does not exist"
 JLIB_INSTALLER_ABORT_PACK_INSTALL_COPY_SETUP="Package Install: Could not copy setup file."
 JLIB_INSTALLER_ABORT_PACK_INSTALL_CREATE_DIRECTORY="Package Install: Failed to create directory:%s "
+JLIB_INSTALLER_ABORT_PACKAGE_INSTALL_MANIFEST="Installation failed: Could not copy PHP manifest file."
 JLIB_INSTALLER_ABORT_PACK_INSTALL_ERROR_EXTENSION="Package %1$s: There was an error installing an extension: %2$s"
 JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_FILES="Package %s: There were no files to install!"
 JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_PACK="Package %s: No package file specified"
diff --git a/administrator/language/en-GB/en-GB.plg_content_vote.ini b/administrator/language/en-GB/en-GB.plg_content_vote.ini
index 1ee49197398c..d0e26a08dfff 100644
--- a/administrator/language/en-GB/en-GB.plg_content_vote.ini
+++ b/administrator/language/en-GB/en-GB.plg_content_vote.ini
@@ -4,9 +4,10 @@
 ; Note : All ini files need to be saved as UTF-8
 
 PLG_CONTENT_VOTE="Content - Vote"
-PLG_VOTE_BEST="Best"
-PLG_VOTE_POOR="Poor"
+PLG_VOTE_LABEL="Please rate"
 PLG_VOTE_RATE="Rate"
+PLG_VOTE_STAR_ACTIVE="Star active"
+PLG_VOTE_STAR_INACTIVE="Star inactive"
 PLG_VOTE_USER_RATING="User Rating:&#160;%1$s&#160;/&#160;%2$s"
 PLG_VOTE_VOTE="Vote %s"
 PLG_VOTE_XML_DESCRIPTION="Add the Voting functionality to Articles"
diff --git a/administrator/templates/hathor/html/com_admin/help/default.php b/administrator/templates/hathor/html/com_admin/help/default.php
new file mode 100644
index 000000000000..0be8a041b479
--- /dev/null
+++ b/administrator/templates/hathor/html/com_admin/help/default.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * @package     Joomla.Administrator
+ * @subpackage  Template.hathor
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license     GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+defined('_JEXEC') or die;
+
+jimport('joomla.language.help');
+?>
+<form action="<?php echo JRoute::_('index.php?option=com_admin&amp;view=help'); ?>" method="post" name="adminForm" id="adminForm">
+<div class="width-40 fltlft">
+	<fieldset class="adminform">
+		<legend><?php echo JText::_('COM_ADMIN_SEARCH'); ?></legend>
+		<input class="textarea" type="hidden" name="option" value="com_admin" />
+		<input type="text" name="helpsearch" size="40"  value="<?php echo $this->escape($this->help_search);?>" class="inputbox" />
+		<input type="submit" value="<?php echo JText::_('COM_ADMIN_GO'); ?>" class="button" />
+		<input type="button" value="<?php echo JText::_('COM_ADMIN_CLEAR_RESULTS'); ?>" class="button" onclick="f=document.adminForm;f.helpsearch.value='';f.submit()" />
+	</fieldset>
+</div>
+<div class="width-50 fltrt helplinks">
+	<ul class="helpmenu">
+		<li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_GLOSSARY'), JText::_('COM_ADMIN_GLOSSARY'), array('target' => 'helpFrame')) ?></li>
+		<li><?php echo JHtml::_('link', 'http://www.gnu.org/licenses/gpl-2.0.html', JText::_('COM_ADMIN_LICENSE'), array('target' => 'helpFrame')) ?></li>
+		<li><?php echo JHtml::_('link', $this->latest_version_check, JText::_('COM_ADMIN_LATEST_VERSION_CHECK'), array('target' => 'helpFrame')) ?></li>
+		<li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_START_HERE'), JText::_('COM_ADMIN_START_HERE'), array('target' => 'helpFrame')) ?></li>
+	</ul>
+</div>
+<div class="clr"> </div>
+	<div id="treecellhelp" class="width-20 fltleft">
+		<fieldset class="adminform whitebg" title="<?php echo JText::_('COM_ADMIN_ALPHABETICAL_INDEX'); ?>">
+			<legend><?php echo JText::_('COM_ADMIN_ALPHABETICAL_INDEX'); ?></legend>
+
+			<div class="helpIndex">
+				<ul class="subext">
+					<?php foreach ($this->toc as $k => $v):?>
+						<li>
+						    <?php $url = JHelp::createUrl('JHELP_'.strtoupper($k)); ?>
+							<?php echo JHtml::_('link', $url, $v, array('target' => 'helpFrame'));?>
+						</li>
+					<?php endforeach;?>
+				</ul>
+			</div>
+		</fieldset>
+	</div>
+
+	<div id="datacellhelp" class="width-80 fltrt">
+		<fieldset title="<?php echo JText::_('COM_ADMIN_VIEW'); ?>">
+			<legend>
+				<?php echo JText::_('COM_ADMIN_VIEW'); ?>
+			</legend>
+				<iframe name="helpFrame" src="<?php echo $this->page;?>" class="helpFrame"></iframe>
+		</fieldset>
+	</div>
+</form>
diff --git a/administrator/templates/hathor/html/com_admin/help/index.html b/administrator/templates/hathor/html/com_admin/help/index.html
new file mode 100644
index 000000000000..2efb97f319a3
--- /dev/null
+++ b/administrator/templates/hathor/html/com_admin/help/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/administrator/templates/hathor/html/com_cpanel/cpanel/default.php b/administrator/templates/hathor/html/com_cpanel/cpanel/default.php
index c263bb85af4d..577bff083e04 100644
--- a/administrator/templates/hathor/html/com_cpanel/cpanel/default.php
+++ b/administrator/templates/hathor/html/com_cpanel/cpanel/default.php
@@ -1,17 +1,16 @@
 <?php
 /**
- * @package		Joomla.Administrator
- * @subpackage	com_cpanel
- * @copyright	Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
- * @license		GNU General Public License version 2 or later; see LICENSE.txt
+ * @package     Joomla.Administrator
+ * @subpackage  Template.hathor
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license     GNU General Public License version 2 or later; see LICENSE.txt
  */
 
 // no direct access
 defined('_JEXEC') or die;
-?>
 
-<?php
-echo JHtml::_('sliders.start', 'panel-sliders', array('useCookie'=>'1'));
+echo JHtml::_('sliders.start', 'panel-sliders', array('useCookie' => '1'));
 
 foreach ($this->modules as $module)
 {
@@ -24,9 +23,10 @@
 	}
 	elseif (method_exists('mod'.$module->name.'Helper', 'getTitle'))
 	{
-		echo JHtml::_('sliders.panel', call_user_func_array(array('mod' . $module->name . 'Helper', 'getTitle'), array($params)), 'cpanel-panel-'.$module->name);
+		echo JHtml::_('sliders.panel', call_user_func_array(array('mod' . $module->name . 'Helper', 'getTitle'), array($params)), 'cpanel-panel-' . $module->name);
 	}
-	else {
+	else
+	{
 		echo JHtml::_('sliders.panel', JText::_('MOD_' . $module->name . '_TITLE'), 'cpanel-panel-' . $module->name);
 	}
 	echo $output;
diff --git a/administrator/templates/hathor/html/mod_login/default.php b/administrator/templates/hathor/html/mod_login/default.php
index 50a43eac857a..c0979e124ad5 100644
--- a/administrator/templates/hathor/html/mod_login/default.php
+++ b/administrator/templates/hathor/html/mod_login/default.php
@@ -1,13 +1,14 @@
 <?php
 /**
- * @package		Joomla.Administrator
- * @subpackage	mod_login
- * @copyright	Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
- * @license		GNU General Public License version 2 or later; see LICENSE.txt
+ * @package     Joomla.Administrator
+ * @subpackage  Template.hathor
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license     GNU General Public License version 2 or later; see LICENSE.txt
  */
 
-// No direct access.
 defined('_JEXEC') or die;
+
 JHtml::_('behavior.keepalive');
 ?>
 <form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure')); ?>" method="post" id="form-login">
@@ -32,7 +33,7 @@
 		</div>
 
 		<div class="clr"></div>
-		<input type="submit" class="hidebtn" value="<?php echo JText::_( 'MOD_LOGIN_LOGIN' ); ?>" />
+		<input type="submit" class="hidebtn" value="<?php echo JText::_('MOD_LOGIN_LOGIN'); ?>" />
 		<input type="hidden" name="option" value="com_login" />
 		<input type="hidden" name="task" value="login" />
 		<input type="hidden" name="return" value="<?php echo $return; ?>" />
diff --git a/administrator/templates/isis/css/template.css b/administrator/templates/isis/css/template.css
index f8cc4a92afb2..3b099f09e548 100644
--- a/administrator/templates/isis/css/template.css
+++ b/administrator/templates/isis/css/template.css
@@ -1888,7 +1888,6 @@ table .span24 {
 	position: relative;
 	height: 0;
 	overflow: hidden;
-	overflow: visible \9;
 	-webkit-transition: height .35s ease;
 	-moz-transition: height .35s ease;
 	-o-transition: height .35s ease;
diff --git a/administrator/templates/isis/html/message.php b/administrator/templates/isis/html/message.php
index 8843173937eb..d2827f03fe7c 100644
--- a/administrator/templates/isis/html/message.php
+++ b/administrator/templates/isis/html/message.php
@@ -1,38 +1,38 @@
-<?php
-/**
- * @package     Joomla.Administrator
- * @subpackage  Template.Isis
- *
- * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
- * @license     GNU General Public License version 2 or later; see LICENSE.txt
- */
-
-defined('_JEXEC') or die;
-
-function renderMessage($msgList)
-{
-	$buffer  = null;
-	$buffer .= "\n<div id=\"system-message-container\">";
-	$alert = array('error' => 'alert-error', 'warning' => '', 'notice' => 'alert-info', 'message' => 'alert-success');
-
-	if (is_array($msgList))
-	{
-		foreach ($msgList as $type => $msgs)
-		{
-			$buffer .= '<div class="alert ' . $alert[$type]. '">';
-			$buffer .= "\n<h4 class=\"alert-heading\">" . JText::_($type) . "</h4>";
-			if (count($msgs))
-			{
-				foreach ($msgs as $msg)
-				{
-					$buffer .= "\n\t\t<p>" . $msg . "</p>";
-				}
-			}
-			$buffer .= "\n</div>";
-		}
-	}
-
-	$buffer .= "\n</div>";
-
-	return $buffer;
-}
+<?php
+/**
+ * @package     Joomla.Administrator
+ * @subpackage  Template.Isis
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license     GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+defined('_JEXEC') or die;
+
+function renderMessage($msgList)
+{
+	$buffer  = null;
+	$buffer .= "\n<div id=\"system-message-container\">";
+	$alert = array('error' => 'alert-error', 'warning' => '', 'notice' => 'alert-info', 'message' => 'alert-success');
+
+	if (is_array($msgList))
+	{
+		foreach ($msgList as $type => $msgs)
+		{
+			$buffer .= '<div class="alert ' . $alert[$type]. '">';
+			$buffer .= "\n<h4 class=\"alert-heading\">" . JText::_($type) . "</h4>";
+			if (count($msgs))
+			{
+				foreach ($msgs as $msg)
+				{
+					$buffer .= "\n\t\t<p>" . $msg . "</p>";
+				}
+			}
+			$buffer .= "\n</div>";
+		}
+	}
+
+	$buffer .= "\n</div>";
+
+	return $buffer;
+}
diff --git a/build/.gitignore b/build/.gitignore
new file mode 100644
index 000000000000..43e487dcaf4f
--- /dev/null
+++ b/build/.gitignore
@@ -0,0 +1,4 @@
+# Ignore test report folders so they do not push to the repo #
+/coverage
+/logs
+/pdepend
diff --git a/components/com_contact/models/categories.php b/components/com_contact/models/categories.php
index eac7c0a4e5ec..9fdb17eb7cc1 100644
--- a/components/com_contact/models/categories.php
+++ b/components/com_contact/models/categories.php
@@ -16,7 +16,7 @@
  * @subpackage  com_contact
  * @since       1.6
  */
-class ContactModelCategories extends JModelLegacy
+class ContactModelCategories extends JModelList
 {
 	/**
 	 * Model context string.
@@ -43,7 +43,7 @@ class ContactModelCategories extends JModelLegacy
 	 *
 	 * @since	1.6
 	 */
-	protected function populateState()
+	protected function populateState($ordering = null, $direction = null)
 	{
 		$app = JFactory::getApplication();
 		$this->setState('filter.extension', $this->_extension);
diff --git a/components/com_contact/models/category.php b/components/com_contact/models/category.php
index 804b0d4aa8ba..e8b739aee988 100644
--- a/components/com_contact/models/category.php
+++ b/components/com_contact/models/category.php
@@ -164,6 +164,14 @@ protected function getListQuery()
 			$query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')');
 		}
 
+		// Filter by search in title
+		$search = $this->getState('list.filter');
+		if (!empty($search))
+		{
+			$search = $db->Quote('%' . $db->escape($search, true) . '%');
+			$query->where('(a.name LIKE ' . $search . ')');
+		}
+
 		// Filter by language
 		if ($this->getState('filter.language')) {
 			$query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')');
@@ -209,6 +217,9 @@ protected function populateState($ordering = null, $direction = null)
 		$limitstart = $app->input->get('limitstart', 0, 'uint');
 		$this->setState('list.start', $limitstart);
 
+		// Optional filter text
+		$this->setState('list.filter', $app->input->getString('filter-search'));
+
 		// Get list ordering default from the parameters
 		$menuParams = new JRegistry;
 		if ($menu = $app->getMenu()->getActive()) {
diff --git a/components/com_contact/models/contact.php b/components/com_contact/models/contact.php
index 297561df950a..d50063d7c584 100644
--- a/components/com_contact/models/contact.php
+++ b/components/com_contact/models/contact.php
@@ -318,8 +318,8 @@ protected function getContactQuery($pk = null)
 				$query->where('a.access IN ('. $groups.')');
 				$query->order('a.state DESC, a.created DESC');
 				// filter per language if plugin published
-				if (JFactory::getApplication()->getLanguageFilter()) {
-					$query->where('a.language='.$db->quote(JFactory::getLanguage()->getTag()).' OR a.language='.$db->quote('*'));
+				if (JLanguageMultilang::isEnabled()) {
+					$query->where(('a.created_by = ' . (int) $result->user_id) AND ('a.language=' . $db->quote(JFactory::getLanguage()->getTag()) . ' OR a.language=' . $db->quote('*')));
 				}
 				if (is_numeric($published)) {
 					$query->where('a.state IN (1,2)');
diff --git a/components/com_contact/views/category/tmpl/default.xml b/components/com_contact/views/category/tmpl/default.xml
index 7fef20d983cb..06fce0c54d27 100644
--- a/components/com_contact/views/category/tmpl/default.xml
+++ b/components/com_contact/views/category/tmpl/default.xml
@@ -109,6 +109,18 @@
 					label="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL"
 			/>
 
+			<field
+				name="filter_field"
+				type="list"
+				default=""
+				description="JGLOBAL_FILTER_FIELD_DESC"
+				label="JGLOBAL_FILTER_FIELD_LABEL"
+			>
+				<option value="">JGLOBAL_USE_GLOBAL</option>
+				<option value="hide">JHIDE</option>
+				<option value="1">JSHOW</option>
+			</field>
+
 			<field name="show_pagination_limit" type="list"
 				description="JGLOBAL_DISPLAY_SELECT_DESC"
 				label="JGLOBAL_DISPLAY_SELECT_LABEL"
diff --git a/components/com_contact/views/category/tmpl/default_items.php b/components/com_contact/views/category/tmpl/default_items.php
index 29cd9e2b29b6..926bdff7ad26 100644
--- a/components/com_contact/views/category/tmpl/default_items.php
+++ b/components/com_contact/views/category/tmpl/default_items.php
@@ -19,19 +19,25 @@
 <?php else : ?>
 
 	<form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
+	<?php if ($this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?>
+	<fieldset class="filters btn-toolbar">
 		<?php if ($this->params->get('filter_field') != 'hide') :?>
 			<div class="btn-group">
-				<label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_CONTACT_'.$this->params->get('filter_field').'_FILTER_LABEL').'&#160;'; ?></label>
+				<label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_CONTACT_FILTER_LABEL').'&#160;'; ?></label>
 				<input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>" />
 			</div>
 		<?php endif; ?>
 
 		<?php if ($this->params->get('show_pagination_limit')) : ?>
-			<div class="display-limit">
-				<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>&#160;
+			<div class="btn-group pull-right">
+				<label for="limit" class="element-invisible">
+					<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>
+				</label>
 				<?php echo $this->pagination->getLimitBox(); ?>
 			</div>
 		<?php endif; ?>
+	</fieldset>
+	<?php endif; ?>
 
 		<ul class="category list-striped">
 			<?php foreach ($this->items as $i => $item) : ?>
@@ -103,5 +109,5 @@
 			<input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" />
 			<input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" />
 		</div>
-	</form>
+</form>
 <?php endif; ?>
diff --git a/components/com_content/helpers/icon.php b/components/com_content/helpers/icon.php
index bf183f0a78ea..cc00f527edfe 100644
--- a/components/com_content/helpers/icon.php
+++ b/components/com_content/helpers/icon.php
@@ -12,52 +12,104 @@
 /**
  * Content Component HTML Helper
  *
- * @static
  * @package     Joomla.Site
  * @subpackage  com_content
  * @since       1.5
  */
-class JHtmlIcon
+abstract class JHtmlIcon
 {
-	public static function create($category, $params)
+	/**
+	 * Method to generate a link to the create item page for the given category
+	 *
+	 * @param   object     $category  The category information
+	 * @param   JRegistry  $params    The item parameters
+	 * @param   array      $attribs   Optional attributes for the link
+	 * @param   boolean    $legacy    True to use legacy images, false to use icomoon based graphic
+	 *
+	 * @return  string  The HTML markup for the create item link
+	 */
+	public static function create($category, $params, $attribs = array(), $legacy = false)
 	{
 		$uri = JURI::getInstance();
 
-		$url = 'index.php?option=com_content&task=article.add&return='.base64_encode($uri).'&a_id=0&catid=' . $category->id;
+		$url = 'index.php?option=com_content&task=article.add&return=' . base64_encode($uri) . '&a_id=0&catid=' . $category->id;
 
-		if ($params->get('show_icons')) {
-			$text = '<i class="icon-plus"></i> ' . JText::_('JNEW') . '&#160;';
-		} else {
-			$text = JText::_('JNEW').'&#160;';
+		if ($params->get('show_icons'))
+		{
+			if ($legacy)
+			{
+				$text = JHtml::_('image', 'system/new.png', JText::_('JNEW'), null, true);
+			}
+			else
+			{
+				$text = '<span class="icon-plus"></span>&#160;' . JText::_('JNEW') . '&#160;';
+			}
+		}
+		else
+		{
+			$text = JText::_('JNEW') . '&#160;';
 		}
 
-		$button = JHtml::_('link', JRoute::_($url), $text, 'class="btn btn-primary"');
+		// Add the button classes to the attribs array
+		if (isset($attribs['class']))
+		{
+			$attribs['class'] = $attribs['class'] . ' btn btn-primary';
+		}
+		else
+		{
+			$attribs['class'] = 'btn btn-primary';
+		}
+
+		$button = JHtml::_('link', JRoute::_($url), $text, $attribs);
+
+		$output = '<span class="hasTip" title="' . JText::_('COM_CONTENT_CREATE_ARTICLE') . '">' . $button . '</span>';
 
-		$output = '<span class="hasTip" title="'.JText::_('COM_CONTENT_CREATE_ARTICLE').'">'.$button.'</span>';
 		return $output;
 	}
 
-	public static function email($article, $params, $attribs = array())
+	/**
+	 * Method to generate a link to the email item page for the given article
+	 *
+	 * @param   object     $article  The article information
+	 * @param   JRegistry  $params   The item parameters
+	 * @param   array      $attribs  Optional attributes for the link
+	 * @param   boolean    $legacy   True to use legacy images, false to use icomoon based graphic
+	 *
+	 * @return  string  The HTML markup for the email item link
+	 */
+	public static function email($article, $params, $attribs = array(), $legacy = false)
 	{
 		require_once JPATH_SITE . '/components/com_mailto/helpers/mailto.php';
-		$uri	= JURI::getInstance();
-		$base	= $uri->toString(array('scheme', 'host', 'port'));
+
+		$uri      = JURI::getInstance();
+		$base     = $uri->toString(array('scheme', 'host', 'port'));
 		$template = JFactory::getApplication()->getTemplate();
-		$link	= $base.JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid), false);
-		$url	= 'index.php?option=com_mailto&tmpl=component&template='.$template.'&link='.MailToHelper::addLink($link);
+		$link     = $base . JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid), false);
+		$url      = 'index.php?option=com_mailto&tmpl=component&template=' . $template . '&link=' . MailToHelper::addLink($link);
 
 		$status = 'width=400,height=350,menubar=yes,resizable=yes';
 
-		if ($params->get('show_icons')) {
-			$text = '<i class="icon-envelope"></i> ' . JText::_('JGLOBAL_EMAIL');
-		} else {
+		if ($params->get('show_icons'))
+		{
+			if ($legacy)
+			{
+				$text = JHtml::_('image', 'system/emailButton.png', JText::_('JGLOBAL_EMAIL'), null, true);
+			}
+			else
+			{
+				$text = '<span class="icon-envelope"></span> ' . JText::_('JGLOBAL_EMAIL');
+			}
+		}
+		else
+		{
 			$text = JText::_('JGLOBAL_EMAIL');
 		}
 
-		$attribs['title']	= JText::_('JGLOBAL_EMAIL');
-		$attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;";
+		$attribs['title']   = JText::_('JGLOBAL_EMAIL');
+		$attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;";
 
 		$output = JHtml::_('link', JRoute::_($url), $text, $attribs);
+
 		return $output;
 	}
 
@@ -67,95 +119,150 @@ public static function email($article, $params, $attribs = array())
 	 * This icon will not display in a popup window, nor if the article is trashed.
 	 * Edit access checks must be performed in the calling code.
 	 *
-	 * @param	object	$article	The article in question.
-	 * @param	object	$params		The article parameters
-	 * @param	array	$attribs	Not used??
+	 * @param   object     $article  The article information
+	 * @param   JRegistry  $params   The item parameters
+	 * @param   array      $attribs  Optional attributes for the link
+	 * @param   boolean    $legacy   True to use legacy images, false to use icomoon based graphic
 	 *
 	 * @return	string	The HTML for the article edit icon.
 	 * @since	1.6
 	 */
-	public static function edit($article, $params, $attribs = array())
+	public static function edit($article, $params, $attribs = array(), $legacy = false)
 	{
-		$user	= JFactory::getUser();
-		$userId	= $user->get('id');
-		$uri	= JURI::getInstance();
+		$user = JFactory::getUser();
+		$uri  = JURI::getInstance();
 
 		// Ignore if in a popup window.
-		if ($params && $params->get('popup')) {
+		if ($params && $params->get('popup'))
+		{
 			return;
 		}
 
 		// Ignore if the state is negative (trashed).
-		if ($article->state < 0) {
+		if ($article->state < 0)
+		{
 			return;
 		}
 
 		JHtml::_('behavior.tooltip');
 
 		// Show checked_out icon if the article is checked out by a different user
-		if (property_exists($article, 'checked_out') && property_exists($article, 'checked_out_time') && $article->checked_out > 0 && $article->checked_out != $user->get('id')) {
+		if (property_exists($article, 'checked_out') && property_exists($article, 'checked_out_time') && $article->checked_out > 0 && $article->checked_out != $user->get('id'))
+		{
 			$checkoutUser = JFactory::getUser($article->checked_out);
-			$button = JHtml::_('image', 'system/checked_out.png', null, null, true);
-			$date = JHtml::_('date', $article->checked_out_time);
-			$tooltip = JText::_('JLIB_HTML_CHECKED_OUT').' :: '.JText::sprintf('COM_CONTENT_CHECKED_OUT_BY', $checkoutUser->name).' <br /> '.$date;
-			return '<span class="hasTip" title="'.htmlspecialchars($tooltip, ENT_COMPAT, 'UTF-8').'">'.$button.'</span>';
+			$button       = JHtml::_('image', 'system/checked_out.png', null, null, true);
+			$date         = JHtml::_('date', $article->checked_out_time);
+			$tooltip      = JText::_('JLIB_HTML_CHECKED_OUT') . ' :: ' . JText::sprintf('COM_CONTENT_CHECKED_OUT_BY', $checkoutUser->name) . ' <br /> ' . $date;
+
+			return '<span class="hasTip" title="' . htmlspecialchars($tooltip, ENT_COMPAT, 'UTF-8') . '">' . $button . '</span>';
 		}
 
-		$url	= 'index.php?option=com_content&task=article.edit&a_id='.$article->id.'&return='.base64_encode($uri);
+		$url = 'index.php?option=com_content&task=article.edit&a_id=' . $article->id . '&return=' . base64_encode($uri);
 
-		if ($article->state == 0) {
-					$overlib = JText::_('JUNPUBLISHED');
-				}
-				else {
-					$overlib = JText::_('JPUBLISHED');
-				}
+		if ($article->state == 0)
+		{
+			$overlib = JText::_('JUNPUBLISHED');
+		}
+		else
+		{
+			$overlib = JText::_('JPUBLISHED');
+		}
 
-				$date = JHtml::_('date', $article->created);
-				$author = $article->created_by_alias ? $article->created_by_alias : $article->author;
+		$date   = JHtml::_('date', $article->created);
+		$author = $article->created_by_alias ? $article->created_by_alias : $article->author;
 
-				$overlib .= '&lt;br /&gt;';
-				$overlib .= $date;
-				$overlib .= '&lt;br /&gt;';
-				$overlib .= JText::sprintf('COM_CONTENT_WRITTEN_BY', htmlspecialchars($author, ENT_COMPAT, 'UTF-8'));
+		$overlib .= '&lt;br /&gt;';
+		$overlib .= $date;
+		$overlib .= '&lt;br /&gt;';
+		$overlib .= JText::sprintf('COM_CONTENT_WRITTEN_BY', htmlspecialchars($author, ENT_COMPAT, 'UTF-8'));
 
-		$icon	= $article->state ? 'edit' : 'eye-close';
-		$text = '<i class="hasTip icon-'.$icon.' tip" title="'.JText::_('COM_CONTENT_EDIT_ITEM').' :: '.$overlib.'"></i> '.JText::_('JGLOBAL_EDIT');
+		if ($legacy)
+		{
+			$icon = $article->state ? 'edit.png' : 'edit_unpublished.png';
+			$text = JHtml::_('image', 'system/' . $icon, JText::_('JGLOBAL_EDIT'), null, true);
+		}
+		else
+		{
+			$icon = $article->state ? 'edit' : 'eye-close';
+			$text = '<span class="hasTip icon-' . $icon . ' tip" title="' . JText::_('COM_CONTENT_EDIT_ITEM') . ' :: ' . $overlib . '"></span>&#160;' . JText::_('JGLOBAL_EDIT') . '&#160;';
+		}
 
-		$output = JHtml::_('link', JRoute::_($url), $text);
+		$output = JHtml::_('link', JRoute::_($url), $text, $attribs);
 
 		return $output;
 	}
 
-	public static function print_popup($article, $params, $attribs = array())
+	/**
+	 * Method to generate a popup link to print an article
+	 *
+	 * @param   object     $article  The article information
+	 * @param   JRegistry  $params   The item parameters
+	 * @param   array      $attribs  Optional attributes for the link
+	 * @param   boolean    $legacy   True to use legacy images, false to use icomoon based graphic
+	 *
+	 * @return  string  The HTML markup for the popup link
+	 */
+	public static function print_popup($article, $params, $attribs = array(), $legacy = false)
 	{
 		$url  = ContentHelperRoute::getArticleRoute($article->slug, $article->catid);
-		$url .= '&tmpl=component&print=1&layout=default&page='.@ $request->limitstart;
+		$url .= '&tmpl=component&print=1&layout=default&page=' . @ $request->limitstart;
 
 		$status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no';
 
 		// checks template image directory for image, if non found default are loaded
-		if ($params->get('show_icons')) {
-			$text = '<i class="icon-print"></i> '.JText::_('JGLOBAL_PRINT');
-		} else {
+		if ($params->get('show_icons'))
+		{
+			if ($legacy)
+			{
+				$text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), null, true);
+			}
+			else
+			{
+				$text = '<span class="icon-print"></span>&#160;' . JText::_('JGLOBAL_PRINT') . '&#160;';
+			}
+		}
+		else
+		{
 			$text = JText::_('JGLOBAL_PRINT');
 		}
 
-		$attribs['title']	= JText::_('JGLOBAL_PRINT');
-		$attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;";
-		$attribs['rel']		= 'nofollow';
+		$attribs['title']   = JText::_('JGLOBAL_PRINT');
+		$attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;";
+		$attribs['rel']     = 'nofollow';
 
 		return JHtml::_('link', JRoute::_($url), $text, $attribs);
 	}
 
-	public static function print_screen($article, $params, $attribs = array())
+	/**
+	 * Method to generate a link to print an article
+	 *
+	 * @param   object     $article  Not used, @deprecated for 4.0
+	 * @param   JRegistry  $params   The item parameters
+	 * @param   array      $attribs  Not used, @deprecated for 4.0
+	 * @param   boolean    $legacy   True to use legacy images, false to use icomoon based graphic
+	 *
+	 * @return  string  The HTML markup for the popup link
+	 */
+	public static function print_screen($article, $params, $attribs = array(), $legacy = false)
 	{
-		// checks template image directory for image, if non found default are loaded
-		if ($params->get('show_icons')) {
-			$text = $text = '<i class="icon-print"></i> '.JText::_('JGLOBAL_PRINT');
-		} else {
+		// Checks template image directory for image, if none found default are loaded
+		if ($params->get('show_icons'))
+		{
+			if ($legacy)
+			{
+				$text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), null, true);
+			}
+			else
+			{
+				$text = $text = '<span class="icon-print"></i>&#160;' . JText::_('JGLOBAL_PRINT') . '&#160;';
+			}
+		}
+		else
+		{
 			$text = JText::_('JGLOBAL_PRINT');
 		}
-		return '<a href="#" onclick="window.print();return false;">'.$text.'</a>';
+
+		return '<a href="#" onclick="window.print();return false;">' . $text . '</a>';
 	}
 
 }
diff --git a/components/com_content/models/categories.php b/components/com_content/models/categories.php
index 04032d104336..4f9a124862a7 100644
--- a/components/com_content/models/categories.php
+++ b/components/com_content/models/categories.php
@@ -16,7 +16,7 @@
  * @subpackage  com_content
  * @since       1.6
  */
-class ContentModelCategories extends JModelLegacy
+class ContentModelCategories extends JModelList
 {
 	/**
 	 * Model context string.
@@ -43,7 +43,7 @@ class ContentModelCategories extends JModelLegacy
 	 *
 	 * @since	1.6
 	 */
-	protected function populateState()
+	protected function populateState($ordering = null, $direction = null)
 	{
 		$app = JFactory::getApplication();
 		$this->setState('filter.extension', $this->_extension);
diff --git a/components/com_content/views/archive/tmpl/default_items.php b/components/com_content/views/archive/tmpl/default_items.php
index d62bba6d2c41..7823b873f104 100644
--- a/components/com_content/views/archive/tmpl/default_items.php
+++ b/components/com_content/views/archive/tmpl/default_items.php
@@ -79,7 +79,7 @@
 				<?php if ($params->get('show_publish_date')) : ?>
 					<dd>
 						<div class="published">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
+							<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
 						</div>
 					</dd>
 				<?php endif; ?>
@@ -88,14 +88,14 @@
 					<?php if ($params->get('show_modify_date')) : ?>
 						<dd>
 							<div class="modified">
-								<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
+								<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 							</div>
 						</dd>
 					<?php endif; ?>
 					<?php if ($params->get('show_create_date')) : ?>
 						<dd>
 							<div class="create">
-								<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC3'))); ?>
+								<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC3'))); ?>
 							</div>
 						</dd>
 					<?php endif; ?>
@@ -103,7 +103,7 @@
 					<?php if ($params->get('show_hits')) : ?>
 						<dd>
 							<div class="hits">
-								<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?>
+								<span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?>
 							</div>
 						</dd>
 					<?php endif; ?>
@@ -151,7 +151,7 @@
 					<?php if ($params->get('show_publish_date')) : ?>
 						<dd>
 							<div class="published">
-								<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
+								<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
 							</div>
 						</dd>
 					<?php endif; ?>
@@ -159,22 +159,22 @@
 
 				<?php if ($params->get('show_create_date')) : ?>
 					<dd>
-						<div class="create"><i class="icon-calendar">
-							</i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
+						<div class="create"><span class="icon-calendar">
+							</span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 						</div>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_modify_date')) : ?>
 					<dd>
-						<div class="modified"><i class="icon-calendar">
-							</i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
+						<div class="modified"><span class="icon-calendar">
+							</span> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 						</div>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_hits')) : ?>
 					<dd>
 						<div class="hits">
-							<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?>
+							<span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?>
 						</div>
 					</dd>
 				<?php endif; ?>
diff --git a/components/com_content/views/article/tmpl/default.php b/components/com_content/views/article/tmpl/default.php
index ac30e196dd77..0151f560d97e 100644
--- a/components/com_content/views/article/tmpl/default.php
+++ b/components/com_content/views/article/tmpl/default.php
@@ -32,30 +32,6 @@
 	echo $this->item->pagination;
 }
 ?>
-	<?php if (!$this->print) : ?>
-		<?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
-			<div class="btn-group pull-right">
-				<a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <i class="icon-cog"></i> <span class="caret"></span> </a>
-				<?php // Note the actions class is deprecated. Use dropdown-menu instead. ?>
-				<ul class="dropdown-menu actions">
-					<?php if ($params->get('show_print_icon')) : ?>
-						<li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li>
-					<?php endif; ?>
-					<?php if ($params->get('show_email_icon')) : ?>
-						<li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li>
-					<?php endif; ?>
-					<?php if ($canEdit) : ?>
-						<li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li>
-					<?php endif; ?>
-				</ul>
-			</div>
-		<?php endif; ?>
-	<?php else : ?>
-		<div class="pull-right">
-			<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
-		</div>
-	<?php endif; ?>
-
 	<?php if ($params->get('show_title') || $params->get('show_author')) : ?>
 	<div class="page-header">
 		<h2>
@@ -70,88 +46,98 @@
 				<?php endif; ?>
 			<?php endif; ?>
 		</h2>
-			<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
-
-				<?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?>
-				<?php if (!empty($this->item->contactid) && $params->get('link_author') == true) : ?>
-				<?php
-				$needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid;
-				$menu = JFactory::getApplication()->getMenu();
-				$item = $menu->getItems('link', $needle, true);
-				$cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle;
-			?>
-				<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?>
-				<?php else: ?>
-				<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+	</div>
+	<?php endif; ?>
+	<?php if (!$this->print) : ?>
+		<?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
+		<div class="btn-group pull-right">
+			<a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <span class="icon-cog"></span> <span class="caret"></span> </a>
+			<?php // Note the actions class is deprecated. Use dropdown-menu instead. ?>
+			<ul class="dropdown-menu actions">
+				<?php if ($params->get('show_print_icon')) : ?>
+				<li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li>
 				<?php endif; ?>
-
+				<?php if ($params->get('show_email_icon')) : ?>
+				<li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li>
 				<?php endif; ?>
-	</div>
+				<?php if ($canEdit) : ?>
+				<li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li>
+				<?php endif; ?>
+			</ul>
+		</div>
+		<?php endif; ?>
+		<?php else : ?>
+		<div class="pull-right">
+		<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
+		</div>
 	<?php endif; ?>
-
 <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date')
-	|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')); ?>
+	|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author')); ?>
 	<?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
 		<div class="article-info muted">
 			<dl class="article-info">
 			<dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
 
+			<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
+				<dd class="createdby">
+					<?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?>
+					<?php if (!empty($this->item->contactid) && $params->get('link_author') == true) : ?>
+						<?php
+						$needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid;
+						$menu = JFactory::getApplication()->getMenu();
+						$item = $menu->getItems('link', $needle, true);
+						$cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle;
+						?>
+						<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?>
+					<?php else: ?>
+						<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+					<?php endif; ?>
+				</dd>
+			<?php endif; ?>
 			<?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?>
-				<dd>
-					<div class="parent-category-name">
-						<?php $title = $this->escape($this->item->parent_title);
-						$url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?>
-						<?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?>
-							<?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
-						<?php else : ?>
-							<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
-						<?php endif; ?>
-					</div>
+				<dd class="parent-category-name">
+					<?php $title = $this->escape($this->item->parent_title);
+					$url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?>
+					<?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?>
+						<?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
+					<?php else : ?>
+						<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
+					<?php endif; ?>
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_category')) : ?>
-				<dd>
-					<div class="category-name">
-						<?php $title = $this->escape($this->item->category_title);
-						$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?>
-						<?php if ($params->get('link_category') && $this->item->catslug) : ?>
-							<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
-						<?php else : ?>
-							<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
-						<?php endif; ?>
-					</div>
+				<dd class="category-name">
+					<?php $title = $this->escape($this->item->category_title);
+					$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?>
+					<?php if ($params->get('link_category') && $this->item->catslug) : ?>
+						<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
+					<?php else : ?>
+						<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
+					<?php endif; ?>
 				</dd>
 			<?php endif; ?>
 
 			<?php if ($params->get('show_publish_date')) : ?>
-				<dd>
-					<div class="published">
-						<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="published">
+					<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
 				</dd>
 			<?php endif; ?>
 
 			<?php if ($info == 0): ?>
 				<?php if ($params->get('show_modify_date')) : ?>
-					<dd>
-						<div class="modified">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd class="modified">
+						<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_create_date')) : ?>
-					<dd>
-						<div class="create">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd class="create">
+						<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 
 				<?php if ($params->get('show_hits')) : ?>
-					<dd>
-						<div class="hits">
-							<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
-						</div>
+					<dd class="hits">
+						<span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
 					</dd>
 				<?php endif; ?>
 			<?php endif; ?>
@@ -191,60 +177,67 @@
 			<dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
 
 			<?php if ($info == 1): ?>
+				<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
+					<dd class="createdby">
+						<?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?>
+						<?php if (!empty($this->item->contactid) && $params->get('link_author') == true) : ?>
+						<?php
+						$needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid;
+						$menu = JFactory::getApplication()->getMenu();
+						$item = $menu->getItems('link', $needle, true);
+						$cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle;
+						?>
+						<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?>
+						<?php else: ?>
+						<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+						<?php endif; ?>
+					</dd>
+				<?php endif; ?>
 				<?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?>
-					<dd>
-						<div class="parent-category-name">
-							<?php	$title = $this->escape($this->item->parent_title);
-							$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?>
-							<?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?>
-								<?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
-							<?php else : ?>
-								<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
-							<?php endif; ?>
-						</div>
+					<dd class="parent-category-name">
+						<?php	$title = $this->escape($this->item->parent_title);
+						$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?>
+						<?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?>
+							<?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
+						<?php else : ?>
+							<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
+						<?php endif; ?>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_category')) : ?>
-					<dd>
-						<div class="category-name">
-							<?php 	$title = $this->escape($this->item->category_title);
-							$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?>
-							<?php if ($params->get('link_category') && $this->item->catslug) : ?>
-								<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
-							<?php else : ?>
-								<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
-							<?php endif; ?>
-						</div>
+					<dd class="category-name">
+						<?php 	$title = $this->escape($this->item->category_title);
+						$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?>
+						<?php if ($params->get('link_category') && $this->item->catslug) : ?>
+							<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
+						<?php else : ?>
+							<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
+						<?php endif; ?>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_publish_date')) : ?>
-					<dd>
-						<div class="published">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd class="published">
+						<span class="icon-calendar"></span>
+						<?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 			<?php endif; ?>
 
 			<?php if ($params->get('show_create_date')) : ?>
-				<dd>
-					<div class="create"><i class="icon-calendar">
-						</i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="create">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_modify_date')) : ?>
-				<dd>
-					<div class="modified"><i class="icon-calendar">
-						</i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="modified">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_hits')) : ?>
-				<dd>
-					<div class="hits">
-						<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
-					</div>
+				<dd class="hits">
+					<span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
 				</dd>
 			<?php endif; ?>
 			</dl>
diff --git a/components/com_content/views/categories/tmpl/default_items.php b/components/com_content/views/categories/tmpl/default_items.php
index fd008f27aa0e..284686885c7f 100644
--- a/components/com_content/views/categories/tmpl/default_items.php
+++ b/components/com_content/views/categories/tmpl/default_items.php
@@ -32,7 +32,7 @@
 				</span>
 			<?php endif; ?>
 			<?php if (count($item->getChildren()) > 0) : ?>
-				<a href="#category-<?php echo $item->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><i class="icon-plus"></i></a>
+				<a href="#category-<?php echo $item->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a>
 			<?php endif;?>
 		</h3>
 		<?php if ($this->params->get('show_subcat_desc_cat') == 1) :?>
diff --git a/components/com_content/views/category/tmpl/blog_children.php b/components/com_content/views/category/tmpl/blog_children.php
index 1107a4f0ae65..38917bde198d 100644
--- a/components/com_content/views/category/tmpl/blog_children.php
+++ b/components/com_content/views/category/tmpl/blog_children.php
@@ -32,7 +32,7 @@
 				<?php endif; ?>
 
 				<?php if (count($child->getChildren()) > 0) : ?>
-				<a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><i class="icon-plus"></i></a>
+				<a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a>
 			<?php endif;?>
 
 			</h3>
diff --git a/components/com_content/views/category/tmpl/blog_item.php b/components/com_content/views/category/tmpl/blog_item.php
index 10498e7418dd..643e72925ec1 100644
--- a/components/com_content/views/category/tmpl/blog_item.php
+++ b/components/com_content/views/category/tmpl/blog_item.php
@@ -19,21 +19,7 @@
 JHtml::_('behavior.framework');
 ?>
 
-	<?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?>
-	<div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <i class="icon-cog"></i> <span class="caret"></span> </a>
-		<ul class="dropdown-menu">
-			<?php if ($params->get('show_print_icon')) : ?>
-				<li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li>
-			<?php endif; ?>
-			<?php if ($params->get('show_email_icon')) : ?>
-				<li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li>
-			<?php endif; ?>
-			<?php if ($canEdit) : ?>
-				<li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li>
-			<?php endif; ?>
-		</ul>
-	</div>
-	<?php endif; ?>
+
 	<?php if ($params->get('show_title') || $this->item->state == 0 || ($params->get('show_author') && !empty($this->item->author ))) : ?>
 		<div class="page-header">
 		<?php if ($params->get('show_title')) : ?>
@@ -50,37 +36,52 @@
 			<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
 		<?php endif; ?>
 
-		<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
-			<small class="createdby">
-			<?php $author = $this->item->author; ?>
-			<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?>
-			<?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?>
-				<?php
-				echo JText::sprintf(
-				'COM_CONTENT_WRITTEN_BY',
-				JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id=' . $this->item->contactid), $author)
-				); ?>
-			<?php else :?>
-				<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+			<?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?>
+			<div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#" role="button"> <span class="icon-cog"></span> <span class="caret"></span> </a>
+				<ul class="dropdown-menu">
+					<?php if ($params->get('show_print_icon')) : ?>
+					<li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li>
+					<?php endif; ?>
+					<?php if ($params->get('show_email_icon')) : ?>
+					<li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li>
+					<?php endif; ?>
+					<?php if ($canEdit) : ?>
+					<li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li>
+					<?php endif; ?>
+				</ul>
+			</div>
 			<?php endif; ?>
-			</small>
-		<?php endif; ?>
 		</div>
 	<?php endif; ?>
 
 	<?php // to do not that elegant would be nice to group the params ?>
 	<?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date')
-		|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')); ?>
+		|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')|| $params->get('show_author')); ?>
 	<?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
-		<div class="article-info muted">
-			<dl class="article-info">
+
+			<dl class="article-info muted">
 			<dt class="article-info-term">
 				<?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?>
 			</dt>
+				<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
+				<dd class="createdby">
+					<?php $author = $this->item->author; ?>
+					<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?>
+					<?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?>
+					<?php
+					echo JText::sprintf(
+						'COM_CONTENT_WRITTEN_BY',
+						JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id=' . $this->item->contactid), $author)
+					); ?>
+					<?php else :?>
+					<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+					<?php endif; ?>
+				</dd>
+				<?php endif; ?>
 
 			<?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?>
-				<dd>
-					<div class="parent-category-name">
+				<dd class="parent-category-name">
+
 						<?php $title = $this->escape($this->item->parent_title);
 						$url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?>
 						<?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?>
@@ -88,57 +89,49 @@
 						<?php else : ?>
 							<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
 						<?php endif; ?>
-					</div>
+
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_category')) : ?>
-				<dd>
-					<div class="category-name">
-						<?php $title = $this->escape($this->item->category_title);
+				<dd class="category-name">
+					<?php $title = $this->escape($this->item->category_title);
 						$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?>
 						<?php if ($params->get('link_category') && $this->item->catslug) : ?>
 							<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
 						<?php else : ?>
 							<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
 						<?php endif; ?>
-					</div>
 				</dd>
 			<?php endif; ?>
 
 			<?php if ($params->get('show_publish_date')) : ?>
-				<dd>
-					<div class="published">
-						<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="published">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
 				</dd>
 			<?php endif; ?>
 
 			<?php if ($info == 0): ?>
 				<?php if ($params->get('show_modify_date')) : ?>
-					<dd>
-						<div class="modified">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd  class="modified">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_create_date')) : ?>
-					<dd>
-						<div class="create">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd class="create">
+						<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 
 				<?php if ($params->get('show_hits')) : ?>
-					<dd>
-						<div class="hits">
-							<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
-						</div>
+					<dd class="hits">
+						<span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
 					</dd>
 				<?php endif; ?>
 			<?php endif; ?>
 			</dl>
-		</div>
+
 	<?php endif; ?>
 
 	<?php if (!$params->get('show_intro')) : ?>
@@ -159,27 +152,38 @@
 	<?php echo $this->item->introtext; ?>
 
 	<?php if ($useDefList && ($info == 1 || $info == 2)) : ?>
-		<div class="article-info muted">
-			<dl class="article-info">
+			<dl class="article-info muted">
 			<dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
 
 			<?php if ($info == 1): ?>
+				<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
+					<dd class="createdby">
+						<?php $author = $this->item->author; ?>
+						<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?>
+						<?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?>
+						<?php
+						echo JText::sprintf(
+							'COM_CONTENT_WRITTEN_BY',
+							JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id=' . $this->item->contactid), $author)
+						); ?>
+						<?php else :?>
+						<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+						<?php endif; ?>
+					</dd>
+					<?php endif; ?>
 				<?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?>
-					<dd>
-						<div class="parent-category-name">
-							<?php	$title = $this->escape($this->item->parent_title);
+					<dd class="parent-category-name">
+						<?php	$title = $this->escape($this->item->parent_title);
 							$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?>
 							<?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?>
 								<?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
 							<?php else : ?>
 								<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
 							<?php endif; ?>
-						</div>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_category')) : ?>
-					<dd>
-						<div class="category-name">
+					<dd class="category-name">
 							<?php 	$title = $this->escape($this->item->category_title);
 							$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?>
 							<?php if ($params->get('link_category') && $this->item->catslug) : ?>
@@ -187,41 +191,36 @@
 							<?php else : ?>
 								<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
 							<?php endif; ?>
-						</div>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_publish_date')) : ?>
-					<dd>
-						<div class="published">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd  class="published">
+						<span class="icon-calendar"></span>
+						<?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 			<?php endif; ?>
 
 			<?php if ($params->get('show_create_date')) : ?>
-				<dd>
-					<div class="create"><i class="icon-calendar">
-						</i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="create">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_modify_date')) : ?>
-				<dd>
-					<div class="modified"><i class="icon-calendar">
-						</i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="modified">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_hits')) : ?>
-				<dd>
-					<div class="hits">
-						<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
-					</div>
+				<dd  class="hits">
+					<span class="icon-eye-open"></span>
+					<?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
 				</dd>
 			<?php endif; ?>
 			</dl>
-		</div>
+
 	<?php endif; ?>
 
 	<?php if ($params->get('show_readmore') && $this->item->readmore) :
@@ -237,7 +236,7 @@
 			$link->setVar('return', base64_encode($returnURL));
 		endif;
 		?>
-		<a class="btn" href="<?php echo $link; ?>"> <i class="icon-chevron-right"></i>
+		<p class="readmore"><a class="btn" href="<?php echo $link; ?>"> <span class="icon-chevron-right"></span>
 		<?php if (!$params->get('access-view')) :
 			echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
 		elseif ($readmore = $this->item->alternative_readmore) :
@@ -251,7 +250,7 @@
 			echo JText::_('COM_CONTENT_READ_MORE');
 			echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
 		endif; ?>
-		</a>
+		</a></p>
 	<?php endif; ?>
 
 <?php echo $this->item->event->afterDisplayContent; ?>
diff --git a/components/com_content/views/category/tmpl/blog_links.php b/components/com_content/views/category/tmpl/blog_links.php
index f99da1bdd030..1ff4a3ba2f89 100644
--- a/components/com_content/views/category/tmpl/blog_links.php
+++ b/components/com_content/views/category/tmpl/blog_links.php
@@ -12,7 +12,7 @@
 
 
 <div class="items-more">
-<ul class="nav nav-tabs nav-stacked">
+<ol class="nav nav-tabs nav-stacked">
 <?php
 	foreach ($this->link_items as &$item) :
 ?>
@@ -21,5 +21,5 @@
 			<?php echo $item->title; ?></a>
 	</li>
 <?php endforeach; ?>
-</ul>
+</ol>
 </div>
diff --git a/components/com_content/views/category/tmpl/default_articles.php b/components/com_content/views/category/tmpl/default_articles.php
index 70c578290e6f..0bf36d940539 100644
--- a/components/com_content/views/category/tmpl/default_articles.php
+++ b/components/com_content/views/category/tmpl/default_articles.php
@@ -18,6 +18,17 @@
 $n			= count($this->items);
 $listOrder	= $this->escape($this->state->get('list.ordering'));
 $listDirn	= $this->escape($this->state->get('list.direction'));
+
+// check for at least one editable article
+$isEditable = false;
+if (!empty($this->items)) {
+	foreach ($this->items as $article) {
+		if ($article->params->get('access-edit')) {
+			$isEditable = true;
+			break;
+		}
+	}
+}
 ?>
 
 <?php if (empty($this->items)) : ?>
@@ -30,16 +41,18 @@
 
 <form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm" class="form-inline">
 	<?php if ($this->params->get('show_headings') || $this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?>
-	<div class="filters btn-toolbar">
+	<fieldset class="filters btn-toolbar">
 		<?php if ($this->params->get('filter_field') != 'hide') :?>
 			<div class="btn-group">
-				<label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_CONTENT_'.$this->params->get('filter_field').'_FILTER_LABEL').'&#160;'; ?></label>
+				<label class="filter-search-lbl element-invisible" for="filter-search">
+					<?php echo JText::_('COM_CONTENT_'.$this->params->get('filter_field').'_FILTER_LABEL').'&#160;'; ?>
+				</label>
 				<input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" />
 			</div>
 		<?php endif; ?>
 		<?php if ($this->params->get('show_pagination_limit')) : ?>
 			<div class="btn-group pull-right">
-				<label class="element-invisible">
+				<label for="limit" class="element-invisible">
 					<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>
 				</label>
 				<?php echo $this->pagination->getLimitBox(); ?>
@@ -49,40 +62,89 @@
 		<input type="hidden" name="filter_order" value="" />
 		<input type="hidden" name="filter_order_Dir" value="" />
 		<input type="hidden" name="limitstart" value="" />
+		<input type="hidden" name="task" value="" />
 		<div class="clearfix"></div>
-	</div>
+	</fieldset>
 	<?php endif; ?>
 
-	<ul class="category list-striped list-condensed">
-
-		<?php foreach ($this->items as $i => $article) : ?>
-			<?php if ($this->items[$i]->state == 0) : ?>
-				<li class="system-unpublished cat-list-row<?php echo $i % 2; ?>">
-			<?php else: ?>
-				<li class="cat-list-row<?php echo $i % 2; ?>" >
-			<?php endif; ?>
-				<?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?>
-					<?php if ($this->params->get('list_show_hits', 1)) : ?>
-					<span class="list-hits badge badge-info pull-right">
-						<?php echo JText::sprintf('JGLOBAL_HITS_COUNT', $article->hits); ?>
-					</span>
-					<?php endif; ?>
-					<?php if ($article->params->get('access-edit')) : ?>
-						<span class="list-edit pull-left width-50">
-							<?php echo JHtml::_('icon.edit', $article, $params); ?>
-						</span>
-					<?php endif; ?>
-					<strong class="list-title">
-						<a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid)); ?>">
-							<?php echo $this->escape($article->title); ?></a>
-					</strong>
-					<?php if ($this->items[$i]->state == 0): ?>
-						<span class="label label-warning">Unpublished</span>
+	<table class="category table table-striped table-bordered table-hover">
+		<?php if($this->params->get('show_headings')): ?>
+		<thead>
+			<tr>
+				<th id="categorylist_header_title">
+					<?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?>
+				</th>
+				<?php if ($date = $this->params->get('list_show_date')) : ?>
+					<th id="categorylist_header_date">
+						<?php if ($date == "created") : ?>
+							<?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.created', $listDirn, $listOrder); ?>
+						<?php elseif ($date == "modified") : ?>
+							<?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.modified', $listDirn, $listOrder); ?>
+						<?php elseif ($date == "published") : ?>
+							<?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.publish_up', $listDirn, $listOrder); ?>
+						<?php endif; ?>
+					</th>
+				<?php endif; ?>
+				<?php if ($this->params->get('list_show_author')) : ?>
+					<th id="categorylist_header_author">
+						<?php echo JHtml::_('grid.sort', 'JAUTHOR', 'author', $listDirn, $listOrder); ?>
+					</th>
+				<?php endif; ?>
+				<?php if ($this->params->get('list_show_hits')) : ?>
+					<th id="categorylist_header_hits">
+						<?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?>
+					</th>
+				<?php endif; ?>
+				<?php if ($isEditable): ?>
+					<th id="categorylist_header_edit"><?php echo JText::_('COM_CONTENT_EDIT_ITEM'); ?></th>
+				<?php endif; ?>
+			</tr>
+		</thead>
+		<?php endif; ?>
+		<tbody>
+			<?php foreach ($this->items as $i => $article) : ?>
+				<?php if ($this->items[$i]->state == 0) : ?>
+				 <tr class="system-unpublished cat-list-row<?php echo $i % 2; ?>">
+				<?php else: ?>
+				<tr class="cat-list-row<?php echo $i % 2; ?>" >
+				<?php endif; ?>
+					<td headers="categorylist_header_title" class="list-title">
+						<?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?>
+							<a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid)); ?>">
+								<?php echo $this->escape($article->title); ?>
+							</a>
+						<?php else: ?>
+							<?php
+							echo $this->escape($article->title).' : ';
+							$menu		= JFactory::getApplication()->getMenu();
+							$active		= $menu->getActive();
+							$itemId		= $active->id;
+							$link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$itemId);
+							$returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($article->slug));
+							$fullURL = new JURI($link);
+							$fullURL->setVar('return', base64_encode($returnURL));
+							?>
+							<a href="<?php echo $fullURL; ?>" class="register">
+								<?php echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); ?>
+							</a>
+						<?php endif; ?>
+						<?php if($article->state == 0): ?>
+							<span class="list-published label label-warning">
+								<?php echo JText::_('JUNPUBLISHED'); ?>
+							</span>
+						<?php endif; ?>
+					</td>
+					<?php if ($this->params->get('list_show_date')) : ?>
+						<td headers="categorylist_header_date" class="list-date small">
+							<?php
+							echo JHtml::_(
+								'date', $article->displayDate,
+								$this->escape($this->params->get('date_format', JText::_('DATE_FORMAT_LC3')))
+							); ?>
+						</td>
 					<?php endif; ?>
-					<br />
-
-						<?php if ($this->params->get('list_show_author', 1)) : ?>
-						<small class="list-author">
+					<?php if ($this->params->get('list_show_author', 1)) : ?>
+						<td headers="categorylist_header_author" class="list-author">
 							<?php if(!empty($article->author) || !empty($article->created_by_alias)) : ?>
 								<?php $author = $article->author ?>
 								<?php $author = ($article->created_by_alias ? $article->created_by_alias : $author);?>
@@ -98,38 +160,26 @@
 									<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
 								<?php endif; ?>
 							<?php endif; ?>
-						</small>
-						<?php endif; ?>
-
-					<?php if ($this->params->get('list_show_date')) : ?>
-					<span class="list-date small pull-right">
-						<?php
-						echo JHtml::_(
-							'date', $article->displayDate,
-							$this->escape($this->params->get('date_format', JText::_('DATE_FORMAT_LC3')))
-						); ?>
-					</span>
+						</td>
 					<?php endif; ?>
-
-				<?php else : // Show unauth links. ?>
-					<span>
-						<?php
-							echo $this->escape($article->title).' : ';
-							$menu		= JFactory::getApplication()->getMenu();
-							$active		= $menu->getActive();
-							$itemId		= $active->id;
-							$link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$itemId);
-							$returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($article->slug));
-							$fullURL = new JURI($link);
-							$fullURL->setVar('return', base64_encode($returnURL));
-						?>
-						<a href="<?php echo $fullURL; ?>" class="register">
-							<?php echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); ?></a>
-					</span>
-				<?php endif; ?>
-				</li>
-		<?php endforeach; ?>
-	</ul>
+					<?php if ($this->params->get('list_show_hits', 1)) : ?>
+						<td headers="categorylist_header_hits" class="list-hits">
+							<span class="badge badge-info">
+								<?php echo JText::sprintf('JGLOBAL_HITS_COUNT', $article->hits); ?>
+							</span>
+						</td>
+					<?php endif; ?>
+					<?php if ($isEditable): ?>
+						<td headers="categorylist_header_edit" class="list-edit">
+							<?php if ($article->params->get('access-edit')) : ?>
+								<?php echo JHtml::_('icon.edit', $article, $params); ?>
+							<?php endif; ?>
+						</td>
+					<?php endif; ?>
+				</tr>
+			<?php endforeach; ?>
+		</tbody>
+	</table>
 <?php endif; ?>
 
 <?php // Code to add a link to submit an article. ?>
diff --git a/components/com_content/views/category/tmpl/default_children.php b/components/com_content/views/category/tmpl/default_children.php
index 1e7a43863883..fc2bd3c95cdb 100644
--- a/components/com_content/views/category/tmpl/default_children.php
+++ b/components/com_content/views/category/tmpl/default_children.php
@@ -10,6 +10,8 @@
 defined('_JEXEC') or die;
 $class = ' class="first"';
 
+$lang	= JFactory::getLanguage();
+
 JHtml::_('bootstrap.tooltip');
 ?>
 
@@ -24,25 +26,39 @@
 
 		<div<?php echo $class; ?>>
 			<?php $class = ''; ?>
+			<?php if ($lang->isRTL()) : ?>
+			<h3 class="page-header item-title">
+				<?php if ( $this->params->get('show_cat_num_articles', 1)) : ?>
+					<span class="badge badge-info tip hasTooltip" title="<?php echo JText::_('COM_CONTENT_NUM_ITEMS'); ?>">
+						<?php echo $child->getNumItems(true); ?>
+					</span>
+				<?php endif; ?>
+				<a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>">
+				<?php echo $this->escape($child->title); ?></a>
+
+				<?php if (count($child->getChildren()) > 0) : ?>
+					<a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a>
+				<?php endif;?>
+			<?php else : ?>
 			<h3 class="page-header item-title"><a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>">
 				<?php echo $this->escape($child->title); ?></a>
 				<?php if ( $this->params->get('show_cat_num_articles', 1)) : ?>
-				<span class="badge badge-info tip hasTooltip" title="<?php echo JText::_('COM_CONTENT_NUM_ITEMS'); ?>">
-					<?php echo $child->getNumItems(true); ?>
-				</span>
+					<span class="badge badge-info tip hasTooltip" title="<?php echo JText::_('COM_CONTENT_NUM_ITEMS'); ?>">
+						<?php echo $child->getNumItems(true); ?>
+					</span>
 				<?php endif; ?>
 
 				<?php if (count($child->getChildren()) > 0) : ?>
-				<a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><i class="icon-plus"></i></a>
+					<a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a>
+				<?php endif;?>
 			<?php endif;?>
-
 			</h3>
 			<?php if ($this->params->get('show_subcat_desc') == 1) :?>
-			<?php if ($child->description) : ?>
-				<div class="category-desc">
-					<?php echo JHtml::_('content.prepare', $child->description, '', 'com_content.category'); ?>
-				</div>
-			<?php endif; ?>
+				<?php if ($child->description) : ?>
+					<div class="category-desc">
+						<?php echo JHtml::_('content.prepare', $child->description, '', 'com_content.category'); ?>
+					</div>
+				<?php endif; ?>
 			<?php endif; ?>
 
 			<?php if (count($child->getChildren()) > 0) :?>
@@ -60,7 +76,7 @@
 			</div>
 			<?php endif; ?>
 
-			</div>
+		</div>
 		<?php endif; ?>
 	<?php endforeach; ?>
 <?php endif; ?>
diff --git a/components/com_content/views/category/view.html.php b/components/com_content/views/category/view.html.php
index 4d2e91ee0732..5f0c8db3c8a9 100644
--- a/components/com_content/views/category/view.html.php
+++ b/components/com_content/views/category/view.html.php
@@ -101,15 +101,25 @@ public function display($tpl = null)
 
 			$dispatcher = JEventDispatcher::getInstance();
 
-			$item->introtext = JHtml::_('content.prepare', $item->introtext, '', 'com_content.category');
+			// Old plugins: Ensure that text property is available
+			if (!isset($item->text))
+			{
+				$item->text = $item->introtext;
+			}
+
+			JPluginHelper::importPlugin('content');
+			$results = $dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$this->params, 0));
+
+			// Old plugins: Use processed text as introtext
+			$item->introtext = $item->text;
 
-			$results = $dispatcher->trigger('onContentAfterTitle', array('com_content.article', &$item, &$item->params, 0));
+			$results = $dispatcher->trigger('onContentAfterTitle', array('com_content.category', &$item, &$item->params, 0));
 			$item->event->afterDisplayTitle = trim(implode("\n", $results));
 
-			$results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.article', &$item, &$item->params, 0));
+			$results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.category', &$item, &$item->params, 0));
 			$item->event->beforeDisplayContent = trim(implode("\n", $results));
 
-			$results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.article', &$item, &$item->params, 0));
+			$results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.category', &$item, &$item->params, 0));
 			$item->event->afterDisplayContent = trim(implode("\n", $results));
 		}
 
diff --git a/components/com_content/views/featured/tmpl/default_item.php b/components/com_content/views/featured/tmpl/default_item.php
index 49e2e0120e93..1d3e6ef4c26a 100644
--- a/components/com_content/views/featured/tmpl/default_item.php
+++ b/components/com_content/views/featured/tmpl/default_item.php
@@ -17,21 +17,6 @@
 ?>
 <?php if ($this->item->state == 0) : ?>
 <div class="system-unpublished">
-	<?php endif; ?>
-	<?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?>
-	<div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <i class="icon-cog"></i><span class="caret"></span> </a>
-		<ul class="dropdown-menu">
-			<?php if ($params->get('show_print_icon')) : ?>
-				<li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li>
-			<?php endif; ?>
-			<?php if ($params->get('show_email_icon')) : ?>
-				<li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li>
-			<?php endif; ?>
-			<?php if ($canEdit) : ?>
-				<li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li>
-			<?php endif; ?>
-		</ul>
-	</div>
 	<?php endif; ?>
 	<?php if ($params->get('show_title')) : ?>
 		<h2 class="item-title">
@@ -45,34 +30,50 @@
 	<?php if ($this->item->state == 0): ?>
 		<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
 	<?php endif; ?>
-	<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
-		<small class="createdby">
-		<?php $author = $this->item->author; ?>
-		<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?>
-		<?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?>
-			<?php
-			echo JText::sprintf('COM_CONTENT_WRITTEN_BY',
-				JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author)
-			); ?>
-			<?php else :?>
-				<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
-			<?php endif; ?>
-		</small>
+
+
+<?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?>
+<div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#" role="button"> <span class="icon-cog"></span><span class="caret"></span> </a>
+	<ul class="dropdown-menu">
+		<?php if ($params->get('show_print_icon')) : ?>
+		<li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li>
+		<?php endif; ?>
+		<?php if ($params->get('show_email_icon')) : ?>
+		<li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li>
+		<?php endif; ?>
+		<?php if ($canEdit) : ?>
+		<li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li>
+		<?php endif; ?>
+	</ul>
+</div>
 	<?php endif; ?>
 
 	<?php // Todo Not that elegant would be nice to group the params ?>
 	<?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date')
-		|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')); ?>
+		|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') ); ?>
 	<?php if ($useDefList && ($info == 0 ||  $info == 2)) : ?>
-		<div class="article-info muted">
-			<dl class="article-info">
-			<dt class="article-info-term">
+	<dl class="article-info  muted">
+				<dt class="article-info-term">
 				<?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?>
 			</dt>
 
+				<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
+				<dd class="createdby">
+					<?php $author = $this->item->author; ?>
+					<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?>
+					<?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?>
+					<?php
+					echo JText::sprintf('COM_CONTENT_WRITTEN_BY',
+						JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author)
+					); ?>
+					<?php else :?>
+					<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+					<?php endif; ?>
+				</dd>
+				<?php endif; ?>
+
 			<?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?>
-				<dd>
-					<div class="parent-category-name">
+				<dd class="parent-category-name">
 						<?php $title = $this->escape($this->item->parent_title);
 						$url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?>
 						<?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?>
@@ -80,12 +81,11 @@
 						<?php else : ?>
 							<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
 						<?php endif; ?>
-					</div>
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_category')) : ?>
-				<dd>
-					<div class="category-name">
+				<dd class="category-name">
+
 						<?php $title = $this->escape($this->item->category_title);
 						$url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)).'">'.$title.'</a>';?>
 						<?php if ($params->get('link_category') && $this->item->catslug) : ?>
@@ -93,44 +93,39 @@
 						<?php else : ?>
 							<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
 						<?php endif; ?>
-					</div>
+
 				</dd>
 			<?php endif; ?>
 
 			<?php if ($params->get('show_publish_date')) : ?>
-				<dd>
-					<div class="published">
-						<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="published">
+					<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
 				</dd>
 			<?php endif; ?>
 
 			<?php if ($info == 0): ?>
 				<?php if ($params->get('show_modify_date')) : ?>
-					<dd>
-						<div class="modified">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd class="modified">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_create_date')) : ?>
-					<dd>
-						<div class="create">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd class="create">
+						<span class="icon-calendar"></span>
+						<?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?>
 					</dd>
 				<?php endif; ?>
 
 				<?php if ($params->get('show_hits')) : ?>
-					<dd>
-						<div class="hits">
-							<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
-						</div>
+					<dd class="hits">
+						<span class="icon-eye-open"></span>
+						<?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
 					</dd>
 				<?php endif; ?>
 			<?php endif; ?>
-			</dl>
-		</div>
+	</dl>
+
 	<?php endif; ?>
 	<?php if (isset($images->image_intro) && !empty($images->image_intro)) : ?>
 		<?php $imgfloat = (empty($images->float_intro)) ? $params->get('float_intro') : $images->float_intro; ?>
@@ -145,16 +140,29 @@
 	<?php endif; ?>
 	<?php echo $this->item->event->beforeDisplayContent; ?> <?php echo $this->item->introtext; ?>
 	<?php if ($useDefList && ($info == 1 ||  $info == 2)) : ?>
-		<div class="article-info muted">
-			<dl class="article-info">
+
+			<dl class="article-info muted">
 			<dt class="article-info-term">
 				<?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?>
 			</dt>
-
 			<?php if ($info == 1): ?>
+		<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
+			<dd class="createdby">
+				<?php $author = $this->item->author; ?>
+				<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?>
+				<?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?>
+				<?php
+				echo JText::sprintf('COM_CONTENT_WRITTEN_BY',
+					JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author)
+				); ?>
+				<?php else :?>
+				<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
+				<?php endif; ?>
+			</dd>
+			<?php endif; ?>
 				<?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?>
-					<dd>
-						<div class="parent-category-name">
+					<dd  class="parent-category-name">
+
 							<?php	$title = $this->escape($this->item->parent_title);
 							$url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?>
 							<?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?>
@@ -162,54 +170,52 @@
 							<?php else : ?>
 								<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
 							<?php endif; ?>
-						</div>
+
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_category')) : ?>
-					<dd>
-						<div class="category-name">
-							<?php 	$title = $this->escape($this->item->category_title);
+					<dd  class="category-name">
+					<?php 	$title = $this->escape($this->item->category_title);
 							$url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)).'">'.$title.'</a>';?>
 							<?php if ($params->get('link_category') && $this->item->catslug) : ?>
 								<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
 							<?php else : ?>
 								<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
 							<?php endif; ?>
-						</div>
+
 					</dd>
 				<?php endif; ?>
 				<?php if ($params->get('show_publish_date')) : ?>
-					<dd>
-						<div class="published">
-							<i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
-						</div>
+					<dd class="published">
+
+							<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?>
+
 					</dd>
 				<?php endif; ?>
 			<?php endif; ?>
 
 			<?php if ($params->get('show_create_date')) : ?>
-				<dd>
-					<div class="create"><i class="icon-calendar">
-						</i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="create">
+				<span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
+
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_modify_date')) : ?>
-				<dd>
-					<div class="modified"><i class="icon-calendar">
-						</i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
-					</div>
+				<dd class="modified">
+					<span class="icon-calendar"></span>
+					<?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?>
+
 				</dd>
 			<?php endif; ?>
 			<?php if ($params->get('show_hits')) : ?>
-				<dd>
-					<div class="hits">
-						<i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
-					</div>
+				<dd class="hits">
+
+						<span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
+
 				</dd>
 			<?php endif; ?>
 			</dl>
-		</div>
+
 	<?php endif; ?>
 	<?php if ($params->get('show_readmore') && $this->item->readmore) :
 	if ($params->get('access-view')) :
@@ -224,7 +230,7 @@
 		$link->setVar('return', base64_encode($returnURL));
 	endif;
 	?>
-	<a class="btn" href="<?php echo $link; ?>"> <i class="icon-chevron-right"></i>
+	<p class="readmore"><a class="btn" href="<?php echo $link; ?>"> <span class="icon-chevron-right"></span>
 	<?php if (!$params->get('access-view')) :
 			echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
 		elseif ($readmore = $this->item->alternative_readmore) :
@@ -238,7 +244,7 @@
 			echo JText::_('COM_CONTENT_READ_MORE');
 			echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
 		endif; ?>
-	</a>
+	</a></p>
 	<?php endif; ?>
 	<?php if ($this->item->state == 0) : ?>
 </div>
diff --git a/components/com_content/views/featured/tmpl/default_links.php b/components/com_content/views/featured/tmpl/default_links.php
index ab2f94b592f8..abdb3f0cfd00 100644
--- a/components/com_content/views/featured/tmpl/default_links.php
+++ b/components/com_content/views/featured/tmpl/default_links.php
@@ -9,11 +9,11 @@
 
 defined('_JEXEC') or die;
 ?>
-<ul class="nav nav-tabs nav-stacked">
+<ol class="nav nav-tabs nav-stacked">
 <?php foreach ($this->link_items as &$item) : ?>
 	<li>
 		<a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug)); ?>">
 			<?php echo $item->title; ?></a>
 	</li>
 <?php endforeach; ?>
-</ul>
+</ol>
diff --git a/components/com_content/views/featured/view.html.php b/components/com_content/views/featured/view.html.php
index 50b4fece0acd..395654afec03 100644
--- a/components/com_content/views/featured/view.html.php
+++ b/components/com_content/views/featured/view.html.php
@@ -80,15 +80,24 @@ public function display($tpl = null)
 
 			$dispatcher = JEventDispatcher::getInstance();
 
-			$item->introtext = JHtml::_('content.prepare', $item->introtext, '', 'com_content.featured');
+			// Old plugins: Ensure that text property is available
+			if (!isset($item->text))
+			{
+				$item->text = $item->introtext;
+			}
+			JPluginHelper::importPlugin('content');
+			$results = $dispatcher->trigger('onContentPrepare', array ('com_content.featured', &$item, &$this->params, 0));
+
+			// Old plugins: Use processed text as introtext
+			$item->introtext = $item->text;
 
-			$results = $dispatcher->trigger('onContentAfterTitle', array('com_content.article', &$item, &$item->params, 0));
+			$results = $dispatcher->trigger('onContentAfterTitle', array('com_content.featured', &$item, &$item->params, 0));
 			$item->event->afterDisplayTitle = trim(implode("\n", $results));
 
-			$results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.article', &$item, &$item->params, 0));
+			$results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.featured', &$item, &$item->params, 0));
 			$item->event->beforeDisplayContent = trim(implode("\n", $results));
 
-			$results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.article', &$item, &$item->params, 0));
+			$results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.featured', &$item, &$item->params, 0));
 			$item->event->afterDisplayContent = trim(implode("\n", $results));
 		}
 
diff --git a/components/com_content/views/form/tmpl/edit.php b/components/com_content/views/form/tmpl/edit.php
index ce758093d45a..c4e9e06b4dcb 100644
--- a/components/com_content/views/form/tmpl/edit.php
+++ b/components/com_content/views/form/tmpl/edit.php
@@ -49,12 +49,12 @@
 		<div class="btn-toolbar">
 			<div class="btn-group">
 				<button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('article.save')">
-					<i class="icon-ok"></i> <?php echo JText::_('JSAVE') ?>
+					<span class="icon-ok"></span>&#160;<?php echo JText::_('JSAVE') ?>
 				</button>
 			</div>
 			<div class="btn-group">
 				<button type="button" class="btn" onclick="Joomla.submitbutton('article.cancel')">
-					<i class="icon-cancel"></i> <?php echo JText::_('JCANCEL') ?>
+					<span class="icon-cancel"></span>&#160;<?php echo JText::_('JCANCEL') ?>
 				</button>
 			</div>
 		</div>
diff --git a/components/com_finder/views/search/tmpl/default_form.php b/components/com_finder/views/search/tmpl/default_form.php
index 62a76ae8a8e2..c4279779716a 100644
--- a/components/com_finder/views/search/tmpl/default_form.php
+++ b/components/com_finder/views/search/tmpl/default_form.php
@@ -80,12 +80,12 @@
 		</label>
 		<input type="text" name="q" id="q" size="30" value="<?php echo $this->escape($this->query->input); ?>" class="inputbox" />
 		<?php if ($this->escape($this->query->input) != '' || $this->params->get('allow_empty_search')):?>
-			<button name="Search" type="submit" class="btn btn-primary"><i class="icon-search icon-white"></i> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button>
+			<button name="Search" type="submit" class="btn btn-primary"><span class="icon-search icon-white"></span> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button>
 		<?php else: ?>
-			<button name="Search" type="submit" class="btn btn-primary disabled"><i class="icon-search icon-white"></i> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button>
+			<button name="Search" type="submit" class="btn btn-primary disabled"><span class="icon-search icon-white"></span> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button>
 		<?php endif; ?>
 		<?php if ($this->params->get('show_advanced', 1)): ?>
-			<a href="#advancedSearch" data-toggle="collapse" class="btn"><i class="icon-list"></i> <?php echo JText::_('COM_FINDER_ADVANCED_SEARCH_TOGGLE'); ?></a>
+			<a href="#advancedSearch" data-toggle="collapse" class="btn"><span class="icon-list"></span> <?php echo JText::_('COM_FINDER_ADVANCED_SEARCH_TOGGLE'); ?></a>
 		<?php endif; ?>
 </fieldset>
 
diff --git a/components/com_newsfeeds/models/categories.php b/components/com_newsfeeds/models/categories.php
index fd3819bd5345..42f344c48f54 100644
--- a/components/com_newsfeeds/models/categories.php
+++ b/components/com_newsfeeds/models/categories.php
@@ -16,7 +16,7 @@
  * @subpackage  com_newsfeeds
  * @since       1.6
  */
-class NewsfeedsModelCategories extends JModelLegacy
+class NewsfeedsModelCategories extends JModelList
 {
 	/**
 	 * Model context string.
@@ -43,7 +43,7 @@ class NewsfeedsModelCategories extends JModelLegacy
 	 *
 	 * @since	1.6
 	 */
-	protected function populateState()
+	protected function populateState($ordering = null, $direction = null)
 	{
 		$app = JFactory::getApplication();
 		$this->setState('filter.extension', $this->_extension);
diff --git a/components/com_newsfeeds/models/category.php b/components/com_newsfeeds/models/category.php
index 6c3a36444c34..6c37373cd829 100644
--- a/components/com_newsfeeds/models/category.php
+++ b/components/com_newsfeeds/models/category.php
@@ -137,6 +137,14 @@ protected function getListQuery()
 			$query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')');
 		}
 
+		// Filter by search in title
+		$search = $this->getState('list.filter');
+		if (!empty($search))
+		{
+			$search = $db->Quote('%' . $db->escape($search, true) . '%');
+			$query->where('(a.name LIKE ' . $search . ')');
+		}
+
 		// Filter by language
 		if ($this->getState('filter.language')) {
 			$query->where('a.language in ('.$db->Quote(JFactory::getLanguage()->getTag()).','.$db->Quote('*').')');
@@ -167,6 +175,9 @@ protected function populateState($ordering = null, $direction = null)
 		$limitstart = $app->input->get('limitstart', 0, 'uint');
 		$this->setState('list.start', $limitstart);
 
+		// Optional filter text
+		$this->setState('list.filter', $app->input->getString('filter-search'));
+
 		$orderCol	= $app->input->get('filter_order', 'ordering');
 		if (!in_array($orderCol, $this->filter_fields)) {
 			$orderCol = 'ordering';
diff --git a/components/com_newsfeeds/views/category/tmpl/default.xml b/components/com_newsfeeds/views/category/tmpl/default.xml
index 3a1ebc49d330..82b7208aa70d 100644
--- a/components/com_newsfeeds/views/category/tmpl/default.xml
+++ b/components/com_newsfeeds/views/category/tmpl/default.xml
@@ -107,6 +107,18 @@
 			<field name="spacer2" type="spacer" class="text"
 					label="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL"
 			/>
+			<field
+				name="filter_field"
+				type="list"
+				default=""
+				description="JGLOBAL_FILTER_FIELD_DESC"
+				label="JGLOBAL_FILTER_FIELD_LABEL"
+			>
+				<option value="">JGLOBAL_USE_GLOBAL</option>
+				<option value="hide">JHIDE</option>
+				<option value="1">JSHOW</option>
+			</field>
+
 			<field name="show_pagination_limit"
 				type="list"
 				label="JGLOBAL_DISPLAY_SELECT_LABEL"
diff --git a/components/com_newsfeeds/views/category/tmpl/default_items.php b/components/com_newsfeeds/views/category/tmpl/default_items.php
index ce4fdf4ea941..82dd027715e0 100644
--- a/components/com_newsfeeds/views/category/tmpl/default_items.php
+++ b/components/com_newsfeeds/views/category/tmpl/default_items.php
@@ -20,20 +20,25 @@
 	<p> <?php echo JText::_('COM_NEWSFEEDS_NO_ARTICLES'); ?></p>
 <?php else : ?>
 
-	<form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
+<form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
+	<?php if ($this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?>
+	<fieldset class="filters btn-toolbar">
 		<?php if ($this->params->get('filter_field') != 'hide') :?>
 			<div class="btn-group">
-				<label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_NEWSFEEDS_'.$this->params->get('filter_field').'_FILTER_LABEL').'&#160;'; ?></label>
+				<label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_NEWSFEEDS_FILTER_LABEL').'&#160;'; ?></label>
 				<input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_NEWSFEEDS_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_NEWSFEEDS_FILTER_SEARCH_DESC'); ?>" />
 			</div>
 		<?php endif; ?>
 		<?php if ($this->params->get('show_pagination_limit')) : ?>
-			<div class="display-limit">
-				<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>&#160;
+			<div class="btn-group pull-right">
+				<label for="limit" class="element-invisible">
+					<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>
+				</label>
 				<?php echo $this->pagination->getLimitBox(); ?>
 			</div>
 		<?php endif; ?>
-
+	</fieldset>
+	<?php endif; ?>
 		<ul class="category list-striped list-condensed">
 			<?php foreach ($this->items as $i => $item) : ?>
 				<?php if ($this->items[$i]->published == 0) : ?>
@@ -56,7 +61,7 @@
 					<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
 				<?php endif; ?>
 				<br />
-				<?php  if ($this->params->get('show_link')) : ?>					
+				<?php  if ($this->params->get('show_link')) : ?>
 					<span class="list pull-left">
 							<a href="<?php echo $item->link; ?>"><?php echo $item->link; ?></a>
 					</span>
diff --git a/components/com_search/views/search/tmpl/default_form.php b/components/com_search/views/search/tmpl/default_form.php
index 295a85fd6b81..68d66ca59aac 100644
--- a/components/com_search/views/search/tmpl/default_form.php
+++ b/components/com_search/views/search/tmpl/default_form.php
@@ -21,7 +21,7 @@
 			<input type="text" name="searchword" placeholder="<?php echo JText::_('COM_SEARCH_SEARCH_KEYWORD'); ?>" id="search-searchword" size="30" maxlength="<?php echo $upper_limit; ?>" value="<?php echo $this->escape($this->origkeyword); ?>" class="inputbox" />
 		</div>
 		<div class="btn-group pull-left">
-			<button name="Search" onclick="this.form.submit()" class="btn hasTooltip" title="<?php echo JText::_('COM_SEARCH_SEARCH');?>"><i class="icon-search"></i></button>
+			<button name="Search" onclick="this.form.submit()" class="btn hasTooltip" title="<?php echo JText::_('COM_SEARCH_SEARCH');?>"><span class="icon-search"></span></button>
 		</div>
 		<input type="hidden" name="task" value="search" />
 		<div class="clearfix"></div>
diff --git a/components/com_users/models/registration.php b/components/com_users/models/registration.php
index 563b3ff674ab..f2d81bc320e3 100644
--- a/components/com_users/models/registration.php
+++ b/components/com_users/models/registration.php
@@ -428,12 +428,26 @@ public function register($temp)
 				$data['sitename']
 			);
 
-			$emailBody = JText::sprintf(
-				'COM_USERS_EMAIL_REGISTERED_BODY',
-				$data['name'],
-				$data['sitename'],
-				$data['siteurl']
-			);
+			if ($sendpassword)
+			{
+				$emailBody = JText::sprintf(
+					'COM_USERS_EMAIL_REGISTERED_BODY',
+					$data['name'],
+					$data['sitename'],
+					$data['siteurl'],
+					$data['username'],
+					$data['password_clear']
+				);
+			}
+			else
+			{
+				$emailBody = JText::sprintf(
+					'COM_USERS_EMAIL_REGISTERED_BODY',
+					$data['name'],
+					$data['sitename'],
+					$data['siteurl']
+				);
+			}
 		}
 
 		// Send the registration email.
diff --git a/components/com_users/views/login/tmpl/default_logout.php b/components/com_users/views/login/tmpl/default_logout.php
index 9a3351bc6e39..abba05e12957 100644
--- a/components/com_users/views/login/tmpl/default_logout.php
+++ b/components/com_users/views/login/tmpl/default_logout.php
@@ -37,7 +37,7 @@
 	<form action="<?php echo JRoute::_('index.php?option=com_users&task=user.logout'); ?>" method="post" class="form-horizontal">
 		<div class="control-group">
 			<div class="controls">
-				<button type="submit" class="btn btn-primary"><i class="icon-arrow-left icon-white"></i> <?php echo JText::_('JLOGOUT'); ?></button>
+				<button type="submit" class="btn btn-primary"><span class="icon-arrow-left icon-white"></span> <?php echo JText::_('JLOGOUT'); ?></button>
 			</div>
 		</div>
 		<input type="hidden" name="return" value="<?php echo base64_encode($this->params->get('logout_redirect_url', $this->form->getValue('return'))); ?>" />
diff --git a/components/com_users/views/profile/tmpl/default.php b/components/com_users/views/profile/tmpl/default.php
index 0af3ad6ab106..5b55b0e26509 100644
--- a/components/com_users/views/profile/tmpl/default.php
+++ b/components/com_users/views/profile/tmpl/default.php
@@ -15,7 +15,7 @@
 <ul class="btn-toolbar pull-right">
 	<li class="btn-group">
 		<a class="btn" href="<?php echo JRoute::_('index.php?option=com_users&task=profile.edit&user_id='.(int) $this->data->id);?>">
-			<i class="icon-user"></i> <?php echo JText::_('COM_USERS_Edit_Profile'); ?></a>
+			<span class="icon-user"></span> <?php echo JText::_('COM_USERS_EDIT_PROFILE'); ?></a>
 	</li>
 </ul>
 <?php endif; ?>
diff --git a/components/com_weblinks/models/categories.php b/components/com_weblinks/models/categories.php
index 6b50980ae654..65c1508e7ce3 100644
--- a/components/com_weblinks/models/categories.php
+++ b/components/com_weblinks/models/categories.php
@@ -16,7 +16,7 @@
  * @subpackage  com_weblinks
  * @since       1.6
  */
-class WeblinksModelCategories extends JModelLegacy
+class WeblinksModelCategories extends JModelList
 {
 	/**
 	 * Model context string.
@@ -43,7 +43,7 @@ class WeblinksModelCategories extends JModelLegacy
 	 *
 	 * @since	1.6
 	 */
-	protected function populateState()
+	protected function populateState($ordering = null, $direction = null)
 	{
 		$app = JFactory::getApplication();
 		$this->setState('filter.extension', $this->_extension);
diff --git a/components/com_weblinks/models/category.php b/components/com_weblinks/models/category.php
index a535a7eb1f46..61cb309cc79e 100644
--- a/components/com_weblinks/models/category.php
+++ b/components/com_weblinks/models/category.php
@@ -156,6 +156,14 @@ protected function getListQuery()
 			$query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')');
 		}
 
+		// Filter by search in title
+		$search = $this->getState('list.filter');
+		if (!empty($search))
+		{
+			$search = $db->Quote('%' . $db->escape($search, true) . '%');
+			$query->where('(a.title LIKE ' . $search . ')');
+		}
+
 		// Add the list ordering clause.
 		$query->order($db->escape($this->getState('list.ordering', 'a.ordering')).' '.$db->escape($this->getState('list.direction', 'ASC')));
 		return $query;
@@ -180,6 +188,9 @@ protected function populateState($ordering = null, $direction = null)
 		$limitstart = $app->input->get('limitstart', 0, 'uint');
 		$this->setState('list.start', $limitstart);
 
+		// Optional filter text
+		$this->setState('list.filter', $app->input->getString('filter-search'));
+
 		$orderCol = $app->input->get('filter_order', 'ordering');
 		if (!in_array($orderCol, $this->filter_fields)) {
 			$orderCol = 'ordering';
diff --git a/components/com_weblinks/views/category/tmpl/default.xml b/components/com_weblinks/views/category/tmpl/default.xml
index df97027fbcbb..0a2b4398c0f8 100644
--- a/components/com_weblinks/views/category/tmpl/default.xml
+++ b/components/com_weblinks/views/category/tmpl/default.xml
@@ -106,6 +106,18 @@
 					label="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL"
 			/>
 
+			<field
+				name="filter_field"
+				type="list"
+				default=""
+				description="JGLOBAL_FILTER_FIELD_DESC"
+				label="JGLOBAL_FILTER_FIELD_LABEL"
+			>
+				<option value="">JGLOBAL_USE_GLOBAL</option>
+				<option value="hide">JHIDE</option>
+				<option value="1">JSHOW</option>
+			</field>
+
 			<field	name="show_pagination_limit" type="list"
 			label="JGLOBAL_DISPLAY_SELECT_LABEL"
 			description="JGLOBAL_DISPLAY_SELECT_DESC">
diff --git a/components/com_weblinks/views/category/tmpl/default_items.php b/components/com_weblinks/views/category/tmpl/default_items.php
index 202c619ebc1a..f0f3ba980a48 100644
--- a/components/com_weblinks/views/category/tmpl/default_items.php
+++ b/components/com_weblinks/views/category/tmpl/default_items.php
@@ -33,23 +33,25 @@
 <?php else : ?>
 
 <form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
+	<?php if ($this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?>
+	<fieldset class="filters btn-toolbar">
 		<?php if ($this->params->get('filter_field') != 'hide') :?>
 			<div class="btn-group">
-				<label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_WEBLINKS_'.$this->params->get('filter_field').'_FILTER_LABEL').'&#160;'; ?></label>
+				<label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_WEBLINKS_FILTER_LABEL').'&#160;'; ?></label>
 				<input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_WEBLINKS_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_WEBLINKS_FILTER_SEARCH_DESC'); ?>" />
 			</div>
 		<?php endif; ?>
 
 		<?php if ($this->params->get('show_pagination_limit')) : ?>
-			<div class="display-limit">
-				<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>&#160;
+			<div class="btn-group pull-right">
+				<label for="limit" class="element-invisible">
+					<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>
+				</label>
 				<?php echo $this->pagination->getLimitBox(); ?>
 			</div>
 		<?php endif; ?>
-
-		<?php if ($this->params->get('filter_field') != 'hide') :?>
-			</fieldset>
-		<?php endif; ?>
+	</fieldset>
+	<?php endif; ?>
 		<ul class="category list-striped list-condensed">
 
 			<?php foreach ($this->items as $i => $item) : ?>
diff --git a/components/com_weblinks/views/form/tmpl/edit.php b/components/com_weblinks/views/form/tmpl/edit.php
index 3820ec08a41a..98e72d2bcbba 100644
--- a/components/com_weblinks/views/form/tmpl/edit.php
+++ b/components/com_weblinks/views/form/tmpl/edit.php
@@ -35,12 +35,12 @@
 		<div class="btn-toolbar">
 			<div class="btn-group">
 				<button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('weblink.save')">
-					<i class="icon-ok"></i> <?php echo JText::_('JSAVE') ?>
+					<span class="icon-ok"></span> <?php echo JText::_('JSAVE') ?>
 				</button>
 			</div>
 			<div class="btn-group">
 				<button type="button" class="btn" onclick="Joomla.submitbutton('weblink.cancel')">
-					<i class="icon-cancel"></i> <?php echo JText::_('JCANCEL') ?>
+					<span class="icon-cancel"></span> <?php echo JText::_('JCANCEL') ?>
 				</button>
 			</div>
 		</div>
diff --git a/includes/application.php b/includes/application.php
index f6423a8beb83..e783f5ff6b47 100644
--- a/includes/application.php
+++ b/includes/application.php
@@ -483,10 +483,18 @@ public function getTemplate($params = false)
 		// Fallback template
 		if (!file_exists(JPATH_THEMES . '/' . $template->template . '/index.php')) {
 			JError::raiseWarning(0, JText::_('JERROR_ALERTNOTEMPLATE'));
-			$template->template = 'beez3';
 			if (!file_exists(JPATH_THEMES . '/beez3/index.php')) {
-				$template->template = '';
+				$error = JText::sprintf('JERROR_COULD_NOT_FIND_TEMPLATE', $template->template);
+				// Load the catch-all error page
+				if (!file_exists(JPATH_SITE . '/includes/error.php')) {
+					throw new InvalidArgumentException($error);
+				}
+				else {
+					require(JPATH_SITE  . '/includes/error.php');
+					JFactory::getApplication()->close();
+				}
 			}
+			else $template->template = 'beez3';
 		}
 
 		// Cache the result
diff --git a/includes/error.php b/includes/error.php
new file mode 100644
index 000000000000..fb227dfa5c57
--- /dev/null
+++ b/includes/error.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * @package    Joomla.Administrator
+ *
+ * @copyright  Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license    GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+defined('_JEXEC') or die;
+
+$doc = JFactory::getDocument();
+?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $doc->getLanguage(); ?>" lang="<?php echo $doc->getLanguage(); ?>" dir="<?php echo $doc->getDirection(); ?>">
+	<head>
+		<title><?php echo JText::_('JERROR_AN_ERROR_HAS_OCCURRED'); ?></title>
+		<!-- Add Stylesheets -->
+		<link rel="stylesheet" href="media/system/css/system.css" type="text/css" />
+		<link rel="stylesheet" href="media/jui/css/bootstrap.css" type="text/css" />
+		<link rel="stylesheet" href="media/jui/css/bootstrap-extended.css" type="text/css" />
+		<link rel="stylesheet" href="media/jui/css/bootstrap-responsive.css" type="text/css" />
+		<style type="text/css">
+		.header {
+			background-color: #FFFFFF;
+			background-image: linear-gradient(#D9EFFA, #D9EFFA 25%, #FFFFFF);
+			background-repeat: no-repeat;
+			border-top: 3px solid #0088CC;
+			padding: 20px 0;
+			text-align: center;
+		}
+		</style>
+		<!--[if lt IE 9]>
+		<script src="media/jui/js/html5.js"></script>
+		<![endif]-->
+	</head>
+	<body>
+		<!-- Header -->
+		<div class="header">
+			<img src="media/jui/img/joomla.png" alt="Joomla" />
+			<hr />
+		</div>
+		<!-- Container -->
+		<div class="container">
+			<div id="system-message-container">
+				<div id="system-message">
+					<div class="alert alert-error">
+						<h3><?php echo $error; ?></h3>
+					</div>
+				</div>
+			</div>
+		</div>
+	</body>
+</html>
\ No newline at end of file
diff --git a/includes/framework.php b/includes/framework.php
index e9e439a0a85e..532f5bf278c7 100644
--- a/includes/framework.php
+++ b/includes/framework.php
@@ -38,7 +38,7 @@
 
 JError::setErrorHandling(E_NOTICE, 'message');
 JError::setErrorHandling(E_WARNING, 'message');
-JError::setErrorHandling(E_ERROR, 'message', array('JError', 'customErrorPage'));
+JError::setErrorHandling(E_ERROR, 'callback', array('JError', 'customErrorPage'));
 
 // Botstrap the CMS libraries.
 require_once JPATH_LIBRARIES.'/cms.php';
diff --git a/installation/CHANGELOG b/installation/CHANGELOG
index 6b226d87ca9e..916fa35e1844 100644
--- a/installation/CHANGELOG
+++ b/installation/CHANGELOG
@@ -26,6 +26,67 @@ $ -> Language fix or change
 - -> Removed
 ! -> Note
 
+10-Jan-2013 Jean-Marie Simonet
+ # [#29917] *Beez3 RTL wrong display of items in category list
+ # [#29904] *With plugin Language Filter enabled, user articles parameter in frontend shows all articles
+
+08-Jan-2013 Jean-Marie Simonet
+ # [#29914] *Login module wrong display in beez3 RTL
+ # [#29906] *Viewing Access Levels order numbering is not shown
+ 
+06-Jan-2013 Michael Babker
+ # [#27699] Only text gets passed to content events in blog view.  Thanks Peter
+
+05-Jan-2013 Jean-Marie Simonet
+ # [#29905] Issue 29895 broke weblinks categories. Thanks Mark
+ # [#29903] Fix a reference in jDatabaseDriver. Thanks Elin
+ # [#29842] Display error by the contactform with IE 8 and 9. Thanks Constantin.
+
+03-Jan-2013 Michael Babker
+ # [#29875] Protostar invalid class names for itemid, layout and task.  Thanks Cristina
+ # [#29895] Strict errors in categories models.  Thanks Elin
+ # [#29862] *Filter_field Option missing in category list layout for Contact, Newsfeeds, Weblinks.  Thanks JM
+ # [#29887] *Disable System redirect breaks 404.  Thanks Yannick
+
+03-Jan-2013 Mark Dexter
+ # [#29743] heading menu type renders bad html code. Thanks M Cedric Keiflin.
+ [#29865] JLayoutFile keeps rendering same layout. Thanks Yannick Gaultier.
+
+03-Jan-2013 Jean-Marie Simonet
+ # [#29836] *Weblinks, Newsfeeds, Contacts Search Filter (frontend). Thanks Glenn Arkell
+
+02-Jan-2013 Jean-Marie Simonet
+ # [#29870] *Beez3 wrong messages display
+ # [#29217] *Status column missing in weblinks mobile view. Thanks Tim
+ # [#29691] Smart Search autocomplete.js issue. Thanks Viet
+ # [#27903] invalid call to parent::getStoreId in getStoreId of NewsfeedsModelCategories (unused). Thanks Michael and Peter
+
+31-Dec-2012 Michael Babker
+ # [#29620] *Creating new position when editing module broken in master.  Thanks David.
+ # [#29363] Responsive layout during installation breaks.  Thanks David.
+
+27-Dec-2012 Michael Babker
+ + [#28616] Add French language stemmer to Smart Search.  Thanks Chris.
+
+26-Dec-2012 Jean-Marie Simonet
+ # [#29210] Help page restricted to small window at top of screen. Thanks Chris.
+ # [#29849] *RTL: Wrong display of Subcategories titles in Content Category List menu item
+ # [#29860] *Wrong display of Search and Clear buttons in Insert Article modal + RTL
+ # [#29838] the registration-mail does not contain username and password if activation is set to "none". Even if "send password" is set to yes. Thanks Yannick Spang
+ # [#29727] Pagebreak plugin generates same ID for tabs and slides. Thanks Dennis.
+
+25-Dec-2012 Jean-Marie Simonet
+ # [#29833] *Beez3 does not display Print, Mail, Edit, New icons Thanks Michael
+ # [#29834] *Beez3 edit article wrong display
+ # [#29824] Smart search saves * in language field. Thanks Elin
+
+24-Dec-2012 Jean-Marie Simonet
+ $ Adding Missing strings #29852 and +
+ $ Adding missing front-end strings
+
+21-Dec-2012 Jean-Marie Simonet
+ # [#29827] Semantic & Accessibility fixes frontend. Thanks Angie
+
 19-Dec-2012 Jean-Marie Simonet
  $+ Adding Catalan ca-ES installation files
 
@@ -192,7 +253,7 @@ $ -> Language fix or change
  # [#29519] *Edit Menu Item layout usability
  # [#29401] Repeated htmlspecialchars() Applied When Multiple Breadcrumbs Active. Thanks Peter and Roland
  $# [#29521] Missing lang string in installation + correcting wrong constant in InstallationModelDatabase
- # Category title display ommitted in Details column #29494 
+ # Category title display ommitted in Details column #29494
 
 17-Oct-2012 Jean-Marie Simonet
  # [#29470] *Hathor submenus broken. Thanks Yannick
@@ -245,7 +306,7 @@ $ -> Language fix or change
 06-Oct-2012 Jean-Marie Simonet
  # [#29262] Wrong file name in garbagecoro cli app
  # [#29446] One character too much in JFeedPerson
- 
+
 05-Oct-2012 Jean-Marie Simonet
  $ Updating pt-BR.ini
  # [#29387] unpublish button don't work. Thanks Roberto
diff --git a/installation/sql/mysql/joomla.sql b/installation/sql/mysql/joomla.sql
index d46b629aba4b..c269af6fe449 100644
--- a/installation/sql/mysql/joomla.sql
+++ b/installation/sql/mysql/joomla.sql
@@ -1558,7 +1558,7 @@ CREATE TABLE IF NOT EXISTS `#__usergroups` (
   UNIQUE KEY `idx_usergroup_parent_title_lookup` (`parent_id`,`title`),
   KEY `idx_usergroup_title_lookup` (`title`),
   KEY `idx_usergroup_adjacency_lookup` (`parent_id`),
-  KEY `idx_usergroup_nested_set_lookup` (`lft`,`rgt`) USING BTREE
+  KEY `idx_usergroup_nested_set_lookup` (`lft`,`rgt`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
 
 --
diff --git a/installation/template/css/template.css b/installation/template/css/template.css
index f6bcb29720f9..713cb085c95b 100644
--- a/installation/template/css/template.css
+++ b/installation/template/css/template.css
@@ -14,7 +14,7 @@
 	width: 128px;
 }
 .container{
-	width: 900px;
+	max-width: 900px;
 }
 .thumbnail {
 	margin-bottom:9px;
diff --git a/language/en-GB/en-GB.com_contact.ini b/language/en-GB/en-GB.com_contact.ini
index 977d4ef7e1aa..36a8b1dfa9c0 100644
--- a/language/en-GB/en-GB.com_contact.ini
+++ b/language/en-GB/en-GB.com_contact.ini
@@ -16,6 +16,7 @@ COM_CONTACT_CONTACT_EMAIL_NAME_LABEL="Name"
 COM_CONTACT_CONTACT_ENTER_MESSAGE_DESC="Enter your message here."
 COM_CONTACT_CONTACT_ENTER_MESSAGE_LABEL="Message"
 COM_CONTACT_CONTACT_ENTER_VALID_EMAIL="Please enter a valid email address."
+COM_CONTACT_FILTER_LABEL="Filter field"
 COM_CONTACT_FILTER_SEARCH_DESC="Contact Filter Search"
 COM_CONTACT_CONTACT_MESSAGE_SUBJECT_DESC="Enter the subject of your message here ."
 COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL="Subject"
diff --git a/language/en-GB/en-GB.com_content.ini b/language/en-GB/en-GB.com_content.ini
index 419144f84159..ee4ad81224f7 100644
--- a/language/en-GB/en-GB.com_content.ini
+++ b/language/en-GB/en-GB.com_content.ini
@@ -35,6 +35,7 @@ COM_CONTENT_MONTH="Month"
 COM_CONTENT_MORE_ARTICLES="More Articles..."
 COM_CONTENT_NEW_ARTICLE="New Article"
 COM_CONTENT_NO_ARTICLES="There are no articles in this category. If subcategories display on this page, they may contain articles."
+COM_CONTENT_NONE="None"
 COM_CONTENT_NUM_ITEMS="Article Count:"
 COM_CONTENT_ON_NEW_CONTENT="A new Article has been submitted by '%1$s' entitled '%2$s'."
 COM_CONTENT_ORDERING="Ordering:<br />New articles default to the first position in the Category. The ordering can be changed in backend."
@@ -50,6 +51,7 @@ COM_CONTENT_READ_MORE="Read more: "
 COM_CONTENT_READ_MORE_TITLE="Read more..."
 COM_CONTENT_REGISTER_TO_READ_MORE="Register to read more..."
 COM_CONTENT_SAVE_SUCCESS="Article successfully saved"
+COM_CONTENT_SELECT_AN_ARTICLE="Select an Article"
 COM_CONTENT_SUBMIT_SAVE_SUCCESS="Article successfully submitted"
 COM_CONTENT_TITLE_FILTER_LABEL="Title Filter"
 COM_CONTENT_WRITTEN_BY="Written by %s"
diff --git a/language/en-GB/en-GB.com_newsfeeds.ini b/language/en-GB/en-GB.com_newsfeeds.ini
index ef662041ffe0..12a94a053f6d 100644
--- a/language/en-GB/en-GB.com_newsfeeds.ini
+++ b/language/en-GB/en-GB.com_newsfeeds.ini
@@ -10,6 +10,7 @@ COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND="Error. Feed not found."
 COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED="Error. Feed could not be retrieved."
 COM_NEWSFEEDS_FEED_LINK="Feed Link"
 COM_NEWSFEEDS_FEED_NAME="Feed Name"
+COM_NEWSFEEDS_FILTER_LABEL="Filter field"
 COM_NEWSFEEDS_FILTER_SEARCH_DESC="Newsfeed Filter Search"
 COM_NEWSFEEDS_NO_ARTICLES="No Articles for this News Feed"
 COM_NEWSFEEDS_NUM_ARTICLES="# Articles"
diff --git a/language/en-GB/en-GB.com_users.ini b/language/en-GB/en-GB.com_users.ini
index 495f60dbbf11..c97c2c2b3050 100644
--- a/language/en-GB/en-GB.com_users.ini
+++ b/language/en-GB/en-GB.com_users.ini
@@ -17,7 +17,8 @@ COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY="Hello %s,\n\nYour account ha
 COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT="Account activated for %s at %s"
 COM_USERS_EMAIL_PASSWORD_RESET_BODY="Hello,\n\nA request has been made to reset your %s account password. To reset your password, you will need to submit this verification code in order to verify that the request was legitimate.\n\nThe verification code is %s\n\nClick on the URL below to enter the verification code and proceed with resetting your password.\n\n %s \n\nThank you."
 COM_USERS_EMAIL_PASSWORD_RESET_SUBJECT="Your %s password reset request"
-COM_USERS_EMAIL_REGISTERED_BODY="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using the username and password you registered with."
+COM_USERS_EMAIL_REGISTERED_BODY="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using you using the following username and password:\n\nUsername: %s\nPassword: %s"
+COM_USERS_EMAIL_REGISTERED_BODY_NOPW="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using the username and password you registered with."
 COM_USERS_EMAIL_REGISTERED_NOTIFICATION_TO_ADMIN_BODY="Hello administrator, \n\nA new user '%s', username '%s', has registered at %s."
 COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY="Hello %s,\n\nThank you for registering at %s. Your account is created and must be activated before you can use it.\nTo activate the account click on the following link or copy-paste it in your browser:\n%s \n\nAfter activation you may login to %s using the following username and password:\n\nUsername: %s\nPassword: %s"
 COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY_NOPW="Hello %s,\n\nThank you for registering at %s. Your account is created and must be activated before you can use it.\nTo activate the account click on the following link or copy-paste it in your browser:\n%s \n\nAfter activation you may login to %s using the following username and the password you entered during registration:\n\nUsername: %s"
diff --git a/language/en-GB/en-GB.com_weblinks.ini b/language/en-GB/en-GB.com_weblinks.ini
index 52d3ae45fe44..273afda39e3c 100644
--- a/language/en-GB/en-GB.com_weblinks.ini
+++ b/language/en-GB/en-GB.com_weblinks.ini
@@ -15,6 +15,7 @@ COM_WEBLINKS_ERROR_WEBLINK_URL_INVALID="Invalid Web link URL"
 COM_WEBLINKS_FIELD_ALIAS_DESC="The alias is for internal use only. Leave this blank and Joomla will fill in a default value from the title. It has to be unique for each web link in the same category."
 COM_WEBLINKS_FIELD_CATEGORY_DESC="You must select a Category."
 COM_WEBLINKS_FIELD_DESCRIPTION_DESC="You may enter here a description for your Web link"
+COM_WEBLINKS_FILTER_LABEL="Filter field"
 COM_WEBLINKS_FILTER_SEARCH_DESC="Web Links Filter Search"
 COM_WEBLINKS_FIELD_TITLE_DESC="Your Web Link must have a Title."
 COM_WEBLINKS_FIELD_URL_DESC="You must enter a URL."
diff --git a/language/en-GB/en-GB.ini b/language/en-GB/en-GB.ini
index 94b2b56b91a8..61bc68739b2f 100644
--- a/language/en-GB/en-GB.ini
+++ b/language/en-GB/en-GB.ini
@@ -21,6 +21,10 @@ J2="2"
 J3="3"
 J4="4"
 J5="5"
+J6="6"
+J7="7"
+J8="8"
+J9="9"
 J10="10"
 J15="15"
 J20="20"
@@ -114,6 +118,7 @@ JERROR_LOGIN_DENIED="You cannot access the private section of this site."
 JERROR_NOLOGIN_BLOCKED="Login denied! Your account has either been blocked or you have not activated it yet."
 JERROR_TABLE_BIND_FAILED="hmm %s ..."
 JERROR_USERS_PROFILE_NOT_FOUND="User profile not found"
+JERROR_COULD_NOT_FIND_TEMPLATE="Could not find template "_QQ_"%s"_QQ_"."
 
 JFIELD_ACCESS_DESC="Access level for this content"
 JFIELD_ACCESS_LABEL="Access"
@@ -181,6 +186,7 @@ JGLOBAL_INTRO_TEXT="Intro Text"
 JGLOBAL_LEFT="Left"
 JGLOBAL_LT="&lt;"
 JGLOBAL_NEWITEMSLAST_DESC="New items default to the last position. Ordering can be changed after this item has been saved."
+JGLOBAL_SELECT_NO_RESULTS_MATCH="No results match"
 JGLOBAL_NUM="#"
 JGLOBAL_PASSWORD="Password"
 JGLOBAL_PRINT="Print"
diff --git a/language/en-GB/en-GB.lib_joomla.ini b/language/en-GB/en-GB.lib_joomla.ini
index a6c84ad487b4..1810992f65c2 100644
--- a/language/en-GB/en-GB.lib_joomla.ini
+++ b/language/en-GB/en-GB.lib_joomla.ini
@@ -470,6 +470,7 @@ JLIB_INSTALLER_ABORT_MOD_UNKNOWN_CLIENT="Module %1$s: Unknown client type [%2$s]
 JLIB_INSTALLER_ABORT_NOINSTALLPATH="Install path does not exist"
 JLIB_INSTALLER_ABORT_NOUPDATEPATH="Update path does not exist"
 JLIB_INSTALLER_ABORT_PACK_INSTALL_COPY_SETUP="Package Install: Could not copy setup file."
+JLIB_INSTALLER_ABORT_PACKAGE_INSTALL_MANIFEST="Installation failed: Could not copy PHP manifest file."
 JLIB_INSTALLER_ABORT_PACK_INSTALL_CREATE_DIRECTORY="Package Install: Failed to create directory:%s "
 JLIB_INSTALLER_ABORT_PACK_INSTALL_ERROR_EXTENSION="Package %1$s: There was an error installing an extension: %2$s"
 JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_FILES="Package %s: There were no files to install!"
diff --git a/libraries/cms/layout/base.php b/libraries/cms/layout/base.php
index f0f6c06e68a8..bf97cb84e596 100644
--- a/libraries/cms/layout/base.php
+++ b/libraries/cms/layout/base.php
@@ -14,6 +14,7 @@
  *
  * @package     Joomla.Libraries
  * @subpackage  Layout
+ * @see         http://docs.joomla.org/Sharing_layouts_across_views_or_extensions_with_JLayout
  * @since       3.0
  */
 class JLayoutBase implements JLayout
diff --git a/libraries/cms/layout/file.php b/libraries/cms/layout/file.php
index 344eab59c988..aeebccd380a7 100644
--- a/libraries/cms/layout/file.php
+++ b/libraries/cms/layout/file.php
@@ -15,6 +15,7 @@
  *
  * @package     Joomla.Libraries
  * @subpackage  Layout
+ * @see         http://docs.joomla.org/Sharing_layouts_across_views_or_extensions_with_JLayout
  * @since       3.0
  */
 class JLayoutFile extends JLayoutBase
@@ -31,6 +32,12 @@ class JLayoutFile extends JLayoutBase
 	 */
 	protected $basePath = null;
 
+	/**
+	 * @var    string  Full path to actual layout files, after possible template override check
+	 * @since  3.0.3
+	 */
+	protected $fullPath = null;
+
 	/**
 	 * Method to instantiate the file-based layout.
 	 *
@@ -82,21 +89,20 @@ public function render($displayData)
 	 */
 	protected function getPath()
 	{
-		static $fullPath = null;
-
-		if (is_null($fullPath) && !empty($this->layoutId))
+		if (is_null($this->fullPath) && !empty($this->layoutId))
 		{
-			$rawPath  = str_replace('.', '/', $this->layoutId) . '.php';
+			$rawPath = str_replace('.', '/', $this->layoutId) . '.php';
 			$fileName = basename($rawPath);
 			$filePath = dirname($rawPath);
 
 			$possiblePaths = array(
-				JPATH_THEMES . '/' . JFactory::getApplication()->getTemplate() . '/html/layouts/' . $filePath, $this->basePath . '/' . $filePath
+				JPATH_THEMES . '/' . JFactory::getApplication()->getTemplate() . '/html/layouts/' . $filePath,
+				$this->basePath . '/' . $filePath
 			);
 
-			$fullPath = JPath::find($possiblePaths, $fileName);
+			$this->fullPath = JPath::find($possiblePaths, $fileName);
 		}
 
-		return $fullPath;
+		return $this->fullPath;
 	}
 }
diff --git a/libraries/cms/layout/layout.php b/libraries/cms/layout/layout.php
index 6831bcf34b5e..17af80b12673 100644
--- a/libraries/cms/layout/layout.php
+++ b/libraries/cms/layout/layout.php
@@ -14,6 +14,7 @@
  *
  * @package     Joomla.Libraries
  * @subpackage  Layout
+ * @see         http://docs.joomla.org/Sharing_layouts_across_views_or_extensions_with_JLayout
  * @since       3.0
  */
 interface JLayout
diff --git a/media/com_finder/js/autocompleter.js b/media/com_finder/js/autocompleter.js
index a782c8363cdb..4d440ebc0316 100644
--- a/media/com_finder/js/autocompleter.js
+++ b/media/com_finder/js/autocompleter.js
@@ -118,11 +118,11 @@ var Autocompleter = new Class({
 			'link': 'cancel',
 			'duration': 200
 		}, this.options.fxOptions)).addEvent('onStart', Chain.prototype.clearChain).set(0);
-		this.element.setProperty('autocomplete', 'off').addEvent((Browser.ie || Browser.safari || Browser.chrome) ? 'keydown' : 'keypress', this.onCommand.bind(this)).addEvent('click', this.onCommand.bind(this, [false])).addEvent('focus', this.toggleFocus.create({
+		this.element.setProperty('autocomplete', 'off').addEvent((Browser.ie || Browser.safari || Browser.chrome) ? 'keydown' : 'keypress', this.onCommand.bind(this)).addEvent('click', this.onCommand.bind(this, [false])).addEvent('focus', this.toggleFocus.pass({
 			bind: this,
 			arguments: true,
 			delay: 100
-		})).addEvent('blur', this.toggleFocus.create({
+		})).addEvent('blur', this.toggleFocus.pass({
 			bind: this,
 			arguments: false,
 			delay: 100
diff --git a/media/jui/css/bootstrap-rtl.css b/media/jui/css/bootstrap-rtl.css
index a7decb761d08..d547e805e40f 100644
--- a/media/jui/css/bootstrap-rtl.css
+++ b/media/jui/css/bootstrap-rtl.css
@@ -421,3 +421,6 @@ body {
 	border-left-color: transparent;
 	border-right-color: #CCC;
 }
+.badge {
+	margin-left: 10px;
+}
diff --git a/media/jui/less/bootstrap-rtl.less b/media/jui/less/bootstrap-rtl.less
index c3f6b6c932cd..79c9be3e7de4 100644
--- a/media/jui/less/bootstrap-rtl.less
+++ b/media/jui/less/bootstrap-rtl.less
@@ -431,3 +431,7 @@ direction:rtl;
 	border-left-color: transparent;
 	border-right-color: #CCC;
 }
+/* Subcategories badge */
+.badge {
+	margin-left: 10px;
+}
\ No newline at end of file
diff --git a/media/jui/less/component-animations.less b/media/jui/less/component-animations.less
index 2166776d98ba..d614263a76a7 100644
--- a/media/jui/less/component-animations.less
+++ b/media/jui/less/component-animations.less
@@ -15,7 +15,6 @@
   position: relative;
   height: 0;
   overflow: hidden;
-  overflow: visible \9;
   .transition(height .35s ease);
   &.in {
     height: auto;
diff --git a/modules/mod_login/tmpl/default.php b/modules/mod_login/tmpl/default.php
index 0b7743966bfd..1f22701e4202 100644
--- a/modules/mod_login/tmpl/default.php
+++ b/modules/mod_login/tmpl/default.php
@@ -22,14 +22,20 @@
 		<div id="form-login-username" class="control-group">
 			<div class="controls">
 				<div class="input-prepend input-append">
-					<span class="add-on"><i class="icon-user tip" title="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>"></i><label for="modlgn-username" class="element-invisible"><?php echo JText::_('MOD_LOGIN_VALUE_USERNAME'); ?></label></span><input id="modlgn-username" type="text" name="username" class="input-small" tabindex="1" size="18" placeholder="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>" /><a href="<?php echo JRoute::_('index.php?option=com_users&view=remind'); ?>" class="btn hasTooltip" title="<?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_USERNAME'); ?>"><i class="icon-question-sign"></i></a>
+					<span class="add-on">
+						<span class="icon-user tip" title="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>"></span>
+						<label for="modlgn-username" class="element-invisible"><?php echo JText::_('MOD_LOGIN_VALUE_USERNAME'); ?></label>
+					</span>
+					<input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>" />
+
 				</div>
 			</div>
 		</div>
 		<div id="form-login-password" class="control-group">
 			<div class="controls">
 				<div class="input-prepend input-append">
-					<span class="add-on"><i class="icon-lock tip" title="<?php echo JText::_('JGLOBAL_PASSWORD') ?>"></i><label for="modlgn-passwd" class="element-invisible"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label></span><input id="modlgn-passwd" type="password" name="password" class="input-small" tabindex="2" size="18" placeholder="<?php echo JText::_('JGLOBAL_PASSWORD') ?>" /><a href="<?php echo JRoute::_('index.php?option=com_users&view=reset'); ?>" class="btn hasTooltip" title="<?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_PASSWORD'); ?>"><i class="icon-question-sign"></i></a>
+					<span class="add-on"><span class="icon-lock tip" title="<?php echo JText::_('JGLOBAL_PASSWORD') ?>"></span><label for="modlgn-passwd" class="element-invisible"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label></span><input id="modlgn-passwd" type="password" name="password" class="input-small" tabindex="0" size="18" placeholder="<?php echo JText::_('JGLOBAL_PASSWORD') ?>" />
+
 				</div>
 			</div>
 		</div>
@@ -40,7 +46,7 @@
 		<?php endif; ?>
 		<div id="form-login-submit" class="control-group">
 			<div class="controls">
-				<button type="submit" tabindex="3" name="Submit" class="btn btn-primary btn"><?php echo JText::_('JLOGIN') ?></button>
+				<button type="submit" tabindex="0" name="Submit" class="btn btn-primary btn"><?php echo JText::_('JLOGIN') ?></button>
 			</div>
 		</div>
 		<?php
@@ -49,7 +55,14 @@
 			<ul class="unstyled">
 				<li>
 					<a href="<?php echo JRoute::_('index.php?option=com_users&view=registration'); ?>">
-					<?php echo JText::_('MOD_LOGIN_REGISTER'); ?> <i class="icon-arrow-right"></i></a>
+					<?php echo JText::_('MOD_LOGIN_REGISTER'); ?> <span class="icon-arrow-right"></span></a>
+				</li>
+				<li>
+					<a href="<?php echo JRoute::_('index.php?option=com_users&view=remind'); ?>">
+					  <?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_USERNAME'); ?></a>
+				</li>
+				<li>
+					<a href="<?php echo JRoute::_('index.php?option=com_users&view=reset'); ?>"><?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_PASSWORD'); ?></a>
 				</li>
 
 			</ul>
diff --git a/modules/mod_menu/tmpl/default_heading.php b/modules/mod_menu/tmpl/default_heading.php
index cfce3012a59b..e9c45ffd95fe 100644
--- a/modules/mod_menu/tmpl/default_heading.php
+++ b/modules/mod_menu/tmpl/default_heading.php
@@ -10,4 +10,4 @@
 defined('_JEXEC') or die;
 
 ?>
-<li class="nav-header"><?php echo $item->title; ?></li>
+<span class="nav-header"><?php echo $item->title; ?></span>
\ No newline at end of file
diff --git a/plugins/content/pagebreak/pagebreak.php b/plugins/content/pagebreak/pagebreak.php
index 96df21d413d7..c19b04c69cfb 100644
--- a/plugins/content/pagebreak/pagebreak.php
+++ b/plugins/content/pagebreak/pagebreak.php
@@ -179,7 +179,7 @@ public function onContentPrepare($context, &$row, &$params, $page = 0)
 			else {
 				$t[] = $text[0];
 
-				$t[] = (string) JHtml::_($style.'.start');
+				$t[] = (string) JHtml::_($style.'.start', 'article'.$row->id.'-'.$style);
 
 				foreach ($text as $key => $subtext) {
 
@@ -193,7 +193,7 @@ public function onContentPrepare($context, &$row, &$params, $page = 0)
 						} else {
 							$title	= JText::sprintf('PLG_CONTENT_PAGEBREAK_PAGE_NUM', $key);
 						}
-						$t[] = (string) JHtml::_($style.'.panel', $match['title'], 'basic-details');
+						$t[] = (string) JHtml::_($style.'.panel', $match['title'], 'article'.$row->id.'-'.$style.$key);
 					}
 					$t[] = (string) $subtext;
 				}
diff --git a/plugins/content/vote/vote.php b/plugins/content/vote/vote.php
index 36490fe868f3..b0088e6dae91 100644
--- a/plugins/content/vote/vote.php
+++ b/plugins/content/vote/vote.php
@@ -33,8 +33,8 @@ public function __construct(& $subject, $config)
 	}
 
 	/**
-	* @since	1.6
-	*/
+	 * @since	1.6
+	 */
 	public function onContentBeforeDisplay($context, &$row, &$params, $page=0)
 	{
 		$html = '';
@@ -47,8 +47,8 @@ public function onContentBeforeDisplay($context, &$row, &$params, $page=0)
 			$img = '';
 
 			// look for images in template if available
-			$starImageOn = JHtml::_('image', 'system/rating_star.png', null, null, true);
-			$starImageOff = JHtml::_('image', 'system/rating_star_blank.png', null, null, true);
+			$starImageOn = JHtml::_('image', 'system/rating_star.png', JText::_('PLG_VOTE_STAR_ACTIVE'), null, true);
+			$starImageOff = JHtml::_('image', 'system/rating_star_blank.png', JText::_('PLG_VOTE_STAR_INACTIVE'), null, true);
 
 			for ($i = 0; $i < $rating; $i++)
 			{
@@ -58,28 +58,33 @@ public function onContentBeforeDisplay($context, &$row, &$params, $page=0)
 			{
 				$img .= $starImageOff;
 			}
-			$html .= '<span class="content_rating">';
-			$html .= JText::sprintf($img);
-			$html .= '</span>';
+
+			$html .= '<div class="content_rating">';
+			$html .= '<p class="unseen element-invisible">' . JText::sprintf('PLG_VOTE_USER_RATING', $rating, '5') . '</p>';
+			$html .= $img;
+			$html .= '</div>';
 
 			if ($view == 'article' && $row->state == 1)
 			{
 				$uri = JURI::getInstance();
 				$uri->setQuery($uri->getQuery().'&hitcount=0');
 
-				$html .= '<form method="post" action="' . $uri->toString() . '">';
+				// create option list for voting select box
+				$options = array();
+				for($i = 1; $i < 6; $i++)
+				{
+					$options[] = JHTML::_('select.option', $i, JText::sprintf('PLG_VOTE_VOTE', $i));
+				}
+
+				// generate voting form
+				$html .= '<form method="post" action="' . $uri->toString() . '" class="form-inline">';
 				$html .= '<span class="content_vote">';
-//				$html .= JText::_( 'PLG_VOTE_POOR' );
-				$html .= ' <input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '1').'" name="user_rating" value="1" /> ';
-				$html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '2').'" name="user_rating" value="2" /> ';
-				$html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '3').'" name="user_rating" value="3" /> ';
-				$html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '4').'" name="user_rating" value="4" /> ';
-				$html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '5').'" name="user_rating" value="5" checked="checked" /> ';
-//				$html .= JText::_( 'PLG_VOTE_BEST' );
+				$html .= '<label class="unseen element-invisible" for="content_vote_' . $row->id . '">'.JText::_('PLG_VOTE_LABEL').'</label>';
+				$html .= JHTML::_('select.genericlist', $options, 'user_rating', null, 'value', 'text', '5', 'content_vote_'.$row->id);
 				$html .= '&#160;<input class="btn btn-mini" type="submit" name="submit_vote" value="' . JText::_('PLG_VOTE_RATE') . '" />';
 				$html .= '<input type="hidden" name="task" value="article.vote" />';
 				$html .= '<input type="hidden" name="hitcount" value="0" />';
-				$html .= '<input type="hidden" name="url" value="'.  $uri->toString() .'" />';
+				$html .= '<input type="hidden" name="url" value="' . $uri->toString() . '" />';
 				$html .= JHtml::_('form.token');
 				$html .= '</span>';
 				$html .= '</form>';
diff --git a/plugins/finder/categories/categories.php b/plugins/finder/categories/categories.php
index 0b8ba4396c3b..f0d85a747384 100644
--- a/plugins/finder/categories/categories.php
+++ b/plugins/finder/categories/categories.php
@@ -237,6 +237,8 @@ protected function index(FinderIndexerResult $item, $format = 'html')
 			return;
 		}
 
+		$item->setLanguage();
+
 		// Need to import component route helpers dynamically, hence the reason it's handled here
 		$path = JPATH_SITE . '/components/' . $item->extension . '/helpers/route.php';
 		if (is_file($path))
diff --git a/plugins/finder/contacts/contacts.php b/plugins/finder/contacts/contacts.php
index 5bd2c07d235a..3372ad922570 100644
--- a/plugins/finder/contacts/contacts.php
+++ b/plugins/finder/contacts/contacts.php
@@ -262,6 +262,8 @@ protected function index(FinderIndexerResult $item, $format = 'html')
 			return;
 		}
 
+		$item->setLanguage();
+
 		// Initialize the item parameters.
 		$registry = new JRegistry;
 		$registry->loadString($item->params);
diff --git a/plugins/finder/content/content.php b/plugins/finder/content/content.php
index ce1f45864022..933899c8c0e8 100644
--- a/plugins/finder/content/content.php
+++ b/plugins/finder/content/content.php
@@ -245,6 +245,8 @@ public function onFinderChangeState($context, $pks, $value)
 	 */
 	protected function index(FinderIndexerResult $item, $format = 'html')
 	{
+		$item->setLanguage();
+
 		// Check if the extension is enabled
 		if (JComponentHelper::isEnabled($this->extension) == false)
 		{
diff --git a/plugins/finder/newsfeeds/newsfeeds.php b/plugins/finder/newsfeeds/newsfeeds.php
index 1a9cbec8f816..f27978fb2778 100644
--- a/plugins/finder/newsfeeds/newsfeeds.php
+++ b/plugins/finder/newsfeeds/newsfeeds.php
@@ -260,6 +260,8 @@ protected function index(FinderIndexerResult $item, $format = 'html')
 			return;
 		}
 
+		$item->setLanguage();
+
 		// Initialize the item parameters.
 		$registry = new JRegistry;
 		$registry->loadString($item->params);
diff --git a/plugins/finder/weblinks/weblinks.php b/plugins/finder/weblinks/weblinks.php
index 8ad390a62863..fc109aada74c 100644
--- a/plugins/finder/weblinks/weblinks.php
+++ b/plugins/finder/weblinks/weblinks.php
@@ -252,6 +252,8 @@ protected function index(FinderIndexerResult $item, $format = 'html')
 			return;
 		}
 
+		$item->setLanguage();
+
 		// Initialize the item parameters.
 		$registry = new JRegistry;
 		$registry->loadString($item->params);
diff --git a/templates/beez3/css/general.css b/templates/beez3/css/general.css
index 91748af86cfd..6ef7cc4a1c31 100644
--- a/templates/beez3/css/general.css
+++ b/templates/beez3/css/general.css
@@ -3,57 +3,54 @@
 /* -- form validation */
 .invalid { border-color: #B94A48;background:#F2DEDE}
 label.invalid , label.required  span{ color: #B94A48; background:none
-		}
+	}
 
 /* -- Joomla edit buttons  Frontendediting*/
 #editor-xtd-buttons {
-        padding: 0px;
+	padding: 0px;
 }
 .edit tr:hover  td {background:#eee}
 .button2-left,
 .button2-right,
 .button2-left div,
 .button2-right div {
-        float: left;
+	float: left;
 }
 
 .button2-left a,
 .button2-right a,
 .button2-left span,
 .button2-right span {
-        display: block;
-
-        float: left;
-
-
-        color: #666;
-        cursor: pointer;
+	display: block;
+	float: left;
+	color: #666;
+	cursor: pointer;
 }
 
 .button2-left span,
 .button2-right span {
-        cursor: default;
-        color: #999;
+	cursor: default;
+	color: #999;
 }
 
 .button2-left .page a,
 .button2-right .page a,
 .button2-left .page span,
 .button2-right .page span {
-        padding: 0 6px;
+	padding: 0 6px;
 }
 
 .page span {
-        color: #000;
-        font-weight: bold;
+	color: #000;
+	font-weight: bold;
 }
 
 
 .button2-left,
 .button2-right {
 
-        float: left;
-        margin-left: 5px;
+	float: left;
+	margin-left: 5px;
 }
 
 
@@ -68,38 +65,56 @@ label.invalid , label.required  span{ color: #B94A48; background:none
 .button2-left .blank a:visited
 { background-color: #D9EDF7;
 
-    color:#095197;border:solid 1px #BCE8F1; border-top:0; border-radius:0 0 3px 3px;  text-decoration:none; padding:3px}
+	color:#095197;border:solid 1px #BCE8F1; border-top:0; border-radius:0 0 3px 3px;  text-decoration:none; padding:3px}
 .button2-left a:hover,
 .button2-left .blank a:hover,
 .button2-left .readmore a:hover,
 .button2-right a:hover {
-        text-decoration: none;
-        color: #fff;
-		background:#095197;
+	text-decoration: none;
+	color: #fff;
+	background:#095197;
+}
+.pull-right {
+	float: right;
+}
+.pull-left {
+	float: left;
+}
+.btn-toolbar .btn {
+	-moz-border-bottom-colors: none;
+	-moz-border-left-colors: none;
+	-moz-border-right-colors: none;
+	-moz-border-top-colors: none;
+	background-color: #D9EDF7;
+	border-image: none;
+	border-radius: 0 0 3px 3px;
+	color: #095197;
+	padding: 3px;
+	text-decoration: none;
 }
 
+div.toggle-editor {
 
-
-
+}
 /* Caption fixes */
 .img_caption .left {
-        float: left;
-        margin-right: 1em;
+	float: left;
+	margin-right: 1em;
 }
 
 .img_caption .right {
-        float: right;
-        margin-left: 1em;
+	float: right;
+	margin-left: 1em;
 }
 
 .img_caption .left p {
-        clear: left;
-        text-align: center;
+	clear: left;
+	text-align: center;
 }
 
 .img_caption .right p {
-        clear: right;
-        text-align: center;
+	clear: right;
+	text-align: center;
 }
 
 .img_caption  {
@@ -113,35 +128,38 @@ label.invalid , label.required  span{ color: #B94A48; background:none
 
 
 /* Calendar */
-a img.calendar {
-        width: 16px;
-        height: 16px;
-        margin-left: 3px;
-        cursor: pointer;
-        vertical-align: middle;
+#jform_publish_down_img {
+	width: 18px;
+	height: 18px;
+	margin-left: 3px;
+	background: url(../images/system/calendar.png) no-repeat;
+	cursor: pointer;
+	vertical-align: middle;
+}
+#jform_publish_up_img {
+	width: 18px;
+	height: 18px;
+	margin-left: 3px;
+	background: url(../images/system/calendar.png) no-repeat;
+	cursor: pointer;
+	vertical-align: middle;
 }
 
+
 /* System Messages */
 
 .error
 {
-        padding:0px;
-        margin-bottom: 20px;
+	padding:0px;
+	margin-bottom: 20px;
 }
 
 .error h2
 {
-        color:#000 !important;
-        font-size:1.4em !important;
-        text-transform:uppercase;
-        padding:0 0 0 0px !important
-}
-
-#system-message
-{
-                margin:10px 0 20px 0;
-                border-left:0;
-                border-right:0;
+	color:#000 !important;
+	font-size:1.4em !important;
+	text-transform:uppercase;
+	padding:0 0 0 0px !important
 }
 
 #system-message dt
@@ -198,7 +216,7 @@ a img.calendar {
 	background:#fff url(../images/system/notice-alert.png) no-repeat ;
 	padding-left:40px;
  	padding: 10px 10px 10px 40px;
-    border: 2px solid #990000;
+	border: 2px solid #990000;
 	border-radius:10px
 
 }
@@ -215,30 +233,30 @@ a img.calendar {
 
 #system-message dd.notice  ul
 {
-		background:#fff url(../images/system/notice-note.png) no-repeat ;
-		padding-left:40px;
-	    padding: 10px 10px 10px 40px;
-	    border: 2px solid #FAA528;
-		border-radius:10px
+	background:#fff url(../images/system/notice-note.png) no-repeat ;
+	padding-left:40px;
+	padding: 10px 10px 10px 40px;
+	border: 2px solid #FAA528;
+	border-radius:10px
 
 }
 #system-message dd.notice ul { color: #000;margin:10px 0 }
 
 #system-message
 {
-    margin-bottom: 0px;
-    padding: 0;
+	margin-bottom: 0px;
+	padding: 0;
 }
 
 #system-message dt
 {
-    font-weight: bold;
+	font-weight: bold;
 }
 
 #system-message dd
 {
-    font-weight: bold;
-    padding: 0;
+	font-weight: bold;
+	padding: 0;
 }
 
 
@@ -257,16 +275,16 @@ a img.calendar {
 #users-profile-core,
 #users-profile-custom
 {
-        margin:10px 0 15px 0;
-        padding:15px;
+	margin:10px 0 15px 0;
+	padding:15px;
 }
 
 #users-profile-core dt,
 #users-profile-custom dt
 {
-        float:left;
-        width:12em;
-        padding:3px 0;
+	float:left;
+	width:12em;
+	padding:3px 0;
 
 
 }
@@ -274,14 +292,14 @@ a img.calendar {
 #users-profile-core dd,
 #users-profile-custom dd
 {
-        padding:3px 0;
+	padding:3px 0;
 }
 
 #member-profile fieldset,
 .registration fieldset
 {
-        margin:10px 0 15px 0;
-        padding:15px;
+	margin:10px 0 15px 0;
+	padding:15px;
 
 }
 
@@ -290,7 +308,7 @@ a img.calendar {
 .profile-edit legend,
 .registration legend
 {
-		font-weight:bold
+	font-weight:bold
 }
 
 .profile-edit form#member-profile fieldset dd,
diff --git a/templates/beez3/css/template_rtl.css b/templates/beez3/css/template_rtl.css
index 94a88ddee5a8..957968bd59f9 100644
--- a/templates/beez3/css/template_rtl.css
+++ b/templates/beez3/css/template_rtl.css
@@ -240,6 +240,10 @@ table.weblinks th, table.category th {
 	text-align: right;
 }
 
+table th, table td {
+	text-align: right;
+}
+
 dl.tabs {
 	float: right;
 	margin: 50px 0 0 0;
@@ -332,7 +336,6 @@ padding:4px 0;
 #login-form label
 {
 	margin-right:0px;
-	float:right
 }
 
 #form-login-remember label
@@ -352,7 +355,7 @@ button.validate
 #modlgn-username,
 #modlgn-passwd
 {
-	margin-right:-30px;
+	margin-right: 0;
 }
 
 .module_content #form-login-username label,
@@ -497,3 +500,8 @@ ul.menu li ul li ul li ul li ul {
 	margin-right: 10px;
 	margin-bottom: 10px;
 }
+
+/* ++++++ Bootstrap markup ++++++++++++++ */
+.pull-left {
+	float: right;
+}
diff --git a/templates/beez3/html/com_content/article/default.php b/templates/beez3/html/com_content/article/default.php
index 7500abdb6c1a..f2db26a80ac6 100644
--- a/templates/beez3/html/com_content/article/default.php
+++ b/templates/beez3/html/com_content/article/default.php
@@ -49,23 +49,23 @@
 		<?php if (!$this->print) : ?>
 				<?php if ($params->get('show_print_icon')) : ?>
 				<li class="print-icon">
-						<?php echo JHtml::_('icon.print_popup', $this->item, $params); ?>
+						<?php echo JHtml::_('icon.print_popup', $this->item, $params, array(), true); ?>
 				</li>
 				<?php endif; ?>
 
 				<?php if ($params->get('show_email_icon')) : ?>
 				<li class="email-icon">
-						<?php echo JHtml::_('icon.email', $this->item, $params); ?>
+						<?php echo JHtml::_('icon.email', $this->item, $params, array(), true); ?>
 				</li>
 				<?php endif; ?>
 				<?php if ($this->user->authorise('core.edit', 'com_content.article.'.$this->item->id)) : ?>
 						<li class="edit-icon">
-							<?php echo JHtml::_('icon.edit', $this->item, $params); ?>
+							<?php echo JHtml::_('icon.edit', $this->item, $params, array(), true); ?>
 						</li>
 					<?php endif; ?>
 		<?php else : ?>
 				<li>
-						<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
+						<?php echo JHtml::_('icon.print_screen', $this->item, $params, array(), true); ?>
 				</li>
 		<?php endif; ?>
 		</ul>
diff --git a/templates/beez3/html/com_content/category/blog_item.php b/templates/beez3/html/com_content/category/blog_item.php
index 77de00b6e08e..4ee424bb7d56 100644
--- a/templates/beez3/html/com_content/category/blog_item.php
+++ b/templates/beez3/html/com_content/category/blog_item.php
@@ -35,17 +35,17 @@
 	<ul class="actions">
 		<?php if ($params->get('show_print_icon')) : ?>
 		<li class="print-icon">
-			<?php echo JHtml::_('icon.print_popup', $this->item, $params); ?>
+			<?php echo JHtml::_('icon.print_popup', $this->item, $params, array(), true); ?>
 		</li>
 		<?php endif; ?>
 		<?php if ($params->get('show_email_icon')) : ?>
 		<li class="email-icon">
-			<?php echo JHtml::_('icon.email', $this->item, $params); ?>
+			<?php echo JHtml::_('icon.email', $this->item, $params, array(), true); ?>
 		</li>
 		<?php endif; ?>
 		<?php if ($canEdit) : ?>
 		<li class="edit-icon">
-			<?php echo JHtml::_('icon.edit', $this->item, $params); ?>
+			<?php echo JHtml::_('icon.edit', $this->item, $params, array(), true); ?>
 		</li>
 		<?php endif; ?>
 	</ul>
diff --git a/templates/beez3/html/com_content/category/default_articles.php b/templates/beez3/html/com_content/category/default_articles.php
index 088be0e92ca2..fe60d6716686 100644
--- a/templates/beez3/html/com_content/category/default_articles.php
+++ b/templates/beez3/html/com_content/category/default_articles.php
@@ -165,7 +165,7 @@
 
 <?php // Code to add a link to submit an article. ?>
 <?php if ($this->category->getParams()->get('access-create')) : ?>
-	<?php echo JHtml::_('icon.create', $this->category, $this->category->params); ?>
+	<?php echo JHtml::_('icon.create', $this->category, $this->category->params, array(), true); ?>
 <?php  endif; ?>
 
 <?php // Add pagination links ?>
diff --git a/templates/beez3/html/com_content/featured/default_item.php b/templates/beez3/html/com_content/featured/default_item.php
index 604b66d26bb8..d2f332a43ffb 100644
--- a/templates/beez3/html/com_content/featured/default_item.php
+++ b/templates/beez3/html/com_content/featured/default_item.php
@@ -36,18 +36,18 @@
 	<ul class="actions">
 		<?php if ($params->get('show_print_icon')) : ?>
 		<li class="print-icon">
-			<?php echo JHtml::_('icon.print_popup', $this->item, $params); ?>
+			<?php echo JHtml::_('icon.print_popup', $this->item, $params, array(), true); ?>
 		</li>
 		<?php endif; ?>
 		<?php if ($params->get('show_email_icon')) : ?>
 		<li class="email-icon">
-			<?php echo JHtml::_('icon.email', $this->item, $params); ?>
+			<?php echo JHtml::_('icon.email', $this->item, $params, array(), true); ?>
 		</li>
 		<?php endif; ?>
 
 		<?php if ($canEdit) : ?>
 		<li class="edit-icon">
-			<?php echo JHtml::_('icon.edit', $this->item, $params); ?>
+			<?php echo JHtml::_('icon.edit', $this->item, $params, array(), true); ?>
 		</li>
 		<?php endif; ?>
 	</ul>
diff --git a/templates/beez3/html/com_content/form/edit.php b/templates/beez3/html/com_content/form/edit.php
new file mode 100644
index 000000000000..83cc4c502c03
--- /dev/null
+++ b/templates/beez3/html/com_content/form/edit.php
@@ -0,0 +1,323 @@
+<?php
+/**
+ * @package     Joomla.Site
+ * @subpackage  Templates.beez3
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license     GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+// no direct access
+defined('_JEXEC') or die;
+
+JHtml::_('behavior.keepalive');
+JHtml::_('behavior.tooltip');
+JHtml::_('behavior.calendar');
+JHtml::_('behavior.formvalidation');
+
+// Create shortcut to parameters.
+$params = $this->state->get('params');
+//$images = json_decode($this->item->images);
+//$urls = json_decode($this->item->urls);
+
+// This checks if the editor config options have ever been saved. If they haven't they will fall back to the original settings.
+$editoroptions = isset($params->show_publishing_options);
+if (!$editoroptions):
+	$params->show_urls_images_frontend = '0';
+endif;
+?>
+
+<script type="text/javascript">
+	Joomla.submitbutton = function(task) {
+		if (task == 'article.cancel' || document.formvalidator.isValid(document.id('adminForm'))) {
+			<?php echo $this->form->getField('articletext')->save(); ?>
+			Joomla.submitform(task);
+		}
+	}
+</script>
+<div class="edit item-page<?php echo $this->pageclass_sfx; ?>">
+<?php if ($params->get('show_page_heading')) : ?>
+<h1>
+	<?php echo $this->escape($params->get('page_heading')); ?>
+</h1>
+<?php endif; ?>
+
+<form action="<?php echo JRoute::_('index.php?option=com_content&a_id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate">
+	<fieldset>
+		<legend><?php echo JText::_('JEDITOR'); ?></legend>
+
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('title'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('title'); ?>
+				</div>
+			</div>
+
+		<?php if (is_null($this->item->id)):?>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('alias'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('alias'); ?>
+				</div>
+			</div>
+		<?php endif; ?>
+
+			<div class="btn-group">
+				<button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('article.save')">
+					<?php echo JText::_('JSAVE') ?>
+				</button>
+				<button type="button" class="btn" onclick="Joomla.submitbutton('article.cancel')">
+					<?php echo JText::_('JCANCEL') ?>
+				</button>
+			</div>
+
+			<?php echo $this->form->getInput('articletext'); ?>
+
+	</fieldset>
+	<?php if ($params->get('show_urls_images_frontend')  ) : ?>
+	<fieldset>
+		<legend><?php echo JText::_('COM_CONTENT_IMAGES_AND_URLS'); ?></legend>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('image_intro', 'images'); ?>
+					<?php echo $this->form->getInput('image_intro', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('image_intro_alt', 'images'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('image_intro_alt', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('image_intro_caption', 'images'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('image_intro_caption', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('float_intro', 'images'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('float_intro', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('image_fulltext', 'images'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('image_fulltext', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('image_fulltext_alt', 'images'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('image_fulltext_alt', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('image_fulltext_caption', 'images'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('image_fulltext_caption', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('float_fulltext', 'images'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('float_fulltext', 'images'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('urla', 'urls'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('urla', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('urlatext', 'urls'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('urlatext', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="controls">
+					<?php echo $this->form->getInput('targeta', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('urlb', 'urls'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('urlb', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('urlbtext', 'urls'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('urlbtext', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="controls">
+					<?php echo $this->form->getInput('targetb', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('urlc', 'urls'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('urlc', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('urlctext', 'urls'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('urlctext', 'urls'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="controls">
+					<?php echo $this->form->getInput('targetc', 'urls'); ?>
+				</div>
+			</div>
+	</fieldset>
+	<?php endif; ?>
+
+	<fieldset>
+		<legend><?php echo JText::_('COM_CONTENT_PUBLISHING'); ?></legend>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('catid'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('catid'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('created_by_alias'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('created_by_alias'); ?>
+				</div>
+			</div>
+
+			<?php if ($this->item->params->get('access-change')) : ?>
+				<div class="control-group">
+					<div class="control-label">
+						<?php echo $this->form->getLabel('state'); ?>
+					</div>
+					<div class="controls">
+						<?php echo $this->form->getInput('state'); ?>
+					</div>
+				</div>
+				<div class="control-group">
+					<div class="control-label">
+						<?php echo $this->form->getLabel('featured'); ?>
+					</div>
+					<div class="controls">
+						<?php echo $this->form->getInput('featured'); ?>
+					</div>
+				</div>
+				<div class="control-group">
+					<div class="control-label">
+						<?php echo $this->form->getLabel('publish_up'); ?>
+					</div>
+					<div class="controls">
+						<?php echo $this->form->getInput('publish_up'); ?>
+					</div>
+				</div>
+				<div class="control-group">
+					<div class="control-label">
+						<?php echo $this->form->getLabel('publish_down'); ?>
+					</div>
+					<div class="controls">
+						<?php echo $this->form->getInput('publish_down'); ?>
+					</div>
+				</div>
+			<?php endif; ?>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('access'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('access'); ?>
+				</div>
+			</div>
+			<?php if (is_null($this->item->id)):?>
+				<div class="control-group">
+					<div class="control-label">
+					</div>
+					<div class="controls">
+						<?php echo JText::_('COM_CONTENT_ORDERING'); ?>
+					</div>
+				</div>
+			<?php endif; ?>
+	</fieldset>
+
+	<fieldset>
+		<legend><?php echo JText::_('JFIELD_LANGUAGE_LABEL'); ?></legend>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('language'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('language'); ?>
+				</div>
+			</div>
+	</fieldset>
+
+	<fieldset>
+		<legend><?php echo JText::_('COM_CONTENT_METADATA'); ?></legend>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('metadesc'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('metadesc'); ?>
+				</div>
+			</div>
+			<div class="control-group">
+				<div class="control-label">
+					<?php echo $this->form->getLabel('metakey'); ?>
+				</div>
+				<div class="controls">
+					<?php echo $this->form->getInput('metakey'); ?>
+				</div>
+			</div>
+
+		<input type="hidden" name="task" value="" />
+		<input type="hidden" name="return" value="<?php echo $this->return_page;?>" />
+		<?php if ($this->params->get('enable_category', 0) == 1) : ?>
+			<input type="hidden" name="jform[catid]" value="<?php echo $this->params->get('catid', 1);?>"/>
+		<?php endif;?>
+		<?php echo JHtml::_('form.token'); ?>
+	</fieldset>
+</form>
+</div>
diff --git a/templates/beez3/html/com_content/form/index.html b/templates/beez3/html/com_content/form/index.html
new file mode 100644
index 000000000000..2efb97f319a3
--- /dev/null
+++ b/templates/beez3/html/com_content/form/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/templates/beez3/html/message.php b/templates/beez3/html/message.php
new file mode 100644
index 000000000000..f2b6db6c3518
--- /dev/null
+++ b/templates/beez3/html/message.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @package     Joomla.Site
+ * @subpackage  Template.Beez3
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license     GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+defined('_JEXEC') or die;
+
+function renderMessage($msgList)
+{
+	$buffer  = null;
+	$buffer .= "\n<div id=\"system-message-container\">";
+
+	if (is_array($msgList))
+	{
+		$buffer .= "\n<dl id=\"system-message\">";
+		foreach ($msgList as $type => $msgs)
+		{
+			if (count($msgs))
+			{
+				$buffer .= "\n<dt class=\"" . strtolower($type) . "\">" . JText::_($type) . "</dt>";
+				$buffer .= "\n<dd class=\"" . strtolower($type) . " message\">";
+				$buffer .= "\n\t<ul>";
+				foreach ($msgs as $msg)
+				{
+					$buffer .= "\n\t\t<li>" . $msg . "</li>";
+				}
+				$buffer .= "\n\t</ul>";
+				$buffer .= "\n</dd>";
+			}
+			$buffer .= "\n</dl>";
+		}
+
+		$buffer .= "\n</div>";
+		return $buffer;
+	}
+}
diff --git a/templates/protostar/component.php b/templates/protostar/component.php
index bb6f7e069b4a..06dc16cbde78 100644
--- a/templates/protostar/component.php
+++ b/templates/protostar/component.php
@@ -13,12 +13,18 @@
 $doc   = JFactory::getDocument();
 $this->language = $doc->language;
 $this->direction = $doc->direction;
+
+// Add Stylesheets
+$doc->addStyleSheet('templates/'.$this->template.'/css/template.css');
+
+// Load optional rtl Bootstrap css and Bootstrap bugfixes
+JHtmlBootstrap::loadCss($includeMaincss = false, $this->direction);
+
 ?>
 <!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
 <head>
 <jdoc:include type="head" />
-<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css" type="text/css" />
 <!--[if lt IE 9]>
 	<script src="<?php echo $this->baseurl ?>/media/jui/js/html5.js"></script>
 <![endif]-->
diff --git a/templates/protostar/css/template.css b/templates/protostar/css/template.css
index 171ccaa27b1b..e74612f98d6e 100644
--- a/templates/protostar/css/template.css
+++ b/templates/protostar/css/template.css
@@ -1888,7 +1888,6 @@ table .span24 {
 	position: relative;
 	height: 0;
 	overflow: hidden;
-	overflow: visible \9;
 	-webkit-transition: height .35s ease;
 	-moz-transition: height .35s ease;
 	-o-transition: height .35s ease;
diff --git a/templates/protostar/error.php b/templates/protostar/error.php
index 46fe8a995609..4ff9d3544725 100644
--- a/templates/protostar/error.php
+++ b/templates/protostar/error.php
@@ -110,11 +110,17 @@
 	<![endif]-->
 </head>
 
-<body class="site <?php echo $option . " view-" . $view . " layout-" . $layout . " task-" . $task . " itemid-" . $itemid . " ";?> <?php if ($params->get('fluidContainer')) { echo "fluid"; } ?>">
+<body class="site <?php echo $option
+	. ' view-' . $view
+	. ($layout ? ' layout-' . $layout : ' no-layout')
+	. ($task ? ' task-' . $task : ' no-task')
+	. ($itemid ? ' itemid-' . $itemid : '')
+	. ($params->get('fluidContainer') ? ' fluid' : '');
+?>">
 
 	<!-- Body -->
 	<div class="body">
-		<div class="container<?php if ($params->get('fluidContainer')) { echo "-fluid"; } ?>">
+		<div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>">
 			<!-- Header -->
 			<div class="header">
 				<div class="header-inner clearfix">
@@ -193,7 +199,7 @@
 	</div>
 	<!-- Footer -->
 	<div class="footer">
-		<div class="container<?php if ($params->get('fluidContainer')) { echo "-fluid"; } ?>">
+		<div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>">
 			<hr />
 			<jdoc:include type="modules" name="footer" style="none" />
 			<p class="pull-right"><a href="#top" id="back-top"><?php echo JText::_('TPL_PROTOSTAR_BACKTOTOP'); ?></a></p>
diff --git a/templates/protostar/html/modules.php b/templates/protostar/html/modules.php
index 0cf9644f4e37..738a3dfc3694 100644
--- a/templates/protostar/html/modules.php
+++ b/templates/protostar/html/modules.php
@@ -39,7 +39,7 @@ function modChrome_well($module, &$params, &$attribs)
 		echo "<div class=\"well " . htmlspecialchars($params->get('moduleclass_sfx')) . "\">";
 		if ($module->showtitle)
 		{
-			echo "<div class=\"page-header\"><strong>" . $module->title . "</strong></div>";
+			echo "<h3 class=\"page-header\">" . $module->title . "</h3>";
 		}
 		echo $module->content;
 		echo "</div>";
diff --git a/templates/protostar/index.php b/templates/protostar/index.php
index 5d2a78ead14d..9e6133aa4eea 100644
--- a/templates/protostar/index.php
+++ b/templates/protostar/index.php
@@ -9,6 +9,9 @@
 
 defined('_JEXEC') or die;
 
+// Getting params from template
+$params = JFactory::getApplication()->getTemplate(true)->params;
+
 $app = JFactory::getApplication();
 $doc = JFactory::getDocument();
 $this->language = $doc->language;
@@ -129,10 +132,17 @@
 	<![endif]-->
 </head>
 
-<body class="site <?php echo $option . " view-" . $view . " layout-" . $layout . " task-" . $task . " itemid-" . $itemid . " ";?> <?php if ($this->params->get('fluidContainer')) { echo "fluid"; } ?>">
+<body class="site <?php echo $option
+	. ' view-' . $view
+	. ($layout ? ' layout-' . $layout : ' no-layout')
+	. ($task ? ' task-' . $task : ' no-task')
+	. ($itemid ? ' itemid-' . $itemid : '')
+	. ($params->get('fluidContainer') ? ' fluid' : '');
+?>">
+
 	<!-- Body -->
 	<div class="body">
-		<div class="container<?php if ($this->params->get('fluidContainer')) { echo "-fluid"; } ?>">
+		<div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>">
 			<!-- Header -->
 			<div class="header">
 				<div class="header-inner clearfix">
@@ -180,7 +190,7 @@
 	</div>
 	<!-- Footer -->
 	<div class="footer">
-		<div class="container<?php if ($this->params->get('fluidContainer')) { echo "-fluid"; } ?>">
+		<div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>">
 			<hr />
 			<jdoc:include type="modules" name="footer" style="none" />
 			<p class="pull-right"><a href="#top" id="back-top"><?php echo JText::_('TPL_PROTOSTAR_BACKTOTOP'); ?></a></p>
diff --git a/tests/CHANGELOG b/tests/CHANGELOG
index de780ab9ce2e..0ebc1c52a9d8 100644
--- a/tests/CHANGELOG
+++ b/tests/CHANGELOG
@@ -26,6 +26,19 @@ $ -> Language fix or change
 - -> Removed
 ! -> Note
 
+01-Jan-2013 Mark Dexter
+ # Fix failing webdriver test due to change in Module edit UI
+
+27-Dec-2012 Michael Babker
+ ^ Sync core test framework to the Platform
+ + Add tests for Editor and Layout packages
+
+22-Dec-2012 Mark Dexter
+ # Fix failing system tests caused by markup changes
+
+21-Dec-2012 Mark Dexter
+ + Add tests for module manager.
+
 18-Dec-2012 Mark Dexter
  # Fix intermittent failures in Webdriver tests
 
diff --git a/tests/system/suite/articles/article0001Test.php b/tests/system/suite/articles/article0001Test.php
index d35643e4ff91..94e510486dd4 100644
--- a/tests/system/suite/articles/article0001Test.php
+++ b/tests/system/suite/articles/article0001Test.php
@@ -113,13 +113,13 @@ function testEditPermission()
 		$this->jPrint ("Go to Home and check that edit icon is visible" . "\n");
 		$this->click("link=Home");
 		$this->waitForPageToLoad("30000");
-		$this->assertTrue($this->isElementPresent("//i[contains(@class, 'icon-edit')]"));
+		$this->assertTrue($this->isElementPresent("//span[contains(@class, 'icon-edit')]"));
 		$this->jPrint ("Drill to Sample Data article and check that edit icon is visible" . "\n");
 		$this->click("link=Home");
 		$this->waitForPageToLoad("30000");
 		$this->click("link=Sample Sites");
 		$this->waitForPageToLoad("30000");
-		$this->assertTrue($this->isElementPresent("//i[contains(@class, 'icon-edit')]"));
+		$this->assertTrue($this->isElementPresent("//span[contains(@class, 'icon-edit')]"));
 		$this->click("link=Home");
 		$this->waitForPageToLoad("30000");
 		$this->jPrint ("Logout of front end." . "\n");
@@ -127,11 +127,11 @@ function testEditPermission()
 		$this->jPrint ("Go to home and check that edit icon is not visible." . "\n");
 		$this->click("link=Home");
 		$this->waitForPageToLoad("30000");
-		$this->assertFalse($this->isElementPresent("//i[contains(@class, 'icon-edit')]"));
+		$this->assertFalse($this->isElementPresent("//span[contains(@class, 'icon-edit')]"));
 		$this->jPrint ("Drill to Sample Data article and check that edit icon is not visible." . "\n");
 		$this->click("link=Sample Sites");
 		$this->waitForPageToLoad("30000");
-		$this->assertFalse($this->isElementPresent("//i[contains(@class, 'icon-edit')]"));
+		$this->assertFalse($this->isElementPresent("//span[contains(@class, 'icon-edit')]"));
 		$this->click("link=Home");
 		$this->waitForPageToLoad("30000");
 		$this->deleteAllVisibleCookies();
diff --git a/tests/system/suite/articles/article0002Test.php b/tests/system/suite/articles/article0002Test.php
index 1986bac9e9f8..53753a1afdc7 100644
--- a/tests/system/suite/articles/article0002Test.php
+++ b/tests/system/suite/articles/article0002Test.php
@@ -21,7 +21,7 @@ function testEditArticle()
 		$this->gotoSite();
 		$this->doFrontEndLogin();
 		$this->jPrint ("Edit article in front end\n");
-	    $this->click("//i[contains(@class, 'icon-edit')]");
+	    $this->click("//span[contains(@class, 'icon-edit')]");
 	    $this->waitForPageToLoad("30000");
 	    $salt = mt_rand();
 	    $testText="Test text $salt";
@@ -48,7 +48,7 @@ function testEditArticle()
 	    $this->assertEquals($testText, $this->getText("//div[@class='items-leading']/div[@class='leading-0']//p"));
 
 	    $this->jPrint ("Open again for editing in front end\n");
-	    $this->click("//i[contains(@class, 'icon-edit')]");
+	    $this->click("//span[contains(@class, 'icon-edit')]");
 	    $this->waitForPageToLoad("30000");
 	    $text="<p>Congratulations! You have a Joomla! site! Joomla! makes your site easy to build a website " .
 	    		"just the way you want it and keep it simple to update and maintain.</p> " .
diff --git a/tests/system/suite/articles/article0003Test.php b/tests/system/suite/articles/article0003Test.php
index f6994767a8da..38315ab55eaf 100644
--- a/tests/system/suite/articles/article0003Test.php
+++ b/tests/system/suite/articles/article0003Test.php
@@ -416,8 +416,8 @@ function testCategoryListState()
 		$this->open($link);
 		$this->waitForPageToLoad("30000");
 		$this->jPrint ("Check initial conditions for list\n");
-		$this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a"));
-		$this->assertStringEndsWith("Getting Help", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a"));
+		$this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a"));
+		$this->assertStringEndsWith("Getting Help", $this->getText("//tbody/tr[2]/td/a"));
 
 		$this->jPrint ("Unpublish Joomla! category\n");
 		$this->gotoAdmin();
@@ -459,17 +459,17 @@ function testCategoryListState()
 		$this->gotoSite();
 		$this->open($link);
 		$this->waitForPageToLoad("30000");
-		$this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a"));
-		$this->assertStringEndsWith("Getting Started", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a"));
+		$this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a"));
+		$this->assertStringEndsWith("Getting Started", $this->getText("//tbody/tr[2]/td/a"));
 
 		$this->jPrint ("Log into site and check that Getting Help shows as Unpublished\n");
 		$this->gotoSite();
 		$this->doFrontEndLogin();
 		$this->open($link);
 		$this->waitForPageToLoad("30000");
-		$this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a"));
-		$this->assertStringEndsWith("Getting Help", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a"));
-		$this->assertTrue($this->isElementPresent("//div[@class='category-list']//a[contains(text(), 'Getting Help')]/../../../li[contains(@class, 'system-unpublished')]"));
+		$this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a"));
+		$this->assertStringEndsWith("Getting Help", $this->getText("//tbody/tr[2]/td/a"));
+		$this->assertTrue($this->isElementPresent("//div[@class='category-list']//a[contains(text(), 'Getting Help')]/../span[contains(text(), 'Unpublished')]"));
 
 		$this->jPrint ("Change Getting Help state to Archived\n");
 		$this->gotoAdmin();
@@ -482,8 +482,8 @@ function testCategoryListState()
 		$this->doFrontEndLogin();
 		$this->open($link);
 		$this->waitForPageToLoad("30000");
-		$this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a"));
-		$this->assertStringEndsWith("Getting Help", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a"));
+		$this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a"));
+		$this->assertStringEndsWith("Getting Help", $this->getText("//tbody/tr[2]/td/a"));
 
 		$this->jPrint ("Log out of Front End\n");
 		$this->gotoSite();
diff --git a/tests/system/suite/cache/cache0001Test.php b/tests/system/suite/cache/cache0001Test.php
index 2ec74a3d888c..38456c6ad038 100644
--- a/tests/system/suite/cache/cache0001Test.php
+++ b/tests/system/suite/cache/cache0001Test.php
@@ -76,18 +76,18 @@ function testContentCache()
 		$this->jPrint ("Test Article Category List\n");
 		$link = $this->cfg->path . 'index.php/using-joomla/extensions/components/content-component/article-category-list';
 		$this->open($link, 'true');
-		$this->assertTrue($this->isElementPresent("//strong[@class='list-title'][contains(.,'Professionals')]"));
+		$this->assertTrue($this->isElementPresent("//td[@class='list-title'][contains(.,'Professionals')]"));
 		$this->jPrint ("Change Professionals to different category and check that it is no longer shown\n");
 		$this->gotoAdmin();
 		$this->changeCategory('Professionals', 'Article Manager', 'Uncategorised');
 		$this->gotoSite();
 		$this->open($link, 'true');
-		$this->assertFalse($this->isElementPresent("//strong[@class='list-title'][contains(.,'Professionals')]"));
+		$this->assertFalse($this->isElementPresent("//td[@class='list-title'][contains(.,'Professionals')]"));
 		$this->jPrint ("Change Professionals back to Joomla! and make sure it is shown\n");
 		$this->changeCategory('Professionals', 'Article Manager', 'Joomla!');
 		$this->gotoSite();
 		$this->open($link, 'true');
-		$this->assertTrue($this->isElementPresent("//strong[@class='list-title'][contains(.,'Professionals')]"));
+		$this->assertTrue($this->isElementPresent("//td[@class='list-title'][contains(.,'Professionals')]"));
 
 		$this->jPrint ("Test Article Featured\n");
 		$link = $this->cfg->path . 'index.php/using-joomla/extensions/components/content-component/featured-articles';
diff --git a/tests/system/webdriver/Pages/Extensions/ModuleEditPage.php b/tests/system/webdriver/Pages/Extensions/ModuleEditPage.php
new file mode 100644
index 000000000000..fc58ec5a2002
--- /dev/null
+++ b/tests/system/webdriver/Pages/Extensions/ModuleEditPage.php
@@ -0,0 +1,92 @@
+<?php
+
+use SeleniumClient\By;
+use SeleniumClient\SelectElement;
+use SeleniumClient\WebDriver;
+use SeleniumClient\WebDriverWait;
+use SeleniumClient\DesiredCapabilities;
+use SeleniumClient\WebElement;
+
+/**
+ * Class for the back-end control panel screen.
+ *
+ */
+class ModuleEditPage extends AdminEditPage
+{
+	protected $waitForXpath =  "//form[@id='module-form']";
+	protected $url = 'administrator/index.php?option=com_users&view=module&layout=edit';
+
+	/**
+	 * Array of
+	 * @var array expected id values for tab div elements
+	 */
+	public $tabs = array('details', 'options', 'assignment');
+
+	public $tabLabels = array('Details', 'Options', 'Menu Assignment');
+
+	/**
+	 * Associative array of expected input fields for the Account Details and Basic Settings tabs
+	 * Assigned User Groups tab is omitted because that depends on the groups set up in the sample data
+	 * @var unknown_type
+	 */
+	public $inputFields = array (
+			array('label' => 'Title', 'id' => 'jform_title', 'type' => 'input', 'tab' => 'details'),
+			array('label' => 'Show Title', 'id' => 'jform_showtitle', 'type' => 'fieldset', 'tab' => 'details'),
+			array('label' => 'Position', 'id' => 'jform_position', 'type' => 'select', 'tab' => 'details'),
+			array('label' => 'Status', 'id' => 'jform_published', 'type' => 'fieldset', 'tab' => 'details'),
+			array('label' => 'Access', 'id' => 'jform_access', 'type' => 'select', 'tab' => 'details'),
+			array('label' => 'Ordering', 'id' => 'jform_ordering', 'type' => 'select', 'tab' => 'details'),
+			array('label' => 'Start Publishing', 'id' => 'jform_publish_up', 'type' => 'input', 'tab' => 'details'),
+			array('label' => 'Finish Publishing', 'id' => 'jform_publish_down', 'type' => 'input', 'tab' => 'details'),
+			array('label' => 'Language', 'id' => 'jform_language', 'type' => 'select', 'tab' => 'details'),
+			array('label' => 'Note', 'id' => 'jform_note', 'type' => 'input', 'tab' => 'details'),
+			array('label' => 'Parent Category', 'id' => 'jform_params_parent', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Category Descriptions', 'id' => 'jform_params_show_description', 'type' => 'fieldset', 'tab' => 'options'),
+			array('label' => 'Show Subcategories', 'id' => 'jform_params_show_children', 'type' => 'fieldset', 'tab' => 'options'),
+			array('label' => '# First Subcategories', 'id' => 'jform_params_count', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Maximum Level Depth', 'id' => 'jform_params_maxlevel', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Alternative Layout', 'id' => 'jform_params_layout', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Heading style', 'id' => 'jform_params_item_heading', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Module Class Suffix', 'id' => 'jform_params_moduleclass_sfx', 'type' => 'input', 'tab' => 'options'),
+			array('label' => 'Caching', 'id' => 'jform_params_owncache', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Cache Time', 'id' => 'jform_params_cache_time', 'type' => 'input', 'tab' => 'options'),
+			array('label' => 'Module Tag', 'id' => 'jform_params_module_tag', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Bootstrap Size', 'id' => 'jform_params_bootstrap_size', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Header Tag', 'id' => 'jform_params_header_tag', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Header Class', 'id' => 'jform_params_header_class', 'type' => 'input', 'tab' => 'options'),
+			array('label' => 'Module Style', 'id' => 'jform_params_style', 'type' => 'select', 'tab' => 'options'),
+			array('label' => 'Module Assignment', 'id' => 'jform_menus', 'type' => 'div', 'tab' => 'assignment'),
+			);
+
+	/**
+	 * Checks for Type and calls special method for this field.
+	 * Otherwise, just calls parent::getFieldValue()
+	 *
+	 * @see AdminEditPage::getFieldValue()
+	 */
+	public function getFieldValue($label)
+	{
+		if ($label == 'Type')
+		{
+			return $this->getModuleType();
+		}
+		else
+		{
+			return parent::getFieldValue($label);
+		}
+	}
+
+	protected function getModuleType()
+	{
+		$elements = $this->driver->findElements(By::xPath("//span[@class = 'label']"));
+		if (count($elements >= 2))
+		{
+			return $elements[1]->getText();
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/tests/system/webdriver/Pages/Extensions/ModuleManagerPage.php b/tests/system/webdriver/Pages/Extensions/ModuleManagerPage.php
new file mode 100644
index 000000000000..cd9ad5a6cda6
--- /dev/null
+++ b/tests/system/webdriver/Pages/Extensions/ModuleManagerPage.php
@@ -0,0 +1,183 @@
+<?php
+
+use SeleniumClient\By;
+use SeleniumClient\SelectElement;
+use SeleniumClient\WebDriver;
+use SeleniumClient\WebDriverWait;
+use SeleniumClient\DesiredCapabilities;
+use SeleniumClient\WebElement;
+
+/**
+ * Class for the back-end control panel screen.
+ *
+ */
+class ModuleManagerPage extends AdminManagerPage
+{
+	protected $waitForXpath =  "//ul/li/a[@href='index.php?option=com_modules']";
+	protected $url = 'administrator/index.php?option=com_modules';
+
+	public $filters = array(
+			'Site' => 'filter_client_id',
+			'Status' => 'filter_state',
+			'Position' => 'filter_position',
+			'Type' => 'filter_module',
+			'Access' => 'filter_access',
+			'Language' => 'filter_language',
+			);
+
+	public $toolbar = array (
+			'New' => 'toolbar-new',
+			'Edit' => 'toolbar-edit',
+			'Duplicate' => 'toolbar-copy',
+			'Publish' => 'toolbar-publish',
+			'Unpublish' => 'toolbar-unpublish',
+			'Check In' => 'toolbar-checkin',
+			'Trash' => 'toolbar-trash',
+			'Empty Trash' => 'toolbar-delete',
+			'Batch' => 'toolbar-batch',
+			'Options' => 'toolbar-options',
+			'Help' => 'toolbar-help',
+			);
+
+	public $submenu = array (
+			'option=com_modules&filter_client_id=0',
+			'option=com_modules&filter_client_id=1',
+			);
+
+	public $moduleTypes = array(
+			array('client' => 'site', 'name' => 'Archived Articles'),
+			array('client' => 'site', 'name' => 'Articles - Newsflash'),
+			array('client' => 'site', 'name' => 'Articles - Related Articles'),
+			array('client' => 'site', 'name' => 'Articles Categories'),
+			array('client' => 'site', 'name' => 'Articles Category'),
+			array('client' => 'site', 'name' => 'Banners'),
+			array('client' => 'site', 'name' => 'Breadcrumbs'),
+			array('client' => 'site', 'name' => 'Custom HTML'),
+			array('client' => 'site', 'name' => 'Feed Display'),
+			array('client' => 'site', 'name' => 'Footer'),
+			array('client' => 'site', 'name' => 'Language Switcher'),
+			array('client' => 'site', 'name' => 'Latest News'),
+			array('client' => 'site', 'name' => 'Latest Users'),
+			array('client' => 'site', 'name' => 'Login'),
+			array('client' => 'site', 'name' => 'Menu'),
+			array('client' => 'site', 'name' => 'Most Read Content'),
+			array('client' => 'site', 'name' => 'Random Image'),
+			array('client' => 'site', 'name' => 'Search'),
+			array('client' => 'site', 'name' => 'Smart Search Module'),
+			array('client' => 'site', 'name' => 'Statistics'),
+			array('client' => 'site', 'name' => 'Syndication Feeds'),
+			array('client' => 'site', 'name' => 'Weblinks'),
+			array('client' => 'site', 'name' => 'Who\'s Online'),
+			array('client' => 'site', 'name' => 'Wrapper'),
+			array('client' => 'administrator', 'name' => 'Admin sub-Menu'),
+			array('client' => 'administrator', 'name' => 'Administrator Menu'),
+			array('client' => 'administrator', 'name' => 'Custom HTML'),
+			array('client' => 'administrator', 'name' => 'Feed Display'),
+			array('client' => 'administrator', 'name' => 'Joomla! Version Information'),
+			array('client' => 'administrator', 'name' => 'Latest News'),
+			array('client' => 'administrator', 'name' => 'Logged-in Users'),
+			array('client' => 'administrator', 'name' => 'Login Form'),
+			array('client' => 'administrator', 'name' => 'Multilanguage Status'),
+			array('client' => 'administrator', 'name' => 'Popular Articles'),
+			array('client' => 'administrator', 'name' => 'Quick Icons'),
+			array('client' => 'administrator', 'name' => 'Statistics'),
+			array('client' => 'administrator', 'name' => 'Title'),
+			array('client' => 'administrator', 'name' => 'Toolbar'),
+			array('client' => 'administrator', 'name' => 'User Status'),
+			);
+
+	public function addModule($title = 'Test Module', $client = 'Site', $type = 'Archived Articles', $otherFields = null)
+	{
+		$this->setFilter('filter_client_id', $client);
+		$this->clickButton('toolbar-new');
+		$this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., '" . $type . "')]"))->click();
+		$moduleEditPage = $this->test->getPageObject('ModuleEditPage');
+		$moduleEditPage->setFieldValues(array('Title' => $title));
+		if (is_array($otherFields))
+		{
+			$moduleEditPage->setFieldValues($otherFields);
+		}
+		$moduleEditPage->clickButton('toolbar-save');
+		$this->test->getPageObject('ModuleManagerPage');
+	}
+
+	public function changeModuleState($name, $state = 'published')
+	{
+		$this->searchFor($name);
+		$this->checkAll();
+		if (strtolower($state) == 'published')
+		{
+			$this->clickButton('toolbar-publish');
+			$this->driver->waitForElementUntilIsPresent(By::xPath($this->waitForXpath));
+		}
+		elseif (strtolower($state) == 'unpublished')
+		{
+			$this->clickButton('toolbar-unpublish');
+			$this->driver->waitForElementUntilIsPresent(By::xPath($this->waitForXpath));
+		}
+		$this->searchFor();
+	}
+
+	public function editModule($name, $fields, $groupNames = array())
+	{
+		$this->clickItem($name);
+		$moduleEditPage = $this->test->getPageObject('ModuleEditPage');
+		$moduleEditPage->setFieldValues($fields);
+		$moduleEditPage->clickButton('toolbar-save');
+		$this->test->getPageObject('ModuleManagerPage');
+		$this->searchFor();
+	}
+
+	/**
+	 * Gets the modules field values. In turn calls getFieldValues of AdminManagerPage after selecting module client.
+	 */
+	public function getModuleFieldValues($title, $client, $fieldNames = array())
+	{
+		$this->setFilter('filter_client_id', $client);
+		return $this->getFieldValues('ModuleEditPage', $title, $fieldNames);
+	}
+
+	/**
+	 * Gets all module types available
+	 *
+	 * @return  array  associative array of 'site' or 'administrator' => module name
+	 */
+	public function getModuleTypes()
+	{
+		$result = array();
+		$clients = array('Site', 'Administrator');
+		foreach ($clients as $client)
+		{
+			$this->setFilter('filter_client_id', $client);
+			$this->clickButton('toolbar-new');
+			$this->driver->waitForElementUntilIsPresent(By::xPath("//h2[contains(., 'Select a Module Type')]"));
+			$el = $this->driver->findElement(By::id('new-modules-list'));
+			$moduleElements = $el->findElements(By::xPath("//a/strong"));
+			foreach ($moduleElements as $element)
+			{
+				$result[] = array('client' => strtolower($client), 'name' => $element->getText());
+			}
+			$this->driver->findElement(By::xPath("//button[contains(., 'Cancel')]"))->click();
+			$moduleManagerPage = $this->test->getPageObject('ModuleManagerPage');
+		}
+
+		return $result;
+	}
+
+	public function getState($title)
+	{
+		$result = false;
+		$this->searchFor($title);
+		$text = $this->driver->findElement(By::xPath("//tbody/tr//a[contains(@onclick, 'listItemTask')]"))->getAttribute(@onclick);
+		if (strpos($text, 'modules.publish') > 0)
+		{
+			$result = 'unpublished';
+		}
+		elseif (strpos($text, 'modules.unpublish') > 0)
+		{
+			$result = 'published';
+		}
+		$this->searchFor();
+		return $result;
+	}
+}
\ No newline at end of file
diff --git a/tests/system/webdriver/Pages/System/AdminEditPage.php b/tests/system/webdriver/Pages/System/AdminEditPage.php
index c0503e9a82a0..504a9c5c693d 100644
--- a/tests/system/webdriver/Pages/System/AdminEditPage.php
+++ b/tests/system/webdriver/Pages/System/AdminEditPage.php
@@ -85,7 +85,7 @@ protected function getInputField($tabId, $label)
 		// Skip non-visible fields (affects permissions)
 		if ($object->labelText == '')
 		{
-			continue;
+			return false;
 		}
 		$inputId = $label->getAttribute('for');
 		$testInput = $this->driver->findElements(By::id($inputId));
@@ -295,8 +295,7 @@ protected function setSelectValues (array $values)
 			elseif (strpos($type, 'chzn-container-single') > 0)
 			{
 				$this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']/a"))->click();
-				$this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']//input"))->sendKeys($values['value']);
-				$this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']//ul[@class='chzn-results']/li[contains(.,'" . $values['value'] . "')]"))->click();
+				$this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']//input"))->sendKeys($values['value'] . "\n");
 			}
 		}
 		else
diff --git a/tests/system/webdriver/Pages/System/AdminManagerPage.php b/tests/system/webdriver/Pages/System/AdminManagerPage.php
index a04a35d36b35..c8c037aa73af 100644
--- a/tests/system/webdriver/Pages/System/AdminManagerPage.php
+++ b/tests/system/webdriver/Pages/System/AdminManagerPage.php
@@ -29,7 +29,13 @@ abstract class AdminManagerPage extends AdminPage
 
 	public function checkAll()
 	{
-		$this->driver->findElement(By::xPath("//thead//input[@name='checkall-toggle' or @name='toggle']"))->click();
+ 		$el = $this->driver->findElement(By::xPath("//thead//input[@name='checkall-toggle' or @name='toggle']"));
+
+ 		// Work-around for intermittant bug with click() on checkboxes -- click until checked
+ 		while (!$el->isSelected())
+ 		{
+ 				$el->click();
+ 		}
 	}
 
 	public function clickItem($name)
@@ -143,7 +149,6 @@ public function searchFor($search = false)
 
 	public function setFilter($idOrLabel, $value)
 	{
-		$result = false;
 		$filters = array_change_key_case($this->filters, CASE_LOWER);
 		$idOrLabel = strtolower($idOrLabel);
 		$filterId = '';
@@ -169,9 +174,8 @@ public function setFilter($idOrLabel, $value)
 			$this->driver->findElement(By::xPath("//div[@id='" . $filterId . "_chzn']/a"))->click();
 			$this->driver->findElement(By::xPath("//div[@id='" . $filterId . "_chzn']//ul[@class='chzn-results']/li[contains(.,'" . $value . "')]"))->click();
 			$this->driver->waitForElementUntilIsPresent(By::xPath($this->waitForXpath));
-			$result =  true;
 		}
-		return $result;
+		return $this->test->getPageObject(get_class($this));
 	}
 
 	public function deleteItem($name)
diff --git a/tests/system/webdriver/tests/extensions/ModuleManager0001Test.php b/tests/system/webdriver/tests/extensions/ModuleManager0001Test.php
new file mode 100644
index 000000000000..06ff15994671
--- /dev/null
+++ b/tests/system/webdriver/tests/extensions/ModuleManager0001Test.php
@@ -0,0 +1,189 @@
+<?php
+
+require_once 'JoomlaWebdriverTestCase.php';
+
+use SeleniumClient\By;
+use SeleniumClient\SelectElement;
+use SeleniumClient\WebDriver;
+use SeleniumClient\WebDriverWait;
+use SeleniumClient\DesiredCapabilities;
+
+/**
+ * This class tests the Module Manager: Add / Edit Module Screen
+ * @author Mark
+ *
+ */
+class ModuleManager0001Test extends JoomlaWebdriverTestCase
+{
+	/**
+	 *
+	 * @var ModuleManagerPage
+	 */
+	protected $moduleManagerPage = null; // Global configuration page
+
+	public function setUp()
+	{
+		parent::setUp();
+		$cpPage = $this->doAdminLogin();
+		/* @var $cpPage ControlPanelPage */
+		$this->moduleManagerPage = $cpPage->clickMenu('Module Manager', 'ModuleManagerPage');
+	}
+
+	public function tearDown()
+	{
+		$this->doAdminLogout();
+		parent::tearDown();
+	}
+
+	/**
+	 * @test
+	 */
+	public function constructor_OpenEditScreen_ModuleEditOpened()
+	{
+		$this->moduleManagerPage->clickButton('new');
+		$this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., 'Articles Categories')]"))->click();
+		/* @var $moduleEditPage ModuleEditPage */
+		$moduleEditPage = $this->getPageObject('ModuleEditPage');
+		$moduleEditPage->clickButton('cancel');
+		$this->moduleManagerPage = $this->getPageObject('ModuleManagerPage');
+	}
+
+	/**
+	 * @test
+	 */
+	public function getTabIds_ScreenDisplayed_EqualExpected()
+	{
+		$this->moduleManagerPage->clickButton('toolbar-new');
+		$this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., 'Articles Categories')]"))->click();
+		$moduleEditPage = $this->getPageObject('ModuleEditPage');
+		$textArray = $moduleEditPage->getTabIds();
+		$this->assertEquals($moduleEditPage->tabs, $textArray, 'Tab labels should match expected values.');
+		$moduleEditPage->clickButton('toolbar-cancel');
+		$this->moduleManagerPage = $this->getPageObject('ModuleManagerPage');
+	}
+
+	/**
+	 * @test
+	 */
+	public function getModuleTypes_GetsTypes_EqualsExpected()
+	{
+		$actualModuleTypes = $this->moduleManagerPage->getModuleTypes();
+// 		foreach ($actualModuleTypes as $type)
+// 		{
+// 			echo "array('client' => '" . $type['client'] . "', 'name' => '" . $type['name'] . "'),\n";
+// 		}
+		$this->assertEquals($this->moduleManagerPage->moduleTypes, $actualModuleTypes, 'Module types should equal expected');
+	}
+
+	/**
+	 * @test
+	 */
+	public function getAllInputFields_ScreenDisplayed_EqualExpected()
+	{
+		$this->moduleManagerPage->clickButton('toolbar-new');
+		$this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., 'Articles Categories')]"))->click();
+		$moduleEditPage = $this->getPageObject('ModuleEditPage');
+		$testElements = $moduleEditPage->getAllInputFields($moduleEditPage->tabs);
+		$actualFields = array();
+		foreach ($testElements as $el)
+		{
+			$el->labelText = (substr($el->labelText, -2) == ' *') ? substr($el->labelText, 0, -2) : $el->labelText;
+			$actualFields[] = array('label' => $el->labelText, 'id' => $el->id, 'type' => $el->tag, 'tab' => $el->tab);
+		}
+		$this->assertEquals($moduleEditPage->inputFields, $actualFields);
+		$moduleEditPage->clickButton('toolbar-cancel');
+		$this->moduleManagerPage = $this->getPageObject('ModuleManagerPage');
+	}
+
+	/**
+	 * @test
+	 */
+	public function addModule_WithFieldDefaults_ModuleAdded()
+	{
+		$this->assertFalse($this->moduleManagerPage->getRowNumber('Test Module'), 'Test module should not be present');
+		$this->moduleManagerPage->addModule();
+		$message = $this->moduleManagerPage->getAlertMessage();
+		$this->assertTrue(strpos($message, 'Module successfully saved') >= 0, 'Module save should return success');
+		$this->moduleManagerPage->searchFor('Test Module');
+		$this->assertTrue($this->moduleManagerPage->getRowNumber('Test Module') > 0, 'Test module should be in row 2');
+		$this->moduleManagerPage->deleteItem('Test Module');
+		$this->assertFalse($this->moduleManagerPage->getRowNumber('Test Module'), 'Test module should not be present');
+	}
+
+	/**
+	 * @test
+	 */
+	public function addModule_WithGivenFields_ModuleAdded()
+	{
+		$salt = rand();
+		$title = 'Module' . $salt;
+		$client = 'Administrator';
+		$type = 'Custom HTML';
+		$position = 'mynewposition';
+		$suffix = 'mysuffix';
+		$otherFields = array('Position' => $position, 'Module Class Suffix' => $suffix);
+		$this->moduleManagerPage->setFilter('filter_client_id', $client)->searchFor($title);
+		$this->assertFalse($this->moduleManagerPage->getRowNumber($title), 'Test module should not be present');
+		$this->moduleManagerPage->addModule($title, $client, $type, $otherFields);
+		$message = $this->moduleManagerPage->getAlertMessage();
+		$this->assertTrue(strpos($message, 'Module successfully saved') >= 0, 'Module save should return success');
+		$this->moduleManagerPage->searchFor($title);
+		$this->assertTrue($this->moduleManagerPage->getRowNumber($title) > 0, 'Test module should be present');
+
+		$values = $this->moduleManagerPage->getModuleFieldValues($title, $client, array('Position', 'Module Class Suffix'));
+		$this->assertEquals(array($position, $suffix), $values, 'Actual position and suffix should match expected');
+		$this->moduleManagerPage->deleteItem($title);
+		$this->moduleManagerPage->searchFor($title);
+		$this->assertFalse($this->moduleManagerPage->getRowNumber($title), 'Test module should not be present');
+		$this->moduleManagerPage->searchFor();
+	}
+
+	/**
+	 * @test
+	 */
+	public function editModule_ChangeFields_FieldsChanged()
+	{
+		$salt = rand();
+		$title = 'Module' . $salt;
+		$client = 'Administrator';
+		$type = 'Custom HTML';
+		$position = 'myposition';
+		$suffix = 'mysuffix';
+		$otherFields = array('Position' => $position, 'Module Class Suffix' => $suffix);
+		$this->moduleManagerPage->setFilter('filter_client_id', $client)->searchFor($title);
+		$this->assertFalse($this->moduleManagerPage->getRowNumber($title), 'Test module should not be present');
+		$this->moduleManagerPage->addModule($title, $client, $type, $otherFields);
+		$message = $this->moduleManagerPage->getAlertMessage();
+		$this->assertTrue(strpos($message, 'Module successfully saved') >= 0, 'Module save should return success');
+		$this->moduleManagerPage->searchFor($title);
+		$this->assertTrue($this->moduleManagerPage->getRowNumber($title) > 0, 'Test module should be present');
+
+		$values = $this->moduleManagerPage->getModuleFieldValues($title, $client, array('Position', 'Module Class Suffix'));
+		$this->assertEquals(array($position, $suffix), $values, 'Actual position and suffix should match expected');
+
+		$newTitle = 'New Module Title' . $salt;
+		$newPosition = 'mynewposition';
+		$newSuffix = 'mynewsuffix';
+		$newNote = 'my new note';
+		$this->moduleManagerPage->editModule($title, array('Title' => $newTitle, 'Position' => $newPosition, 'Module Class Suffix' => $newSuffix, 'Note' => $newNote));
+
+		$values = $this->moduleManagerPage->getModuleFieldValues($newTitle, $client, array('Title', 'Position', 'Module Class Suffix', 'Note'));
+		$this->assertEquals(array($newTitle, $newPosition, $newSuffix, $newNote), $values, 'Actual values should match expected');
+		$this->moduleManagerPage->deleteItem($newTitle);
+	}
+
+	/**
+	 * @test
+	 */
+	public function changeModuleState_ChangeEnabledUsingToolbar_EnabledChanged()
+	{
+		$this->moduleManagerPage->addModule('Test Module');
+		$state = $this->moduleManagerPage->getState('Test Module');
+		$this->assertEquals('published', $state, 'Initial state should be published');
+		$this->moduleManagerPage->changeModuleState('Test Module', 'unpublished');
+		$state = $this->moduleManagerPage->getState('Test Module');
+		$this->assertEquals('unpublished', $state, 'State should be unpublished');
+		$this->moduleManagerPage->deleteItem('Test Module');
+	}
+
+}
\ No newline at end of file
diff --git a/tests/system/webdriver/tests/phpunit.xml.dist b/tests/system/webdriver/tests/phpunit.xml.dist
index 0a52c83e672e..5b3850bd156a 100644
--- a/tests/system/webdriver/tests/phpunit.xml.dist
+++ b/tests/system/webdriver/tests/phpunit.xml.dist
@@ -4,6 +4,7 @@
 		<testsuite name="tests">
 			<directory>installation</directory>
 			<directory>control_panel</directory>
+			<directory>extensions</directory>
 			<directory>menus</directory>
 			<directory>users</directory>
 		</testsuite>
diff --git a/tests/unit/core/case/case.php b/tests/unit/core/case/case.php
index fcdfe0696b61..6dc1fef23b9f 100644
--- a/tests/unit/core/case/case.php
+++ b/tests/unit/core/case/case.php
@@ -36,6 +36,7 @@ abstract class TestCase extends PHPUnit_Framework_TestCase
 		'application' => null,
 		'config' => null,
 		'dates' => null,
+		'database' => null,
 		'session' => null,
 		'language' => null,
 		'document' => null,
@@ -46,7 +47,7 @@ abstract class TestCase extends PHPUnit_Framework_TestCase
 	/**
 	 * Receives the callback from JError and logs the required error information for the test.
 	 *
-	 * @param   JException	$error  The JException object from JError
+	 * @param   JException  $error  The JException object from JError
 	 *
 	 * @return  boolean  To not continue with JError processing
 	 *
@@ -116,7 +117,7 @@ public function assignMockReturns($mockObject, $array)
 	 * If a test expects a JError to be raised, it should call this setExpectedError first
 	 * If you don't call this method first, the test will fail.
 	 *
-	 * @param   JException  $error
+	 * @param   JException  $error  The JException object from JError
 	 *
 	 * @return  JException
 	 *
@@ -140,6 +141,7 @@ public function expectedErrorCallback($error)
 			if ($thisError)
 			{
 				unset($this->expectedErrors[$key]);
+
 				return $error;
 			}
 
@@ -288,7 +290,7 @@ class_exists('JApplicationWeb');
 	 *
 	 * If passed without argument, the array is initialized if it hsn't been already
 	 *
-	 * @param   mixed  $error
+	 * @param   mixed  $error  The JException object to expect.
 	 *
 	 * @return  void
 	 *
@@ -346,6 +348,7 @@ protected function restoreFactoryState()
 		JFactory::$document = $this->_stashedFactoryState['document'];
 		JFactory::$acl = $this->_stashedFactoryState['acl'];
 		JFactory::$mailer = $this->_stashedFactoryState['mailer'];
+		JFactory::$database = $this->_stashedFactoryState['database'];
 	}
 
 	/**
@@ -386,6 +389,7 @@ protected function saveFactoryState()
 		$this->_stashedFactoryState['document'] = JFactory::$document;
 		$this->_stashedFactoryState['acl'] = JFactory::$acl;
 		$this->_stashedFactoryState['mailer'] = JFactory::$mailer;
+		$this->_stashedFactoryState['database'] = JFactory::$database;
 	}
 
 	/**
@@ -422,10 +426,11 @@ protected function setErrorHandlers($errorHandlers)
 	}
 
 	/**
-	 * Sets the JError error handlers to callback mode and points them at the test
-	 * logging method.
+	 * Sets the JError error handlers to callback mode and points them at the test logging method.
+	 *
+	 * @param   string  $testName  The name of the test class for which to set the error callback method.
 	 *
-	 * @return	void
+	 * @return  void
 	 *
 	 * @since   12.1
 	 */
diff --git a/tests/unit/core/case/database.php b/tests/unit/core/case/database.php
index 1f3b6e18c895..c652d96d526c 100644
--- a/tests/unit/core/case/database.php
+++ b/tests/unit/core/case/database.php
@@ -56,7 +56,7 @@ abstract class TestCaseDatabase extends PHPUnit_Extensions_Database_TestCase
 	/**
 	 * Receives the callback from JError and logs the required error information for the test.
 	 *
-	 * @param	JException	The JException object from JError
+	 * @param   JException  $error  The JException object from JError
 	 *
 	 * @return	bool	To not continue with JError processing
 	 *
@@ -313,7 +313,14 @@ class_exists('JApplicationWeb');
 	 */
 	protected function getConnection()
 	{
-		return $this->createDefaultDBConnection(self::$driver->getConnection(), ':memory:');
+		if (!is_null(self::$driver))
+		{
+			return $this->createDefaultDBConnection(self::$driver->getConnection(), ':memory:');
+		}
+		else
+		{
+			return null;
+		}
 	}
 
 	/**
@@ -452,10 +459,11 @@ protected function setErrorHandlers($errorHandlers)
 	}
 
 	/**
-	 * Sets the JError error handlers to callback mode and points them at the test
-	 * logging method.
+	 * Sets the JError error handlers to callback mode and points them at the test logging method.
+	 *
+	 * @param   string  $testName  The name of the test class for which to set the error callback method.
 	 *
-	 * @return	void
+	 * @return  void
 	 *
 	 * @since   12.1
 	 */
diff --git a/tests/unit/core/case/database/oracle.php b/tests/unit/core/case/database/oracle.php
index 65c6375c80ee..93ed708d82d3 100644
--- a/tests/unit/core/case/database/oracle.php
+++ b/tests/unit/core/case/database/oracle.php
@@ -76,7 +76,7 @@ public static function setUpBeforeClass()
 					$components = parse_url($v);
 					self::$_options['host'] = $components['host'];
 					self::$_options['port'] = $components['port'];
-					self::$_options['database'] = $components['path'];
+					self::$_options['database'] = ltrim($components['path'], '/');
 					break;
 				case 'user':
 					self::$_options['user'] = $v;
@@ -84,6 +84,12 @@ public static function setUpBeforeClass()
 				case 'pass':
 					self::$_options['password'] = $v;
 					break;
+				case 'dbschema':
+					self::$_options['schema'] = $v;
+					break;
+				case 'prefix':
+					self::$_options['prefix'] = $v;
+					break;
 			}
 		}
 
@@ -136,7 +142,7 @@ protected function getConnection()
 	{
 		// Compile the connection DSN.
 		$dsn = 'oci:dbname=//' . self::$_options['host'] . ':' . self::$_options['port'] . '/' . self::$_options['database'];
-		$dsn .= ';charset=' . self::$_options['host'];
+		$dsn .= ';charset=' . self::$_options['charset'];
 
 		// Create the PDO object from the DSN and options.
 		$pdo = new PDO($dsn, self::$_options['user'], self::$_options['password']);
diff --git a/tests/unit/core/mock/cache.php b/tests/unit/core/mock/cache.php
index b345da16049a..4e10364f7946 100644
--- a/tests/unit/core/mock/cache.php
+++ b/tests/unit/core/mock/cache.php
@@ -68,11 +68,11 @@ public static function create(TestCase $test, $data = array())
 	/**
 	 * Callback for the cache get method.
 	 *
-	 * @param  string  $id  The name of the cache key to retrieve.
+	 * @param   string  $id  The name of the cache key to retrieve.
 	 *
-	 * @return mixed  The value of the key or null if it does not exist.
+	 * @return  mixed  The value of the key or null if it does not exist.
 	 *
-	 * @since  12.1
+	 * @since   12.1
 	 */
 	public function mockGet($id)
 	{
@@ -82,12 +82,12 @@ public function mockGet($id)
 	/**
 	 * Callback for the cache get method.
 	 *
-	 * @param  string  $key    The name of the cache key.
-	 * @param  string  $group  Dummy group.
+	 * @param   string  $value  The value to store.
+	 * @param   string  $id     The name of the cache key.
 	 *
-	 * @return mixed  The value of the key or null if it does not exist.
+	 * @return  mixed  The value of the key or null if it does not exist.
 	 *
-	 * @since  12.1
+	 * @since   12.1
 	 */
 	public function mockStore($value, $id)
 	{
diff --git a/tests/unit/core/mock/database/driver.php b/tests/unit/core/mock/database/driver.php
index 2740d57a58f4..56ddb85222fb 100644
--- a/tests/unit/core/mock/database/driver.php
+++ b/tests/unit/core/mock/database/driver.php
@@ -25,7 +25,9 @@ class TestMockDatabaseDriver
 	/**
 	 * Creates and instance of the mock JDatabase object.
 	 *
-	 * @param   object  $test   A test object.
+	 * @param   object  $test        A test object.
+	 * @param   string  $nullDate    A null date string for the driver.
+	 * @param   string  $dateFormat  A date format for the driver.
 	 *
 	 * @return  object
 	 *
@@ -115,26 +117,41 @@ public static function create($test, $nullDate = '0000-00-00 00:00:00', $dateFor
 		$test->assignMockCallbacks(
 			$mockObject,
 			array(
-				'getQuery' => array((is_callable(array($test, 'mockGetQuery')) ? $test : get_called_class()), 'mockGetQuery'),
-				'quote' => array((is_callable(array($test, 'mockQuote')) ? $test : get_called_class()), 'mockQuote'),
-				'quoteName' => array((is_callable(array($test, 'mockQuoteName')) ? $test : get_called_class()), 'mockQuoteName'),
-				'setQuery' => array((is_callable(array($test, 'mockSetQuery')) ? $test : get_called_class()), 'mockSetQuery'),
+				'escape' => array((is_callable(array($test, 'mockEscape')) ? $test : __CLASS__), 'mockEscape'),
+				'getQuery' => array((is_callable(array($test, 'mockGetQuery')) ? $test : __CLASS__), 'mockGetQuery'),
+				'quote' => array((is_callable(array($test, 'mockQuote')) ? $test : __CLASS__), 'mockQuote'),
+				'quoteName' => array((is_callable(array($test, 'mockQuoteName')) ? $test : __CLASS__), 'mockQuoteName'),
+				'setQuery' => array((is_callable(array($test, 'mockSetQuery')) ? $test : __CLASS__), 'mockSetQuery'),
 			)
 		);
 
 		return $mockObject;
 	}
 
+	/**
+	 * Callback for the dbo escape method.
+	 *
+	 * @param   string  $text  The input text.
+	 *
+	 * @return  string
+	 *
+	 * @since   11.3
+	 */
+	public function mockEscape($text)
+	{
+		return "_{$text}_";
+	}
+
 	/**
 	 * Callback for the dbo setQuery method.
 	 *
-	 * @param  string  $new  True to get a new query, false to get the last query.
+	 * @param   boolean  $new  True to get a new query, false to get the last query.
 	 *
-	 * @return void
+	 * @return  void
 	 *
-	 * @since  11.3
+	 * @since   11.3
 	 */
-	public function mockGetQuery($new = false)
+	public static function mockGetQuery($new = false)
 	{
 		if ($new)
 		{
@@ -149,27 +166,37 @@ public function mockGetQuery($new = false)
 	/**
 	 * Mocking the quote method.
 	 *
-	 * @param  string  $value  The value to be quoted.
+	 * @param   string  $value  The value to be quoted.
 	 *
-	 * @return string  The value passed wrapped in MySQL quotes.
+	 * @return  string  The value passed wrapped in MySQL quotes.
 	 *
-	 * @since  11.3
+	 * @since   11.3
 	 */
-	public function mockQuote($value)
+	public static function mockQuote($value, $escape = true)
 	{
-		return "'$value'";
+		if (is_array($value))
+		{
+			foreach ($value as $k => $v)
+			{
+				$value[$k] = self::mockQuote($v, $escape);
+			}
+
+			return $value;
+		}
+
+		return '\'' . ($escape ? self::mockEscape($value) : $value) . '\'';
 	}
 
 	/**
 	 * Mock quoteName method.
 	 *
-	 * @param  string  $value  The value to be quoted.
+	 * @param   string  $value  The value to be quoted.
 	 *
-	 * @return string  The value passed wrapped in MySQL quotes.
+	 * @return  string  The value passed wrapped in MySQL quotes.
 	 *
-	 * @since  11.3
+	 * @since   11.3
 	 */
-	public function mockQuoteName($value)
+	public static function mockQuoteName($value)
 	{
 		return "`$value`";
 	}
@@ -177,13 +204,13 @@ public function mockQuoteName($value)
 	/**
 	 * Callback for the dbo setQuery method.
 	 *
-	 * @param  string  $query  The query.
+	 * @param   string  $query  The query.
 	 *
-	 * @return void
+	 * @return  void
 	 *
-	 * @since  11.3
+	 * @since   11.3
 	 */
-	public function mockSetQuery($query)
+	public static function mockSetQuery($query)
 	{
 		self::$lastQuery = $query;
 	}
diff --git a/tests/unit/core/mock/dispatcher.php b/tests/unit/core/mock/dispatcher.php
index 6a4aff617eae..9a188e7f6926 100644
--- a/tests/unit/core/mock/dispatcher.php
+++ b/tests/unit/core/mock/dispatcher.php
@@ -33,7 +33,8 @@ class TestMockDispatcher
 	/**
 	 * Creates and instance of the mock JLanguage object.
 	 *
-	 * @param   object  $test   A test object.
+	 * @param   object   $test      A test object.
+	 * @param   boolean  $defaults  True to create the default mock handlers and triggers.
 	 *
 	 * @return  object
 	 *
diff --git a/tests/unit/core/mock/document.php b/tests/unit/core/mock/document.php
index 75eccf9f713c..b6dba5309b55 100644
--- a/tests/unit/core/mock/document.php
+++ b/tests/unit/core/mock/document.php
@@ -17,7 +17,7 @@ class TestMockDocument
 	/**
 	 * Creates and instance of the mock JLanguage object.
 	 *
-	 * @param   object  $test   A test object.
+	 * @param   object  $test  A test object.
 	 *
 	 * @return  object
 	 *
diff --git a/tests/unit/core/mock/language.php b/tests/unit/core/mock/language.php
index 8461940a8114..68c79b3d3112 100644
--- a/tests/unit/core/mock/language.php
+++ b/tests/unit/core/mock/language.php
@@ -17,7 +17,7 @@ class TestMockLanguage
 	/**
 	 * Creates and instance of the mock JLanguage object.
 	 *
-	 * @param   object  $test   A test object.
+	 * @param   object  $test  A test object.
 	 *
 	 * @return  object
 	 *
diff --git a/tests/unit/core/mock/rules.php b/tests/unit/core/mock/rules.php
index cba3bf7c7854..c7642ba5a2cc 100644
--- a/tests/unit/core/mock/rules.php
+++ b/tests/unit/core/mock/rules.php
@@ -17,7 +17,7 @@ class TestMockRules
 	/**
 	 * Creates an instance of the mock JDatabase object.
 	 *
-	 * @param   object  $test    A test object.
+	 * @param   object  $test  A test object.
 	 *
 	 * @return  object
 	 *
@@ -55,7 +55,8 @@ public static function create($test)
 	/**
 	 * Mocking the allow method.
 	 *
-	 * @param   string  $action  The action.
+	 * @param   string   $action    The action.
+	 * @param   integer  $identity  The identity ID.
 	 *
 	 * @return  mixed  Boolean or null.
 	 *
diff --git a/tests/unit/core/reflection/reflection.php b/tests/unit/core/reflection/reflection.php
index fc2353592b8a..def249b36c37 100644
--- a/tests/unit/core/reflection/reflection.php
+++ b/tests/unit/core/reflection/reflection.php
@@ -17,8 +17,8 @@ class TestReflection
 	/**
 	 * Helper method that gets a protected or private property in a class by relfection.
 	 *
-	 * @param   object  $object
-	 * @param   string  $propertyName
+	 * @param   object  $object        The object from which to return the property value.
+	 * @param   string  $propertyName  The name of the property to return.
 	 *
 	 * @return  mixed  The value of the property.
 	 *
@@ -57,8 +57,8 @@ public static function getValue($object, $propertyName)
 	 *
 	 * $this->asserTrue(TestCase::invoke('methodName', $this->object, 123));
 	 *
-	 * @param   object  $object
-	 * @param   string  $methodName
+	 * @param   object  $object      The object on which to invoke the method.
+	 * @param   string  $methodName  The name of the method to invoke.
 	 *
 	 * @return  mixed
 	 *
@@ -84,9 +84,9 @@ public static function invoke($object, $methodName)
 	/**
 	 * Helper method that sets a protected or private property in a class by relfection.
 	 *
-	 * @param   object  $object
-	 * @param   string  $propertyName
-	 * @param   mixed   $value
+	 * @param   object  $object        The object for which to set the property.
+	 * @param   string  $propertyName  The name of the property to set.
+	 * @param   mixed   $value         The value to set for the property.
 	 *
 	 * @return  void
 	 *
@@ -105,7 +105,7 @@ public static function setValue($object, $propertyName, $value)
 			$property->setValue($object, $value);
 		}
 		// Hrm, maybe dealing with a private property in the parent class.
-		else if (get_parent_class($object))
+		elseif (get_parent_class($object))
 		{
 			$property = new \ReflectionProperty(get_parent_class($object), $propertyName);
 			$property->setAccessible(true);
diff --git a/tests/unit/suites/libraries/editor/JEditorTest.php b/tests/unit/suites/libraries/editor/JEditorTest.php
new file mode 100644
index 000000000000..324ba067430f
--- /dev/null
+++ b/tests/unit/suites/libraries/editor/JEditorTest.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * @package	    Joomla.UnitTest
+ * @subpackage  Editor
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license	    GNU General Public License version 2 or later; see LICENSE
+ */
+
+/**
+ * Test class for JEditor.
+ */
+class JEditorTest extends PHPUnit_Framework_TestCase
+{
+	/**
+	 * @var JEditor
+	 */
+	protected $object;
+
+	/**
+	 * Sets up the fixture, for example, opens a network connection.
+	 * This method is called before a test is executed.
+	 */
+	protected function setUp()
+	{
+		$this->object = new JEditor;
+	}
+
+	/**
+	 * Tears down the fixture, for example, closes a network connection.
+	 * This method is called after a test is executed.
+	 */
+	protected function tearDown()
+	{
+	}
+
+	/**
+	 * Tests the getInstance method
+	 *
+	 * @return  void
+	 *
+	 * @since   3.0
+	 */
+	public function testGetInstance()
+	{
+		$this->assertThat(
+			JEditor::getInstance('none'),
+			$this->isInstanceOf('JEditor')
+		);
+	}
+
+	/**
+	 * Tests the getState method
+	 *
+	 * @return  void
+	 *
+	 * @since   3.0
+	 */
+	public function testGetState()
+	{
+		// Preload the state to test it
+		TestReflection::setValue($this->object, '_state', 'JEditor::getState()');
+
+		$this->assertThat(
+			$this->object->getState(),
+			$this->equalTo('JEditor::getState()')
+		);
+	}
+
+	/**
+	 * @todo   Implement testAttach().
+	 */
+	public function testAttach()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+
+	/**
+	 * @todo   Implement testDetach().
+	 */
+	public function testDetach()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+
+	/**
+	 * @todo   Implement testInitialise().
+	 */
+	public function testInitialise()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+
+	/**
+	 * @todo   Implement testDisplay().
+	 */
+	public function testDisplay()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+
+	/**
+	 * @todo   Implement testSave().
+	 */
+	public function testSave()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+
+	/**
+	 * @todo   Implement testGetContent().
+	 */
+	public function testGetContent()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+
+	/**
+	 * @todo   Implement testSetContent().
+	 */
+	public function testSetContent()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+
+	/**
+	 * @todo   Implement testGetButtons().
+	 */
+	public function testGetButtons()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+}
diff --git a/tests/unit/suites/libraries/layout/JLayoutBaseTest.php b/tests/unit/suites/libraries/layout/JLayoutBaseTest.php
new file mode 100644
index 000000000000..dcc6474ce1ba
--- /dev/null
+++ b/tests/unit/suites/libraries/layout/JLayoutBaseTest.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * @package	    Joomla.UnitTest
+ * @subpackage  Layout
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license	    GNU General Public License version 2 or later; see LICENSE
+ */
+
+/**
+ * Test class for JLayoutBase.
+ */
+class JLayoutBaseTest extends PHPUnit_Framework_TestCase
+{
+	/**
+	 * @var JLayoutBase
+	 */
+	protected $object;
+
+	/**
+	 * Sets up the fixture, for example, opens a network connection.
+	 * This method is called before a test is executed.
+	 */
+	protected function setUp()
+	{
+		$this->object = new JLayoutBase;
+	}
+
+	/**
+	 * Tears down the fixture, for example, closes a network connection.
+	 * This method is called after a test is executed.
+	 */
+	protected function tearDown()
+	{
+	}
+
+	/**
+	 * Tests the escape method
+	 *
+	 * @return  void
+	 *
+	 * @since   3.0
+	 */
+	public function testEscape()
+	{
+		$this->assertThat(
+			$this->object->escape('This is cool & fun to use!'),
+			$this->equalTo('This is cool &amp; fun to use!')
+		);
+	}
+
+	/**
+	 * Tests the render method
+	 *
+	 * @return  void
+	 *
+	 * @since   3.0
+	 */
+	public function testRender()
+	{
+		$this->assertThat(
+			$this->object->render('Data'),
+			$this->equalTo(''),
+			'JLayoutBase::render does not render an output'
+		);
+	}
+}
diff --git a/tests/unit/suites/libraries/layout/JLayoutFileTest.php b/tests/unit/suites/libraries/layout/JLayoutFileTest.php
new file mode 100644
index 000000000000..af19476815de
--- /dev/null
+++ b/tests/unit/suites/libraries/layout/JLayoutFileTest.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @package	    Joomla.UnitTest
+ * @subpackage  Layout
+ *
+ * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
+ * @license	    GNU General Public License version 2 or later; see LICENSE
+ */
+
+/**
+ * Test class for JLayoutFile.
+ */
+class JLayoutFileTest extends TestCase
+{
+	/**
+	 * @var JLayoutFile
+	 */
+	protected $object;
+
+	/**
+	 * Sets up the fixture, for example, opens a network connection.
+	 * This method is called before a test is executed.
+	 */
+	protected function setUp()
+	{
+		$this->saveFactoryState();
+
+		JFactory::$application = $this->getMockApplication();
+
+		$this->object = new JLayoutFile('joomla.sidebars.submenu');
+	}
+
+	/**
+	 * Tears down the fixture, for example, closes a network connection.
+	 * This method is called after a test is executed.
+	 */
+	protected function tearDown()
+	{
+		$this->restoreFactoryState();
+	}
+
+	/**
+	 * Tests the escape method
+	 *
+	 * @return  void
+	 *
+	 * @since   3.0
+	 */
+	public function testEscape()
+	{
+		$this->assertThat(
+			$this->object->escape('This is cool & fun to use!'),
+			$this->equalTo('This is cool &amp; fun to use!')
+		);
+	}
+
+	/**
+	 * @todo   Implement testRender().
+	 */
+	public function testRender()
+	{
+		// Remove the following lines when you implement this test.
+		$this->markTestIncomplete('This test has not been implemented yet.');
+	}
+}