<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>wp-content/themes/tarski/app/api/constants_helper.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/api/deprecated.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/api/hooks.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/display/credits.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/display/debug.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/display/feed_link.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/display/no_posts.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/display/options_page.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/js/crir.js</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/js/page_select.js</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/js/tarski.js</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/app/launcher.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/images/page_select.png</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/library/classes/page_select.php</filename>
    </added>
    <added>
      <filename>wp-content/themes/tarski/library/core.php</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,39 +1,105 @@
 # Changelog
 
-### Version 2.1.4 [&amp;sect](http://tarskitheme.com/2008/07/13/214-release/)
 
+### Version 2.3 [&amp;sect;](http://tarskitheme.com/)
+
+#### New features
+ 
+ * Options page now compatible with &lt;abbr title=&quot;Secure Sockets Layer&quot;&gt;SSL&lt;/abbr&gt; admin (r731)
+ 
+#### Tweaks
+  
+  * Don't serialise the data passed to `update_option` (r763)
+  * Show version cache notice when _file_, not directory, isn't writable (r760)
+  * Clean up `cache_is_writable` function (r759, r761)
+  * Add `js.css` to the list of disallowed custom styles (r755)
+  * Hide the search form label faster (r754)
+  * `multiple_tag_titles` function refactored (r751)
+  * Upgrade functionality refactored (r746)
+  * Author count check only runs when posts are saved or deleted (r745, r748)
+  * Author count checks how many authors have published posts (r744)
+  * `wpdb-&gt;prepare()` method used for author count query (r742)
+  * Deprecated `version_to_integer` and `version_newer_than` functions (r739)
+  * Switched to native &lt;abbr title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/abbr&gt; `version_compare` function (r737)
+  * Options page access granted only to users with `edit_themes` capability (r736)
+  * Stylesheets for the admin section enqueued, not printed (r734)
+ 
 #### Bug fixes
+
+  * Added more checks to upgrade functionality (r746)
+  * Made navbar selector work better in Internet Explorer (r735)
+  * Excluded navbar links category from the links page (r733)
+
+
+### Version 2.2.2 [&amp;sect;](http://tarskitheme.com/2008/07/19/22-release/)
+
+#### Bug fixes
+
+  * Replace defunct function reference in Links template (r724)
+
+
+### Version 2.2.1 [&amp;sect;](http://tarskitheme.com/2008/07/19/22-release/)
+
+#### Bug fixes
+	
+  * Always show authors if Tarski options haven't been saved (r715)
+
+
+### Version 2.2 [&amp;sect;](http://tarskitheme.com/2008/07/19/22-release/)
+  
+#### New features
+
+  * Navbar selector: sub-page lists are collapsible (r606)
+  * Navbar selector: sub-pages are listed as such (r599)
   
+#### Tweaks
+
+  * Better handling of attachments (r697, r698)
+  * Tweaked gallery styling to better fit Tarski (r695)
+  * Add &lt;abbr title=&quot;WordPress&quot;&gt;WP&lt;/abbr&gt; standard alignment classes (r694)
+  * Added inline hooks documentation (r657, r658, r661, r665, r666, r667)
+  * Deprecated `tarski_excerpt` function (r664)
+  * Deprecated `tarski_date` function in favour of a &lt;abbr title=&quot;WordPress&quot;&gt;WP&lt;/abbr&gt; core function (r662)
+  * Removed filter from `implode_proper` function (r660)
+  * Removed functions deprecated two major releases ago (r659)
+  * Removed defunct Tarski search widget (r656)
+  * Paginate index pages by default (r652)
+  * Remove pagination from index pages more elegantly and efficiently (r651)
+  * Replaced Tarski links widget with a filter (r642)
+
+
+### Version 2.1.4 [&amp;sect;](http://tarskitheme.com/2008/07/13/214-release/)
+
+#### Bug fixes
+
   * Correct overzealous calendar widget &lt;abbr title=&quot;Cascading Stylesheets&quot;&gt;CSS&lt;/abbr&gt; (r687)
   * Sidebar upgrade routine only runs for older versions (r684)
   * Smarter unserialisation for Tarski options (r645)
-  * Fix Archives template layout for Janus style (r643)
+  * Fix Archives template layout for Janus style (r644)
 
-### Version 2.1.3 [&amp;sect][39]
 
-  [38]: http://tarskitheme.com/2008/05/20/21-release/
+### Version 2.1.3 [&amp;sect;](http://tarskitheme.com/2008/05/20/21-release/)
 
 #### Bug fixes
 
-  * Revert to using `curl_setopt()` for &lt;abbr title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/abbr&gt; 4 compatibility (r630)
+  * Revert to using `curl_setopt()` for &lt;abbr title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/abbr&gt; 4 compatibility (r629)
 
-### Version 2.1.2 [&amp;sect;][38]
 
-  [38]: http://tarskitheme.com/2008/05/20/21-release/
+### Version 2.1.2 [&amp;sect;](http://tarskitheme.com/2008/05/20/21-release/)
 
 #### Bug fixes
-  
-  * Fix version check timeout issues (r620, r625)
-  * Add missing textdomain to forum link (r615)
 
-### Version 2.1.1 [&amp;sect;][37]
+  * Fix version check timeout issues (r620)
+  * Add missing textdomain to forum link (r614)
+
 
-	[37]: http://tarskitheme.com/2008/05/20/21-release/
+### Version 2.1.1 [&amp;sect;](http://tarskitheme.com/2008/05/20/21-release/)
 	
 #### Bug fixes
 
-  * Fixed navbar character encoding problem (r597)
-  * Corrected Janus feed icon position (r593)
+  * Fixed navbar character encoding problem (r595)
+  * Corrected Janus feed icon position (r592)
+
 
 ### Version 2.1 [&amp;sect;][36]
 </diff>
      <filename>wp-content/themes/tarski/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,7 @@
 					&lt;h1 class=&quot;title&quot;&gt;&lt;?php echo multiple_tag_titles(); ?&gt;&lt;/h1&gt;
 				&lt;/div&gt;
 				&lt;div class=&quot;content&quot;&gt;
-					&lt;p&gt;&lt;?php printf( __('You are currently browsing articles tagged %s.','tarski'), multiple_tag_titles('strong') ); ?&gt;&lt;/p&gt;
+					&lt;p&gt;&lt;?php printf( __('You are currently browsing articles tagged %s.','tarski'), multiple_tag_titles('&lt;strong&gt;%s&lt;/strong&gt;') ); ?&gt;&lt;/p&gt;
 				&lt;/div&gt;
 					
 			&lt;?php } elseif(is_author()) { // Author header ?&gt;
@@ -43,10 +43,10 @@
 			&lt;?php } elseif(is_day()) { // Daily archive header ?&gt;
 
 				&lt;div class=&quot;meta&quot;&gt;
-					&lt;h1 class=&quot;title&quot;&gt;&lt;?php echo tarski_date(); ?&gt;&lt;/h1&gt;
+					&lt;h1 class=&quot;title&quot;&gt;&lt;?php the_time(get_option('date_format')); ?&gt;&lt;/h1&gt;
 				&lt;/div&gt;
 				&lt;div class=&quot;content&quot;&gt;
-					&lt;p&gt;&lt;?php printf( __('You are currently browsing the daily archive for %s.','tarski'), '&lt;strong&gt;' . tarski_date() . '&lt;/strong&gt;' ); ?&gt;&lt;/p&gt;
+					&lt;p&gt;&lt;?php printf( __('You are currently browsing the daily archive for %s.','tarski'), '&lt;strong&gt;' . get_the_time(get_option('date_format')) . '&lt;/strong&gt;' ); ?&gt;&lt;/p&gt;
 				&lt;/div&gt;
 
 			&lt;?php } elseif(is_month()) { // Monthly archive header ?&gt;</diff>
      <filename>wp-content/themes/tarski/archive.php</filename>
    </modified>
    <modified>
      <diff>@@ -96,7 +96,7 @@ if($comments || comments_open()) { ?&gt;
 	&lt;?php if($user_ID) { // if user is logged in ?&gt;
 		
 		&lt;div id=&quot;info-input&quot; class=&quot;secondary content&quot;&gt;
-			&lt;p class=&quot;userinfo&quot;&gt;&lt;?php _e('You are logged in as ','tarski'); ?&gt;&lt;a href=&quot;&lt;?php echo get_option('siteurl'); ?&gt;/wp-admin/profile.php&quot;&gt;&lt;?php echo $user_identity; ?&gt;&lt;/a&gt;.&lt;/p&gt;
+			&lt;p class=&quot;userinfo&quot;&gt;&lt;?php _e('You are logged in as ','tarski'); ?&gt;&lt;a href=&quot;&lt;?php echo admin_url('profile.php'); ?&gt;&quot;&gt;&lt;?php echo $user_identity; ?&gt;&lt;/a&gt;.&lt;/p&gt;
 			&lt;p&gt;&lt;a href=&quot;&lt;?php bloginfo('wpurl'); ?&gt;/wp-login.php?action=logout&quot; title=&quot;&lt;?php _e('Log out of this account','tarski') ?&gt;&quot;&gt;&lt;?php _e('Logout &amp;raquo;','tarski'); ?&gt;&lt;/a&gt;&lt;/p&gt;
 		&lt;/div&gt; &lt;!-- /info fields --&gt;
 </diff>
      <filename>wp-content/themes/tarski/comments.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,35 +1,37 @@
 &lt;?php
 
 // Path constants
-define('TARSKILIB', TEMPLATEPATH . '/library');
-define('TARSKICLASSES', TARSKILIB . '/classes');
-define('TARSKIHELPERS', TARSKILIB . '/helpers');
-define('TARSKIDISPLAY', TARSKILIB . '/display');
-define('TARSKIWIDGETS', TARSKILIB . '/widgets');
-define('TARSKICACHE', TARSKILIB . '/cache');
+define('TARSKICLASSES', TEMPLATEPATH . '/library/classes');
+define('TARSKIHELPERS', TEMPLATEPATH . '/library/helpers');
+define('TARSKIDISPLAY', TEMPLATEPATH . '/app/display');
+define('TARSKICACHE', TEMPLATEPATH . '/app/cache');
 define('TARSKIVERSIONFILE', 'http://tarskitheme.com/version.atom');
 
-// Classes
+// Core library files
+require_once(TEMPLATEPATH . '/library/core.php');
 require_once(TARSKICLASSES . '/options.php');
-require_once(TARSKICLASSES . '/version.php');
 require_once(TARSKICLASSES . '/asset.php');
 
-// Helpers
-require_once(TARSKIHELPERS . '/hooks.php');
-require_once(TARSKIHELPERS . '/admin_helper.php');
+// Admin library files
+if (is_admin()) {
+	require_once(TARSKICLASSES . '/version.php');
+	require_once(TARSKICLASSES . '/page_select.php');
+	require_once(TARSKIHELPERS . '/admin_helper.php');
+}
+
+// Various helper libraries
 require_once(TARSKIHELPERS . '/template_helper.php');
 require_once(TARSKIHELPERS . '/content_helper.php');
 require_once(TARSKIHELPERS . '/author_helper.php');
 require_once(TARSKIHELPERS . '/tag_helper.php');
-
-// Widgets
 require_once(TARSKIHELPERS . '/widgets.php');
 
-// Deprecated
-require_once(TARSKIHELPERS . '/constants_helper.php');
-include_once(TARSKIHELPERS . '/deprecated.php');
+// API files
+require_once(TEMPLATEPATH . '/app/api/hooks.php');
+require_once(TEMPLATEPATH . '/app/api/constants_helper.php');
+include_once(TEMPLATEPATH . '/app/api/deprecated.php');
 
 // Launch
-require_once(TARSKILIB . '/launcher.php');
+require_once(TEMPLATEPATH . '/app/launcher.php');
 
 ?&gt;
\ No newline at end of file</diff>
      <filename>wp-content/themes/tarski/functions.php</filename>
    </modified>
    <modified>
      <diff>@@ -13,12 +13,19 @@
 					
 					&lt;div class=&quot;meta&quot;&gt;
 						&lt;h1 class=&quot;title entry-title&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/h1&gt;
-						&lt;?php if(is_single()) { ?&gt;
-							&lt;p class=&quot;metadata&quot;&gt;&lt;?php echo '&lt;span class=&quot;date updated&quot;&gt;' . tarski_date() . '&lt;/span&gt;';
-							tarski_post_categories_link();
-							tarski_author_posts_link();
-							tarski_comments_link();
-							edit_post_link(__('edit','tarski'),' &lt;span class=&quot;edit&quot;&gt;(',')&lt;/span&gt;'); ?&gt;&lt;/p&gt;
+						&lt;?php if(is_attachment()) { ?&gt;
+							&lt;p class=&quot;metadata&quot;&gt;&lt;?php
+								echo '&lt;span class=&quot;date updated&quot;&gt;' . get_the_time(get_option('date_format')) . '&lt;/span&gt;';
+								edit_post_link(__('edit','tarski'),' &lt;span class=&quot;edit&quot;&gt;(',')&lt;/span&gt;');
+							?&gt;&lt;/p&gt;
+						&lt;?php } elseif(is_single()) { ?&gt;
+							&lt;p class=&quot;metadata&quot;&gt;&lt;?php
+								echo '&lt;span class=&quot;date updated&quot;&gt;' . get_the_time(get_option('date_format')) . '&lt;/span&gt;';
+								tarski_post_categories_link();
+								tarski_author_posts_link();
+								tarski_comments_link();
+								edit_post_link(__('edit','tarski'),' &lt;span class=&quot;edit&quot;&gt;(',')&lt;/span&gt;');
+							?&gt;&lt;/p&gt;
 						&lt;?php } else { ?&gt;
 							&lt;?php edit_post_link(__('edit page','tarski'), '&lt;p class=&quot;metadata&quot;&gt;&lt;span class=&quot;edit&quot;&gt;(', ')&lt;/span&gt;&lt;/p&gt;'); ?&gt;
 						&lt;?php } ?&gt;
@@ -65,7 +72,7 @@
 
 
 
-&lt;?php if(is_single() || is_page()) { comments_template(); } ?&gt;
+&lt;?php if(!is_attachment() &amp;&amp; (is_single() || is_page())) { comments_template(); } ?&gt;
 
 
 </diff>
      <filename>wp-content/themes/tarski/index.php</filename>
    </modified>
    <modified>
      <diff>@@ -7,6 +7,9 @@
  */
 class Asset {
 	
+	/**
+	 * Initialisation method which calls all other methods in turn.
+	 */
 	function init() {
 		$assets = new Asset;
 		
@@ -18,12 +21,16 @@ class Asset {
 		$assets-&gt;output();
 	}
 	
+	/**
+	 * Generate meta elements pertaining to Tarski and the site.
+	 * 
+	 * @hook filter tarski_asset_meta
+	 * Filters the metadata generated by the Asset wrapper.
+	 */
 	function meta() {
-		// Theme name and version
 		$themeversion = theme_version();
 		$meta = array(&quot;&lt;meta name=\&quot;wp_theme\&quot; content=\&quot;Tarski $themeversion\&quot; /&gt;&quot;);
 		
-		// Description
 		global $wp_query;
 		$excerpt = trim(strip_tags(wp_specialchars($wp_query-&gt;post-&gt;post_excerpt)));
 
@@ -35,15 +42,24 @@ class Asset {
 		if ( strlen($description) )
 			$meta[] = &quot;&lt;meta name=\&quot;description\&quot; content=\&quot;$description\&quot; /&gt;&quot;;
 		
-		// Robots
 		if(get_option('blog_public') != '0')
 			$meta[] = '&lt;meta name=&quot;robots&quot; content=&quot;all&quot; /&gt;';
 			
 		$this-&gt;meta = apply_filters('tarski_asset_meta', $meta);
 	}
 	
+	/**
+	 * Generate links to the various Tarski stylesheets.
+	 * 
+	 * @hook filter tarski_style_array
+	 * Filter the array of stylesheet attributes from which the stylesheet
+	 * links are generated.
+	 * 
+	 * @hook filter tarski_stylesheets
+	 * Filter the raw stylesheet link elements before they're printed to
+	 * the document.
+	 */
 	function stylesheets() {
-		// Default stylesheets
 		$style_array = array(
 			'main' =&gt; array(
 				'url' =&gt; get_bloginfo('stylesheet_url'),
@@ -58,20 +74,16 @@ class Asset {
 			)
 		);
 
-		// Adds the alternate style, if one is selected
 		if(get_tarski_option('style')) {
 			$style_array['alternate'] = array(
 				'url' =&gt; get_bloginfo('template_directory') . '/styles/' . get_tarski_option('style')
 			);
 		}
 
-		// The more complex array can be filtered if desired
 		$style_array = apply_filters('tarski_style_array', $style_array);
 
-		// The business end of the function
 		if(is_array($style_array)) {
 			foreach($style_array as $type =&gt; $values) {
-				// URL is required
 				if(is_array($values) &amp;&amp; $values['url']) {
 					if(empty($values['media'])) {
 						$values['media'] = 'all';
@@ -88,9 +100,15 @@ class Asset {
 		$this-&gt;stylesheets = apply_filters('tarski_stylesheets', $stylesheets);
 	}
 	
+	/**
+	 * Generate script elements linking to Tarski's JavaScript.
+	 * 
+	 * @hook filter tarski_javascript
+	 * Filter script elements before they're printed to the document.
+	 */
 	function javascript() {
 		$scripts = array(
-			'tarski-js' =&gt; get_bloginfo('template_directory') . '/library/js/tarski.js'
+			'tarski-js' =&gt; get_bloginfo('template_directory') . '/app/js/tarski.js'
 		);
 
 		foreach($scripts as $name =&gt; $url) {
@@ -100,6 +118,13 @@ class Asset {
 		$this-&gt;javascript = apply_filters('tarski_javascript', $javascript);
 	}
 	
+	/**
+	 * Generate RSS or Atom feed link elements appropriate to the context.
+	 * 
+	 * @hook filter tarski_feeds
+	 * Filter the RSS or Atam feed link elements before they're printed to the
+	 * document.
+	 */
 	function feeds() {
 		global $comments;
 		if(is_single() || (is_page() &amp;&amp; ($comments || comments_open()))) {
@@ -122,7 +147,7 @@ class Asset {
 				$source = 'author';
 			} elseif(is_date()) {
 				if(is_day()) {
-					$title = sprintf( __('Daily archive feed for %s','tarski'), tarski_date());
+					$title = sprintf( __('Daily archive feed for %s','tarski'), get_the_time(get_option('date_format')));
 					$link = get_day_link(get_the_time('Y'), get_the_time('m'), get_the_time('d'));
 					$source = 'day';
 				} elseif(is_month()) {
@@ -158,10 +183,16 @@ class Asset {
 		$this-&gt;feeds = apply_filters('tarski_feeds', $feeds);
 	}
 	
+	/**
+	 * Print generated HTML to the document.
+	 * 
+	 * @hook filter tarski_assets
+	 * A more generalised filter for all assets generated by this class and
+	 * printed by this method.
+	 */
 	function output() {
 		$assets_collapsed = array();
 		
-		// Implode each array with carriage returns, two between asset groups
 		foreach ( $this as $asset ) {
 			$assets_collapsed[] = implode(&quot;\n&quot;, $asset);
 		}</diff>
      <filename>wp-content/themes/tarski/library/classes/asset.php</filename>
    </modified>
    <modified>
      <diff>@@ -22,6 +22,7 @@ class Options {
 	var $display_title;
 	var $display_tagline;
 	var $nav_pages;
+	var $collapsed_pages;
 	var $home_link_name;
 	var $nav_extlinkcat;
 	var $style;
@@ -46,6 +47,7 @@ class Options {
 		$this-&gt;display_title = true;
 		$this-&gt;display_tagline = true;
 		$this-&gt;nav_pages = false;
+		$this-&gt;collapsed_pages = '';
 		$this-&gt;home_link_name = __('Home','tarski');
 		$this-&gt;nav_extlinkcat = 0;
 		$this-&gt;style = false;
@@ -55,8 +57,8 @@ class Options {
 		$this-&gt;swap_title_order = false;
 		$this-&gt;tags_everywhere = false;
 		$this-&gt;show_categories = true;
-		$this-&gt;show_authors = tarski_should_show_authors();
-		$this-&gt;use_pages = false;
+		$this-&gt;show_authors = true;
+		$this-&gt;use_pages = true;
 	}
 	
 	/**
@@ -107,6 +109,13 @@ class Options {
 				$this-&gt;nav_pages = false;
 			}
 			
+			$collapsed_pages = $_POST['collapsed_pages'];
+			if(isset($collapsed_pages)) {
+				$this-&gt;collapsed_pages = $collapsed_pages;
+			} else {
+				$this-&gt;collapsed_pages = '';
+			}
+			
 			$stylefile = $_POST['alternate_style'];
 			if(is_valid_tarski_style($stylefile))
 				$this-&gt;style = $stylefile;
@@ -124,7 +133,6 @@ class Options {
 			$this-&gt;asidescategory = $_POST['asides_category'];
 			$this-&gt;nav_extlinkcat = $_POST['nav_extlinkcat'];
 			$this-&gt;home_link_name = $_POST['home_link_name'];
-			$this-&gt;sidebar_type = $_POST['sidebar_type'];
 			$this-&gt;sidebar_pp_type = $_POST['sidebar_pp_type'];			
 			$this-&gt;show_authors = tarski_should_show_authors();
 			unset($this-&gt;deleted);
@@ -160,7 +168,7 @@ function save_tarski_options() {
 	
 	if(isset($_POST['submit'])) {
 		$tarski_options-&gt;tarski_options_update();
-		update_option('tarski_options', serialize($tarski_options));
+		update_option('tarski_options', $tarski_options);
 	}
 	
 	flush_tarski_options();
@@ -210,7 +218,7 @@ function update_tarski_option($option, $value) {
 	else
 		$tarski_options-&gt;$option = $value;
 		
-	update_option('tarski_options', serialize($tarski_options));
+	update_option('tarski_options', $tarski_options);
 	flush_tarski_options();
 }
 
@@ -230,4 +238,4 @@ function get_tarski_option($name) {
 	return $tarski_options-&gt;$name;
 }
 
-?&gt;
+?&gt;
\ No newline at end of file</diff>
      <filename>wp-content/themes/tarski/library/classes/options.php</filename>
    </modified>
    <modified>
      <diff>@@ -76,8 +76,8 @@ class Version {
 		} else {
 			if(function_exists('curl_init')) { // If libcurl is installed, use that
 				$ch = curl_init(TARSKIVERSIONFILE);
-				curl_setopt($ch, CURLOPT_FAILONERROR, 1);
-				curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+                curl_setopt($ch, CURLOPT_FAILONERROR, 1);
+                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                 curl_setopt($ch, CURLOPT_HEADER, 0);
                 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
                 curl_setopt($ch, CURLOPT_TIMEOUT, 1);
@@ -144,115 +144,23 @@ class Version {
 		$this-&gt;current_version_number();
 		$this-&gt;latest_version_number();
 		
-		$current_version = version_to_integer($this-&gt;current);
-		$latest_version = version_to_integer($this-&gt;latest);
+		$status = version_compare($this-&gt;latest, $this-&gt;current);
 		
-		if($latest_version) {
-			if($current_version === $latest_version)
-				$version_status = 'current';
-			elseif($current_version &lt; $latest_version)
-				$version_status = 'older';
-			elseif($current_version &gt; $latest_version)
-					$version_status = 'newer';
-		} else {
-			$version_status = 'no_connection';
-		}
-		
-		$this-&gt;status = $version_status;
-	}
-	
-}
-
-/**
- * theme_version() - Returns either the current or the latest theme version.
- * 
- * Creates a new Version object, if {@param string $version} is
- * set to &quot;current&quot; then it will return the current version, if
- * set to &quot;latest&quot; it will return the latest version.
- * @since 2.0
- * @param string $version
- * @return string
- */
-function theme_version($version = 'current') {
-	$tarski_version = new Version;
-	if($version == 'latest') {
-		$tarski_version-&gt;latest_version_number();
-		return $tarski_version-&gt;latest;
-	} else {
-		$tarski_version-&gt;current_version_number();
-		return $tarski_version-&gt;current;
-	}
-}
-
-/**
- * tarski_update_notifier() - Performs version checks and outputs the update notifier.
- * 
- * Creates a new Version object, checks the latest and current
- * versions, and lets the user know whether or not their version
- * of Tarski needs updating. The way it displays varies slightly
- * between the WordPress Dashboard and the Tarski Options page.
- * @since 2.0
- * @param string $location
- * @return string
- */
-function tarski_update_notifier($messages) {
-	global $plugin_page;
-	
-	if ( !is_array($messages) )
-		$messages = array();
-	
-	$version = new Version;
-	$version-&gt;current_version_number();
-	$svn_link = 'http://tarskitheme.com/help/updates/svn/';
-	
-	// Update checking only performed when remote files can be accessed
-	if ( can_get_remote() ) {
-		
-		// Only performs the update check when notification is enabled
-		if ( get_tarski_option('update_notification') ) {
-			$version-&gt;latest_version_number();
-			$version-&gt;latest_version_link();
-			$version-&gt;version_status();
-			
-			if ( $version-&gt;status == 'older' ) {
-				$messages[] = sprintf(
-					__('A new version of the Tarski theme, version %1$s %2$s. Your installed version is %3$s.','tarski'),
-					&quot;&lt;strong&gt;$version-&gt;latest&lt;/strong&gt;&quot;,
-					'&lt;a href=&quot;' . $version-&gt;latest_link . '&quot;&gt;' . __('is now available','tarski') . '&lt;/a&gt;',
-					&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
-				);
-			} elseif ( $plugin_page == 'tarski-options' ) {
-				switch($version-&gt;status) {
-					case 'current':
-						$messages[] = sprintf(
-							__('Your version of Tarski (%s) is up to date.','tarski'),
-							&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
-						);
-					break;
-					case 'newer':
-						$messages[] = sprintf(
-							__('You appear to be running a development version of Tarski (%1$s). Please ensure you %2$s.','tarski'),
-							&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;,
-							&quot;&lt;a href=\&quot;$svn_link\&quot;&gt;&quot; . __('stay updated','tarski') . '&lt;/a&gt;'
-						);
-					break;
-					case 'no_connection':
-						$messages[] = sprintf(
-							__('No connection to update server. Your installed version is %s.','tarski'),
-							&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
-						);
-					break;
-				}
+		if ($this-&gt;latest) {
+			if ($status === 0) {
+				$this-&gt;status = 'current';
+			} elseif ($status === 1) {
+				$this-&gt;status = 'older';
+			} elseif ($status === -1) {
+				$this-&gt;status = 'newer';
+			} else {
+				$this-&gt;status = 'error';
 			}
-		} elseif ( $plugin_page == 'tarski-options' ) {
-			$messages[] = sprintf(
-				__('Update notification for Tarski is disabled. Your installed version is %s.','tarski'),
-				&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
-			);
+		} else {
+			$this-&gt;status = 'no_connection';
 		}
 	}
 	
-	return $messages;
 }
 
 ?&gt;
\ No newline at end of file</diff>
      <filename>wp-content/themes/tarski/library/classes/version.php</filename>
    </modified>
    <modified>
      <diff>@@ -13,8 +13,8 @@
  * background grey, puts the page title in its place, and sorts out other
  * header and footer elements.
  */
-#tarski-options { overflow: auto; }
-#tarski-options-header { clear: both; overflow: auto; margin: 0.4em 0 0.8em 0; border-bottom: 1px solid #dadada; padding: 0.4em; }
+#tarski-options {}
+#tarski-options-header { clear: both; margin: 0.4em 0 0.8em 0; border-bottom: 1px solid #dadada; padding: 0.4em; }
 #tarski-options-header h2 { float: left; margin: 0 0.8em 0 0; border: none; padding: 0; }
 #tarski-save-options, #tarski-info { display: block; padding: 0; }
 #tarski-save-options { float: left; margin: 0; }
@@ -30,6 +30,7 @@
  * allowing for fairly flexible layouts.
  */
 .span { clear: both; }
+.clearer { display: block; clear: both; height: 0; visibility: hidden; }
 .primary, .secondary { width: 49.5%; }
 .primary, .rtl .secondary { float: left; clear: left; }
 .secondary, .rtl .primary { float: right; clear: right; }
@@ -41,7 +42,7 @@
  * precisely than the WordPress defaults do how things should appear.
  */
 .section label, .section select, #opt-nav-homename { display: block; margin: 0.8em 0; }
-.section { margin: 0 0 0.8em 0; padding: 0.8em 0.8em 0.4em 0.8em; background: #eaf3fa; }
+.section { margin: 0 0 0.8em 0; padding: 0.8em 0.8em 0.4em 0.8em; background: #eaf3fa; position: relative; *zoom: 1; }
 .section h3, .section p { margin: 0 0 0.8em 0; }
 .tip { margin: 0.8em 0; border: 1px solid #c6d9e9; border-left-width: 3px; padding: 0.4em; background: #f7fafd; }
 #tarski-options .highlight { background: none; color: #d54e21; }
@@ -50,6 +51,28 @@
 #tarski-headers label img { background: #fff; margin: 5px; font-weight: bold; }
 
 /**
+ * Navbar selection node tree
+ * 
+ * The navbar selection tool is an ordered list of pages, whose list elements
+ * may also contain child lists of sub-pages.
+ */
+#navbar-select { clear: both; margin: 0 0 1em 0; padding: 0; }
+#navbar-select ol { margin: 0; padding: 0; }
+#navbar-select li { margin: 0; padding: 0; list-style-type: none; }
+#navbar-select li ol li { padding-left: 1.5em; }
+#navbar-select .nav-page { position: relative; margin: 0 0 0.5em 0; padding: 4px 20px 3px 5px; background-color: #cedeeb; background-repeat:no-repeat; background-position: 5px 6px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
+#navbar-select .nav-page a { text-decoration: none; }
+#navbar-select.js .nav-page { padding-left: 28px; background-image: url('../../images/page_select.png'); }
+#navbar-select .nav-page label { display: inline; margin: 0 0 0.7em 0; }
+#navbar-select .nav-page input { display: block; position: absolute; top: 4px; right: 5px; width: 1em; height: 1em; }
+#navbar-select .nav-page .toggle { display: block; position: absolute; top: 0; left: 0; width: 23px; height: 23px; background: url('../../images/page_select.png') no-repeat 5px -194px; text-indent: -9999em; cursor: pointer; }
+#navbar-select.js .collapsed .nav-page .collapsed-toggle { background-position: 5px -94px; }
+#navbar-select.js li.collapsed ol { display: none; }
+/* Some hacks to work around Internet Explorer bugs */
+#navbar-select, #navbar-select ol, #navbar-select li, #navbar-select .nav-page, #navbar-select .nav-page input { *zoom: 1; }
+#navbar-select .nav-page input { _top: 5px; }
+
+/**
  * Checkboxes and radio buttons
  * 
  * The Tarski options page uses JavaScript to allow the styling of input</diff>
      <filename>wp-content/themes/tarski/library/css/options.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,40 +1,6 @@
 &lt;?php
 
 /**
- * check_input() - Checks input is of correct type
- * 
- * Always returns true when WP_DEBUG is true, to allow for easier debugging
- * in the development environment while handling erroneous input more
- * robustly in the production environment.
- * @see http://uk3.php.net/manual/en/function.gettype.php
- * @since 2.1
- * @param mixed $input
- * @param string $type
- * @param string $name
- * @return boolean
- *
- */
-function check_input($input, $type, $name = '') {
-	if ( WP_DEBUG === true )
-		return true;
-
-	if ( $type == 'object' &amp;&amp; strlen($name) &gt; 0 )
-		return is_a($input, $name);
-	else
-		return call_user_func(&quot;is_$type&quot;, $input);
-}
-
-/**
- * detectWPMU() - Detects whether WordPress Multi-User is in use.
- * 
- * @since 1.4
- * @return boolean
- */
-function detectWPMU() {
-	return function_exists('is_site_admin');
-}
-
-/**
  * detectWPMUadmin() - Detect whether the current user is a WPMU site administrator.
  * 
  * @since 2.0
@@ -69,72 +35,13 @@ function can_get_remote() {
  * @return boolean
  */
 function cache_is_writable($file = false) {
-	if($file)
+	if ( $file )
 		$cachefile = TARSKICACHE . '/' . $file;
 	
-	if(is_writable($cachefile) || (is_writable(TARSKICACHE) &amp;&amp; !file_exists($cachefile)))
-		return true;
-}
-
-/**
- * version_to_integer() - Turns Tarski version numbers into integers.
- * 
- * @since 2.0.3
- * @param string $version
- * @return integer
- */
-function version_to_integer($version) {
-	// Remove all non-numeric characters
-	$version = preg_replace('/\D/', '', $version);
-	
-	if($version &amp;&amp; strlen($version) &gt;= 1) {
-		// Make the string exactly three characters (numerals) long
-		if(strlen($version) &lt; 2) {
-			$version_int = $version . '00';
-		} elseif(strlen($version) &lt; 3) {
-			$version_int = $version . '0';
-		} elseif(strlen($version) == 3) {
-			$version_int = $version;
-		} elseif(strlen($version) &gt; 3) {
-			$version_int = substr($version, 0, 3);
-		}
-		
-		// Return an integer
-		return (int) $version_int;
-	}
-}
-
-/**
- * version_newer_than() - Returns true if current version is greater than given version.
- *
- * @since 2.0.3
- * @param mixed $version
- * @return boolean
- */
-function version_newer_than($version) {
-	$version = version_to_integer($version);
-	$current = version_to_integer(theme_version('current'));
-	
-	if($version &amp;&amp; $current) {
-		return (bool) ($current &gt; $version);
-	}
-}
-
-/**
- * is_valid_tarski_style() - Checks whether a given file name is a valid Tarski stylesheet name.
- * 
- * It must be a valid CSS identifier, followed by the .css file extension,
- * and it cannot have a name that is already taken by Tarski's CSS namepsace.
- * @since 2.0
- * @param string $file
- * @return boolean
- */
-function is_valid_tarski_style($file) {
-	return (bool) (
-		!preg_match('/^\.+$/', $file)
-		&amp;&amp; preg_match('/^[A-Za-z][A-Za-z0-9\-]*.css$/', $file)
-		&amp;&amp; !preg_match('/^janus.css$|^centre.css$|^rtl.css$/', $file)
-	);
+	if ( file_exists($cachefile) )
+		return is_writable($cachefile);
+	else
+		return is_writable(TARSKICACHE);
 }
 
 /**
@@ -166,9 +73,8 @@ function ready_to_delete_options($del_time) {
  */
 function tarski_upgrade_needed() {
 	if ( get_option('tarski_options') ) {
-		$version = get_tarski_option('installed');
-		$current = theme_version('current');
-		return (bool) empty($version) || (version_to_integer($version) &lt; version_to_integer($current));
+		$installed = get_tarski_option('installed');
+		return empty($installed) || version_compare($installed, theme_version('current')) === -1;
 	}
 }
 
@@ -188,6 +94,86 @@ function tarski_upgrade_and_flush_options() {
 }
 
 /**
+ * tarski_upgrade_special() - Upgrades Tarski options special cases.
+ * 
+ * @since 2.3
+ * @see tarski_upgrade()
+ * @param object $options
+ * @param object $defaults
+ */
+function tarski_upgrade_special($options, $defaults) {
+	if ( tarski_should_show_authors() )
+		$options-&gt;show_authors = true;
+	
+	if ( empty($options-&gt;centred_theme) &amp;&amp; isset($options-&gt;centered_theme) )
+		$options-&gt;centred_theme = true;
+	
+	if ( empty($options-&gt;show_categories) &amp;&amp; isset($options-&gt;hide_categories) &amp;&amp; ($options-&gt;hide_categories == 1) )
+		$options-&gt;show_categories = false;
+	
+}
+
+/**
+ * tarski_upgrade_widgets() - Upgrades old Tarski sidebar options to use widgets.
+ * 
+ * @since 2.3
+ * @see tarski_upgrade()
+ * @param object $options
+ * @param object $defaults
+ */
+function tarski_upgrade_widgets($options, $defaults) {
+	$widgets = wp_get_sidebars_widgets(false);
+	$widget_text = get_option('widget_text');
+	
+	// Change sidebar names and initialise new sidebars
+	if ( empty($widgets['sidebar-main']) &amp;&amp; !empty($widgets['sidebar-1']) )
+		$widgets['sidebar-main'] = $widgets['sidebar-1'];
+	
+	if ( empty($widgets['footer-sidebar']) &amp;&amp; !empty($widgets['sidebar-2']) )
+		$widgets['footer-sidebar'] = $widgets['sidebar-2'];
+	
+	// Main footer widgets
+	if ( empty($widgets['footer-main']) ) {
+		$widgets['footer-main'] = array();
+		
+		// Footer blurb
+		if ( strlen(trim($options-&gt;blurb)) ) {
+			$widget_text[] = array( 'title' =&gt; '', 'text' =&gt; $options-&gt;blurb );
+			$wt_num = (int) end(array_keys($widget_text));
+			$widgets['footer-main'][] = &quot;text-$wt_num&quot;;
+		}
+		
+		// Recent articles
+		if ( $options-&gt;footer_recent )
+			$widgets['footer-main'][] = 'recent-articles';
+	}
+	
+	// Main sidebar
+	if ( empty($widgets['sidebar-main']) &amp;&amp; $options-&gt;sidebar_type == 'tarski' ) {
+		$widgets['sidebar-main'] = array();
+	
+		// Custom text -&gt; text widget
+		if( strlen(trim($options-&gt;sidebar_custom)) ) {
+			$widget_text[] = array( 'title' =&gt; '', 'text' =&gt; $options-&gt;sidebar_custom );
+			$wt_num = (int) end(array_keys($widget_text));
+			$widgets['sidebar-main'][] = &quot;text-$wt_num&quot;;
+		}
+	
+		// Pages list -&gt; pages widget
+		if($options-&gt;sidebar_pages)
+			$widgets['sidebar-main'][] = 'pages';
+	
+		// Links list -&gt; links widget
+		if($options-&gt;sidebar_links)
+			$widgets['sidebar-main'][] = 'links';
+	}
+	
+	// Update options
+	update_option('widget_text', $widget_text);
+	wp_set_sidebars_widgets($widgets);	
+}
+
+/**
  * function tarski_upgrade() - Upgrades Tarski's options where appropriate.
  * 
  * Tarski preferences sometimes change between versions, and need to
@@ -205,95 +191,14 @@ function tarski_upgrade() {
 	$defaults = new Options;
 	$defaults-&gt;tarski_options_defaults();
 
-	// Handle special cases first
-	
 	// Update the options version so we don't run this code more than once
-	$old_version = $options-&gt;installed;
 	$options-&gt;installed = theme_version('current');
 	
-	if (version_to_integer($old_version) &lt; 210) {
-		// If they had hidden the sidebar previously for non-index pages, preserve that setting
-		if (
-			empty($options-&gt;sidebar_pp_type)
-			&amp;&amp; isset($options-&gt;sidebar_onlyhome)
-			&amp;&amp; $options-&gt;sidebar_onlyhome == 1
-		) {
-			$options-&gt;sidebar_pp_type = 'none';
-		}
-	
-		// If there's more than one author, show authors
-		if(tarski_should_show_authors()) {
-			$options-&gt;show_authors = true;
-		}
-	
-		// If categories are hidden, respect that option
-		if (
-			empty($options-&gt;show_categories)
-			&amp;&amp; isset($options-&gt;hide_categories)
-			&amp;&amp; ($options-&gt;hide_categories == 1)
-		) {
-			$options-&gt;show_categories = false;
-		}
-	
-		// Change American English to British English, sorry Chris
-		if(empty($options-&gt;centred_theme) &amp;&amp; isset($options-&gt;centered_theme)) {
-			$options-&gt;centred_theme = true;
-		}
-	
-		// Upgrade old display options to use widgets instead
-	
-		// Get current widgets settings
-		$widgets = wp_get_sidebars_widgets();
-		$widget_text = get_option('widget_text');
-	
-		// Change sidebar names and initialise new sidebars
-		$widgets['sidebar-main'] = $widgets['sidebar-1'];
-		$widgets['footer-sidebar'] = $widgets['sidebar-2'];
-		$widgets['footer-main'] = array();
-	
-		// Footer blurb
-		if ( strlen(trim($options-&gt;blurb)) ) {
-			$widget_text[] = array( 'title' =&gt; '', 'text' =&gt; $options-&gt;blurb );
-			$wt_num = (int) end(array_keys($widget_text));
-			$widgets['footer-main'][] = &quot;text-$wt_num&quot;;
-		}
-	
-		// Recent articles
-		if ( $options-&gt;footer_recent ) {
-			$widgets['footer-main'][] = 'recent-articles';
-		}
-	
-		// Footer sidebar default
-		if ( empty($widgets['footer-sidebar']) ) {
-			$widgets['footer-sidebar'] = array('search');
-		}
-		
-		// Main sidebar
-		if ( $options-&gt;sidebar_type == 'tarski' ) {
-			if ( empty($widgets['sidebar-main']) )
-				$widgets['sidebar-main'] = array();
-		
-			// Custom text -&gt; text widget
-			if( strlen(trim($options-&gt;sidebar_custom)) ) {
-				$widget_text[] = array( 'title' =&gt; '', 'text' =&gt; $options-&gt;sidebar_custom );
-				$wt_num = (int) end(array_keys($widget_text));
-				$widgets['sidebar-main'][] = &quot;text-$wt_num&quot;;
-			}
-		
-			// Pages list -&gt; pages widget
-			if($options-&gt;sidebar_pages) {
-				$widgets['sidebar-main'][] = 'pages';
-			}
-		
-			// Links list -&gt; links widget
-			if($options-&gt;sidebar_links) {
-				$widgets['sidebar-main'][] = 'links';
-			}
-		}
+	// Handle special cases first
+	tarski_upgrade_special($options, $defaults);
 		
-		// Unset defunct values
-		unset($widgets['sidebar-1'], $widgets['sidebar-2']);
-	}
+	// Upgrade old display options to use widgets instead
+	tarski_upgrade_widgets($options, $defaults);
 	
 	// Conform our options to the expected values, types, and defaults
 	foreach($options as $name =&gt; $value) {
@@ -311,20 +216,17 @@ function tarski_upgrade() {
 			$options-&gt;$name = array($options-&gt;$name);
 		}
 	}
-
-	// Save our upgraded options
-	if (version_to_integer($old_version) &lt; 210) {
-		update_option('widget_text', $widget_text);
-		wp_set_sidebars_widgets($widgets);
-	}
 	
-	update_option('tarski_options', serialize($options));
+	// Save our upgraded options
+	update_option('tarski_options', $options);
 }
 
 /**
  * tarski_messages() - Adds messages about Tarski to the WordPress admin panel.
  * 
  * @since 2.1
+ * @hook filter tarski_messages
+ * Filter the messages Tarski prints to the WordPress admin panel.
  */
 function tarski_messages() {
 	$messages = apply_filters('tarski_messages', array());
@@ -349,11 +251,13 @@ function tarski_addmenu() {
  * @since 1.0
  */
 function tarski_admin() {
-	save_tarski_options();
-	tarski_update_notifier('options_page');
-	$widgets_link = get_bloginfo('wpurl') . '/wp-admin/widgets.php';
-	$tarski_options_link = get_bloginfo('wpurl') . '/wp-admin/themes.php?page=tarski-options';
-	include(TARSKIDISPLAY . '/options_page.php');
+	if (current_user_can('edit_themes')) {
+		save_tarski_options();
+		tarski_update_notifier('options_page');
+		$widgets_link = admin_url('widgets.php');
+		$tarski_options_link = admin_url('themes.php?page=tarski-options');
+		include(TARSKIDISPLAY . '/options_page.php');
+	}
 }
 
 /**
@@ -379,7 +283,11 @@ function tarski_admin_header_style() { ?&gt;
  * @since 2.1
 */
 function tarski_admin_style() {
-	echo '&lt;link rel=&quot;stylesheet&quot; href=&quot;' . get_bloginfo('template_directory'). '/library/css/admin.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;';
+	wp_enqueue_style(
+		'tarski_admin',
+		get_bloginfo('template_directory') . '/library/css/admin.css',
+		array(), false, 'screen'
+	);
 }
 
 /**
@@ -388,7 +296,11 @@ function tarski_admin_style() {
  * @since 2.1
 */
 function tarski_inject_styles() {
-	echo '&lt;link rel=&quot;stylesheet&quot; href=&quot;' . get_bloginfo('template_directory'). '/library/css/options.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;';
+	wp_enqueue_style(
+		'tarski_options',
+		get_bloginfo('template_directory') . '/library/css/options.css',
+		array(), false, 'screen'
+	);
 }
 
 /**
@@ -397,23 +309,24 @@ function tarski_inject_styles() {
  * @since 1.4
 */
 function tarski_inject_scripts() {
-	$js_dir = get_bloginfo('template_directory') . '/library/js';
-	wp_enqueue_script('crir', $js_dir . '/crir.js');
+	$js_dir = get_bloginfo('template_directory') . '/app/js';
+	wp_enqueue_script('page_select', &quot;$js_dir/page_select.js&quot;);
+	wp_enqueue_script('crir', &quot;$js_dir/crir.js&quot;);
 }
 
 /**
- * tarski_count_authors() - Returns the number of authors on a site.
+ * tarski_count_authors() - Returns the number of authors who have published posts.
  * 
- * This function returns the number of users on a site with a user
- * level of greater than 1, i.e. Authors, Editors and Administrators.
+ * This function returns the number of author ids associated with published posts.
  * @since 2.0.3
  * @global object $wpdb
  * @return integer
  */
 function tarski_count_authors() {
 	global $wpdb;
-	$count_users = $wpdb-&gt;get_var(&quot;SELECT COUNT(*) FROM $wpdb-&gt;usermeta WHERE `meta_key` = '&quot; . $wpdb-&gt;prefix . &quot;user_level' AND `meta_value` &gt; 1&quot;);
-	return (int) $count_users;
+	return count($wpdb-&gt;get_col($wpdb-&gt;prepare(
+		&quot;SELECT post_author, COUNT(DISTINCT post_author) FROM $wpdb-&gt;posts WHERE post_status = 'publish' GROUP BY post_author&quot;
+	), 1));
 }
 
 /**
@@ -423,6 +336,8 @@ function tarski_count_authors() {
  * @see tarski_count_authors()
  * @global object $wpdb
  * @return boolean
+ * @hook filter tarski_show_authors
+ * Allows other components to decide whether or not Tarski should show authors.
  */
 function tarski_should_show_authors() {
 	$show_authors = tarski_count_authors() &gt; 1;
@@ -443,4 +358,98 @@ function tarski_resave_show_authors() {
 	}
 }
 
+/**
+ * tarski_navbar_select() - Generates a list of checkboxes for the site's pages.
+ * 
+ * Walks the tree of pages and generates nested ordered lists of pages, with
+ * corresponding checkboxes to allow the selection of pages for the navbar.
+ * @since 2.2
+ * @param array $pages
+ * @param array $selected
+ */
+function tarski_navbar_select($pages) {
+	$nav_pages = explode(',', get_tarski_option('nav_pages'));
+	$collapsed_pages = explode(',', get_tarski_option('collapsed_pages'));
+	$walker = new WalkerPageSelect($nav_pages, $collapsed_pages);
+	$return = '';
+	
+	if ( !empty($pages) ) {	
+		$return = &quot;&lt;ol id=\&quot;navbar-select\&quot;&gt;\n&quot; . $walker-&gt;walk($pages, 0, 0, array()) . &quot;\n&lt;/ol&gt;\n\n&quot;;
+	}
+	
+	return $return;
+}
+
+/**
+ * tarski_update_notifier() - Performs version checks and outputs the update notifier.
+ * 
+ * Creates a new Version object, checks the latest and current
+ * versions, and lets the user know whether or not their version
+ * of Tarski needs updating. The way it displays varies slightly
+ * between the WordPress Dashboard and the Tarski Options page.
+ * @since 2.0
+ * @param string $location
+ * @return string
+ */
+function tarski_update_notifier($messages) {
+	global $plugin_page;
+	
+	if ( !is_array($messages) )
+		$messages = array();
+	
+	$version = new Version;
+	$version-&gt;current_version_number();
+	$svn_link = 'http://tarskitheme.com/help/updates/svn/';
+	
+	// Update checking only performed when remote files can be accessed
+	if ( can_get_remote() ) {
+		
+		// Only performs the update check when notification is enabled
+		if ( get_tarski_option('update_notification') ) {
+			$version-&gt;latest_version_number();
+			$version-&gt;latest_version_link();
+			$version-&gt;version_status();
+			
+			if ( $version-&gt;status == 'older' ) {
+				$messages[] = sprintf(
+					__('A new version of the Tarski theme, version %1$s %2$s. Your installed version is %3$s.','tarski'),
+					&quot;&lt;strong&gt;$version-&gt;latest&lt;/strong&gt;&quot;,
+					'&lt;a href=&quot;' . $version-&gt;latest_link . '&quot;&gt;' . __('is now available','tarski') . '&lt;/a&gt;',
+					&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
+				);
+			} elseif ( $plugin_page == 'tarski-options' ) {
+				switch($version-&gt;status) {
+					case 'current':
+						$messages[] = sprintf(
+							__('Your version of Tarski (%s) is up to date.','tarski'),
+							&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
+						);
+					break;
+					case 'newer':
+						$messages[] = sprintf(
+							__('You appear to be running a development version of Tarski (%1$s). Please ensure you %2$s.','tarski'),
+							&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;,
+							&quot;&lt;a href=\&quot;$svn_link\&quot;&gt;&quot; . __('stay updated','tarski') . '&lt;/a&gt;'
+						);
+					break;
+					case 'no_connection':
+					case 'error':
+						$messages[] = sprintf(
+							__('No connection to update server. Your installed version is %s.','tarski'),
+							&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
+						);
+					break;
+				}
+			}
+		} elseif ( $plugin_page == 'tarski-options' ) {
+			$messages[] = sprintf(
+				__('Update notification for Tarski is disabled. Your installed version is %s.','tarski'),
+				&quot;&lt;strong&gt;$version-&gt;current&lt;/strong&gt;&quot;
+			);
+		}
+	}
+	
+	return $messages;
+}
+
 ?&gt;
\ No newline at end of file</diff>
      <filename>wp-content/themes/tarski/library/helpers/admin_helper.php</filename>
    </modified>
    <modified>
      <diff>@@ -98,22 +98,6 @@ function tarski_posts_nav_link() {
 }
 
 /**
- * tarski_date() - Tweaked WordPress date function that shows up on every post.
- * 
- * The WP function the_date only shows up on the first post
- * of that day. This one displays on every post, regardless
- * of how many posts are made that day.
- * @since 1.2.2
- * @global object $post
- * @return string
- */
-function tarski_date() {
-	global $post;
-	$date = mysql2date(get_option('date_format'), $post-&gt;post_date);
-	return apply_filters('tarski_date', $date);
-}
-
-/**
  * tarski_post_categories_link() - Outputs post categories
  * 
  * Categories list is nicely wrapped for potential DOM interactions
@@ -171,6 +155,8 @@ function tarski_asides_permalink_text() {
  * Makes the comment date and time output more translateable.
  * @since 2.0
  * @return string
+ * @hook filter tarski_comment_datetime
+ * Filters the date and time printed with a comment.
  */
 function tarski_comment_datetime() {
 	$datetime = sprintf(
@@ -215,7 +201,10 @@ function tidy_avatars($avatar, $id_or_email, $size, $default) {
 	$url = get_comment_author_url();
 	$author_alt = sprintf( __('%s&amp;#8217;s avatar'), get_comment_author() );
 	$avatar = preg_replace(&quot;/height='[\d]+' width='[\d]+'/&quot;, '', $avatar);
-	$avatar = preg_replace(&quot;/'/&quot;, '&quot;', $avatar);
+	
+	if ( !is_admin() )
+		$avatar = preg_replace(&quot;/'/&quot;, '&quot;', $avatar);
+	
 	$avatar = preg_replace('/alt=&quot;&quot;/', &quot;alt=\&quot;$author_alt\&quot;&quot;, $avatar);
 	
 	return $avatar;
@@ -229,7 +218,12 @@ function tidy_avatars($avatar, $id_or_email, $size, $default) {
  * @return string
  */
 function tarski_avatar() {
-	$avatar = get_avatar(get_comment_author_email(), '50', apply_filters('tarski_avatar', get_bloginfo('template_directory') . '/images/avatar.png'));
+	if ( get_option('avatar_default') == '' )
+		$default = get_bloginfo('template_directory') . '/images/avatar.png';
+	else
+		$default = '';
+	
+	$avatar = get_avatar(get_comment_author_email(), '50', $default);
 	$url = get_comment_author_url();
 	
 	if ( empty($url) || preg_match('/^\s*http:\/\/\s*$/', $url) ) {
@@ -240,6 +234,19 @@ function tarski_avatar() {
 }
 
 /**
+ * tarski_default_avatar() - Make Tarski avatar selectable.
+ * 
+ * Adds the Tarski avatar to the Discussion options page, allowing it to be selected
+ * but also allowing users to choose other avatars.
+ * @return string
+ */
+function tarski_default_avatar($avatar_defaults) {
+	$tarski_avatar = get_bloginfo('template_directory') . '/images/avatar.png';
+	$avatar_defaults[$tarski_avatar] = 'Tarski';
+	return $avatar_defaults;
+}
+
+/**
  * tarski_comment_author_link() - Returns a comment author's name, wrapped in a link if present.
  * 
  * It also includes hCard microformat markup.
@@ -247,6 +254,10 @@ function tarski_avatar() {
  * @since 2.0
  * @global object $comment
  * @return string
+ * @hook filter get_comment_author_link
+ * Native WordPress filter on comment author links.
+ * @hook filter tarski_comment_author_link
+ * Tarski-specific filter on comment author links.
  */
 function tarski_comment_author_link() {
 	global $comment;
@@ -272,67 +283,12 @@ function tarski_comment_author_link() {
 }
 
 /**
- * tarski_excerpt() - Excerpts a la Tarski.
- * 
- * Code shamelessly borrowed from Kaf Oseo's 'the_excerpt Reloaded' plugin.
- * @link http://guff.szub.net/2005/02/26/the-excerpt-reloaded/
- * @since 1.2.1
- * @param $return boolean
- * @param string $excerpt_length
- * @return string
- */
-function tarski_excerpt($return = false, $excerpt_length = 35) {
-	global $post;
-
-	if(!empty($post-&gt;post_password)) { // if there's a password
-		if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post-&gt;post_password) { // and it doesn't match cookie
-			$output = get_the_password_form();
-		}
-		if($return) {
-			return $output;
-		} else {
-			echo $output;
-			return;
-		}
-	}
-	
-	if(!($text = $post-&gt;post_excerpt))
-		$text = $post-&gt;post_content;
-
-	if($excerpt_length &lt; 0) {
-		$output = $text;
-	} else {
-		str_replace('&lt;!--more--&gt;', '', $text);
-		$text = explode(' ', $text);
-		if(count($text) &gt; $excerpt_length) {
-			$l = $excerpt_length;
-			$ellipsis = '&amp;hellip;';
-		} else {
-			$l = count($text);
-			$ellipsis = false;
-		}
-		for ($i = 0; $i &lt; $l; $i++)
-			$output .= $text[$i] . ' ';
-	}
-
-	$output = rtrim($output, &quot; \n\t\r\0\x0B&quot;);
-	$output = strip_tags($output);
-	$output .= $ellipsis;
-	$output = apply_filters('get_the_excerpt', $output);
-	$output = apply_filters('the_excerpt', $output);
-	$output = apply_filters('tarski_excerpt', $output);
-	
-	if($return)
-		return $output;
-	else
-		echo $output;
-}
-
-/**
  * tarski_404_content() - Outputs default text for 404 error pages.
  *
  * @since 1.5
  * @return string
+ * @hook filter th_404_content
+ * Allows users to change their 404 page messages via a plugin.
  */
 function tarski_404_content() {
 	$content = sprintf(</diff>
      <filename>wp-content/themes/tarski/library/helpers/content_helper.php</filename>
    </modified>
    <modified>
      <diff>@@ -22,7 +22,7 @@ function wrap_values_in_element($array, $element) {
 }
 
 /**
- * implode_proper() - Implodes an array and provides a proper final connective
+ * implode_proper() - Implodes an array and adds a final conjuction.
  * 
  * Given the array &lt;code&gt;array('John', 'Paul', 'George', 'Ringo')&lt;/code&gt; it will
  * return the string &lt;code&gt;'John, Paul, George and Ringo'&lt;/code&gt;.
@@ -32,18 +32,23 @@ function wrap_values_in_element($array, $element) {
  * @param $last_connective string
  * @return string
  */
-function implode_proper($array, $glue = ', ', $last_connective = 'and') {
-	if( !check_input($array, 'array') || count($array) == 0 )
+function implode_proper($array, $glue = NULL, $last_connective = NULL) {
+	if ( !check_input($array, 'array') || count($array) == 0 )
 		return;
 	
+	if ($glue == NULL)
+		$glue = __(', ', 'tarski');
+	
+	if ($last_connective == NULL)
+		$last_connective = __('and', 'tarski');
+	
 	$last_value = array_pop($array);
 	
-	if( count($array) )
+	if ( count($array) )
 		$output = implode($glue, $array) . &quot; $last_connective $last_value&quot;;
 	else
 		$output = $last_value;
 	
-	$output = apply_filters('implode_proper', $output);
 	return $output;
 }
 
@@ -52,69 +57,58 @@ function implode_proper($array, $glue = ', ', $last_connective = 'and') {
  * 
  * Tag intersections and unions currently don't have a simple, single template
  * function. This provides one.
+ * 
+ * @example multiple_tag_titles('&lt;em&gt;%s&lt;/em&gt;') will wrap every printed tag in
+ * an HTML emphasis element.
  * @since 2.0
  * @global $wpdb object
- * @param $tag_wrapper string
+ * @param $format string
  * @return string
+ * @hook filter multiple_tag_titles
+ * Filter the value returned when generating the title of multiple (union or
+ * intersection) tag archive page.
  */
-function multiple_tag_titles($tag_wrapper = '') {
+if ( !function_exists('multiple_tag_titles') ) {
+function multiple_tag_titles($format = '') {
 	global $wpdb;
 	
 	if ( !is_tag() )
 		return;
 	
+	if ( $tag_slugs = get_query_var('tag_slug__and') )
+		$connective = __('and');
+	elseif ( $tag_slugs = get_query_var('tag_slug__in') )
+		$connective = __('or');
+	else
+		$single_tag = intval( get_query_var('tag_id') );
 	
-	// Start horrible hack
-	$tag_slugs = array();
-	if( $tag_slugs = get_query_var('tag_slug__and') ) {
-		$connective = __('and','tarski');
-	} elseif( $tag_slugs = get_query_var('tag_slug__in') ) {
-		$connective = __('or','tarski');
-	} elseif( $single_tag = get_query_var('tag_id') ) {
-		$tag_ids = array($single_tag);
-	} else {
-		return;
-	}
-	
-	if($tag_slugs) {
-		foreach ($tag_slugs as $tag_slug) {
-			$tag_ids[] = $wpdb-&gt;get_var(&quot;SELECT term_id FROM $wpdb-&gt;terms WHERE slug = \&quot;$tag_slug\&quot;&quot;);
+	$tags = array();
+	if ( $tag_slugs ) {
+		foreach ( $tag_slugs as $tag_slug ) {
+			$tag = get_term_by('slug', $tag_slug, 'post_tag', OBJECT, 'display');
+			if ( !is_wp_error($tag) &amp;&amp; !empty($tag-&gt;name) )
+				$tags[] = $tag-&gt;name;
 		}
-	}
-	// End horrible hack
-	
-	
-	/*
-	// This doesn't work; tag__and and tag__in are empty for tag intersections and unions
-	$tag_ids = array();
-	
-	if( $tag_ids = get_query_var('tag__and') ) {
-		$connective = __('and','tarski');
-	} elseif( $tag_ids = get_query_var('tag__in') ) {
-		$connective = __('or','tarski');
-	} elseif( $single_tag = get_query_var('tag_id') ) {
-		$tag_ids = array($single_tag);
-	} else {
-		return;
-	}
-	*/
-
-	foreach ( $tag_ids as $tag_id ) {
-		$tag = &amp;get_term($tag_id, 'post_tag', OBJECT, 'display');
-		if ( empty($tag) || is_wp_error($tag) )
-			continue;
+	} elseif ( $single_tag ) {
+		$tag = &amp;get_term($single_tag, 'post_tag', OBJECT, 'display');
+		if ( is_wp_error($tag) || empty($tag-&gt;name) )
+			return false;
 		else
 			$tags[] = $tag-&gt;name;
+	} else {
+		return;
 	}
 	
-	if ( $tag_wrapper )
-		$tags = wrap_values_in_element($tags, $tag_wrapper);
-
-	$tags = implode_proper($tags, ', ', $connective);
+	if ( strlen($format) &gt; 0 ) {
+		foreach ( $tags as $index =&gt; $tag )
+			$tags[$index] = sprintf($format, $tag);
+	}
+			
+	$tags = implode_proper($tags, __(', ', 'tarski'), $connective);
 	$tags = apply_filters('multiple_tag_titles', $tags);
-
 	return $tags;
 }
+}
 
 /**
  * add_post_tags() - Appends tags to posts.
@@ -123,7 +117,7 @@ function multiple_tag_titles($tag_wrapper = '') {
  * @return string
  */
 function add_post_tags() {
-	if(is_single() || (get_tarski_option('tags_everywhere')) &amp;&amp; !in_category(get_tarski_option('asidescategory'))) {
+	if (is_single() || (get_tarski_option('tags_everywhere') &amp;&amp; !in_category(get_tarski_option('asidescategory')))) {
 		the_tags('&lt;p class=&quot;tagdata&quot;&gt;&lt;strong&gt;'. __('Tags','tarski'). ':&lt;/strong&gt; ', ', ', '&lt;/p&gt;'.&quot;\n&quot;);
 	}
 }</diff>
      <filename>wp-content/themes/tarski/library/helpers/tag_helper.php</filename>
    </modified>
    <modified>
      <diff>@@ -16,6 +16,20 @@ function is_wp_front_page() {
 }
 
 /**
+ * only_paginate_home() - Turns off paging for everything except feeds and the home page.
+ * 
+ * @since 2.2
+ * @param object $query
+ */
+function only_paginate_home($query) {
+	if ( !get_tarski_option('use_pages') &amp;&amp; !is_admin() ) {
+		if ( !is_home() &amp;&amp; !is_feed() &amp;&amp; '' === $query-&gt;get('nopaging') ) {
+			$query-&gt;set('nopaging', 1);
+		}
+	}
+}
+
+/**
  * tarski_doctitle() - Returns the document title.
  * 
  * The order (site name first or last) can be set on the Tarski Options page.
@@ -25,6 +39,8 @@ function is_wp_front_page() {
  * @since 1.5
  * @param string $sep
  * @return string $doctitle
+ * @hook filter tarski_doctitle
+ * Filter document titles.
  */
 function tarski_doctitle($sep = '&amp;middot;') {
 	$site_name = get_bloginfo('name');
@@ -173,6 +189,8 @@ function tarski_headerimage() {
  * wrapped in a p (paragraph) element.
  * @since 1.5
  * @return string
+ * @hook filter tarski_sitetitle
+ * Filter site title.
  */
 function tarski_sitetitle() {
 	if(get_tarski_option('display_title')) {
@@ -203,6 +221,8 @@ function tarski_sitetitle() {
  * 
  * @since 1.5
  * @return string
+ * @hook filter tarski_tagline
+ * Filter site tagline.
  */
 function tarski_tagline() {
 	if((get_tarski_option('display_tagline') &amp;&amp; get_bloginfo('description')))
@@ -262,6 +282,8 @@ function home_link_name() {
  * @param boolean $return
  * @global object $wpdb
  * @return string $navbar
+ * @hook filter tarski_navbar
+ * Filter the HTML generated for the navbar.
  */
 function tarski_navbar($return = false) {
 	global $wpdb;
@@ -374,7 +396,7 @@ function add_admin_link($navbar) {
 	if(is_user_logged_in())
 		$navbar['admin'] = sprintf(
 			'&lt;li&gt;&lt;a id=&quot;nav-admin&quot; href=&quot;%1$s&quot;&gt;%2$s&lt;/a&gt;&lt;/li&gt;',
-			 get_option('siteurl') . '/wp-admin/',
+			 admin_url(),
 			__('Site Admin','tarski')
 		);	
 	
@@ -419,6 +441,8 @@ function tarski_feedlink() {
  * @since 1.2
  * @param boolean $return
  * @return string $classes
+ * @hook filter tarski_bodyclass
+ * Filter the classes applied to the document body by Tarski.
  */
 function tarski_bodyclass($return = false) {
 	if(get_tarski_option('centred_theme')) { // Centred or not
@@ -459,6 +483,8 @@ function tarski_bodyclass($return = false) {
  * @global object $post
  * @global object $wp_query
  * @return string $body_id
+ * @hook filter tarski_bodyid
+ * Filter the document id value.
  */
 function tarski_bodyid($return = false) {
 	global $post, $wp_query;</diff>
      <filename>wp-content/themes/tarski/library/helpers/template_helper.php</filename>
    </modified>
    <modified>
      <diff>@@ -58,78 +58,15 @@ function tarski_widget_text_wrapper($text) {
 }
 
 /**
- * tarski_sidebar_links() - Returns an array for use with wp_list_bookmarks().
+ * tarski_widget_links_args() - Removes navbar links from the links widget.
  * 
- * If a link category has been selected as external links in the navbar,
- * it will be excluded from this array. Because wp_list_bookmarks() has no way
- * to exclude categories, this function is inefficient. This core patch
- * {@link http://trac.wordpress.org/ticket/6808} would allow a substantially
- * simpler function with one less database call.
- * @link http://trac.wordpress.org/ticket/6808
- * @since 2.0
- * @return array $options
- */
-function tarski_sidebar_links() {
-	$link_cat_args = array(
-		'orderby' =&gt; 'term_id',
-		'exclude' =&gt; get_tarski_option('nav_extlinkcat'),
-		'hierarchical'=&gt; 0
-	);
-	
-	$link_categories = &amp;get_terms('link_category', $link_cat_args);
-	
-	foreach($link_categories as $link_cat)
-		$link_cats[] = $link_cat-&gt;term_id;
-	
-	$link_cats = implode(',', $link_cats);
-	
-	$options = array(
-		'category' =&gt; $link_cats,
-		'category_before' =&gt; '',
-		'category_after' =&gt; '',
-		'title_before' =&gt; '&lt;h3&gt;',
-		'title_after' =&gt; '&lt;/h3&gt;',
-		'show_images' =&gt; 0,
-		'show_description' =&gt; 0,
-	);
-	
-	$options = apply_filters('tarski_sidebar_links', $options);
-	return $options;
-}
-
-/**
- * tarski_widget_links() - Tarski links widget.
- *
- * Doesn't display links from the category being used in the navbar,
- * if one is set.
- * @since 2.1
- * @see wp_widget_links()
+ * @since 2.2
  * @param array $args
- * @return string
- */
-function tarski_widget_links($args) {
-	extract($args, EXTR_SKIP);
-	wp_list_bookmarks(array_merge(tarski_sidebar_links(), array('category_before' =&gt; $before_widget, 'category_after' =&gt; $after_widget)));
-}
-
-/**
- * tarski_widget_search() - Replaces the default search widget.
- *
- * Hopefully temporary, a patch has been proposed for WP 2.6
- * which does the same thing.
- * @since 2.1
- * @link http://trac.wordpress.org/ticket/5567
+ * @return array
  */
-function tarski_widget_search($args) {
-	extract($args, EXTR_SKIP);
-	$searchform_template = get_template_directory() . '/searchform.php';
-
-	if ( !file_exists($searchform_template) )
-		$searchform_template = get_theme_root() . '/default/searchform.php';
-
-	echo $before_widget;
-	include_once($searchform_template);
-	echo $after_widget;
+function tarski_widget_links_args($args) {
+	$args['exclude_category'] = get_tarski_option('nav_extlinkcat');
+	return $args;
 }
 
 /**
@@ -176,11 +113,11 @@ function tarski_recent_entries($args) {
 		&lt;li&gt;
 			&lt;h4 class=&quot;recent-title&quot;&gt;&lt;a title=&quot;&lt;?php _e('View this post', 'tarski'); ?&gt;&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title() ?&gt;&lt;/a&gt;&lt;/h4&gt;
 			&lt;p class=&quot;recent-metadata&quot;&gt;&lt;?php
-			echo tarski_date();
+			echo the_time(get_option('date_format'));
 			if(!get_tarski_option('hide_categories')) {
 				_e(' in ', 'tarski'); the_category(', ');
 			} ?&gt;&lt;/p&gt;
-			&lt;div class=&quot;recent-excerpt content&quot;&gt;&lt;?php tarski_excerpt(); ?&gt;&lt;/div&gt;
+			&lt;div class=&quot;recent-excerpt content&quot;&gt;&lt;?php the_excerpt(); ?&gt;&lt;/div&gt;
 		&lt;/li&gt;
 		&lt;?php endwhile; ?&gt;
 	&lt;/ul&gt;</diff>
      <filename>wp-content/themes/tarski/library/helpers/widgets.php</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,15 @@ get_header(); ?&gt;
 			&lt;/div&gt; &lt;!-- /content --&gt;
 		&lt;?php } ?&gt;
 		&lt;div class=&quot;bookmarks&quot;&gt;
-			&lt;?php wp_list_bookmarks(tarski_sidebar_links()); ?&gt;
+			&lt;?php wp_list_bookmarks(array(
+				'exclude_category' =&gt; get_tarski_option('nav_extlinkcat'),
+				'category_before' =&gt; '',
+				'category_after' =&gt; '',
+				'title_before' =&gt; '&lt;h3&gt;',
+				'title_after' =&gt; '&lt;/h3&gt;',
+				'show_images' =&gt; 0,
+				'show_description' =&gt; 0
+			)); ?&gt;
 		&lt;/div&gt; &lt;!-- /bookmarks --&gt;
 
 		&lt;?php th_postend(); ?&gt;</diff>
      <filename>wp-content/themes/tarski/links.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,3 @@
-&lt;?php if(!is_home() &amp;&amp; !get_tarski_option('use_pages')) { $posts = query_posts($query_string . '&amp;nopaging=1'); } ?&gt;
-
 &lt;?php while(have_posts()) { the_post(); ?&gt;
 	
 	&lt;?php if(get_tarski_option('asidescategory') &amp;&amp; in_category(get_tarski_option('asidescategory'))) { // Aside loop ?&gt;
@@ -8,7 +6,7 @@
 			
 			&lt;div class=&quot;content entry-content&quot;&gt;&lt;?php the_content(__('Read the rest of this entry &amp;raquo;','tarski')); ?&gt;&lt;/div&gt;
 			
-			&lt;p class=&quot;meta&quot;&gt;&lt;span class=&quot;date updated&quot;&gt;&lt;?php echo tarski_date(); ?&gt;&lt;/span&gt;&lt;?php tarski_author_posts_link(); ?&gt; | &lt;a class=&quot;comments-link&quot; rel=&quot;bookmark&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php tarski_asides_permalink_text(); ?&gt;&lt;/a&gt;&lt;?php edit_post_link(__('edit','tarski'), ' (', ')'); ?&gt;&lt;/p&gt;
+			&lt;p class=&quot;meta&quot;&gt;&lt;span class=&quot;date updated&quot;&gt;&lt;?php the_time(get_option('date_format')); ?&gt;&lt;/span&gt;&lt;?php tarski_author_posts_link(); ?&gt; | &lt;a class=&quot;comments-link&quot; rel=&quot;bookmark&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php tarski_asides_permalink_text(); ?&gt;&lt;/a&gt;&lt;?php edit_post_link(__('edit','tarski'), ' (', ')'); ?&gt;&lt;/p&gt;
 			
 			&lt;?php th_postend(); ?&gt;
 			
@@ -22,7 +20,7 @@
 			
 			&lt;div class=&quot;meta&quot;&gt;
 				&lt;h2 class=&quot;title entry-title&quot; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;&lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot; rel=&quot;bookmark&quot; title=&quot;&lt;?php _e('Permanent link to ','tarski'); the_title(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
-				&lt;p class=&quot;metadata&quot;&gt;&lt;?php echo '&lt;span class=&quot;date updated&quot;&gt;'. tarski_date(). '&lt;/span&gt;';
+				&lt;p class=&quot;metadata&quot;&gt;&lt;?php echo '&lt;span class=&quot;date updated&quot;&gt;'. get_the_time(get_option('date_format')) . '&lt;/span&gt;';
 				tarski_post_categories_link();
 				tarski_author_posts_link();
 				tarski_comments_link();</diff>
      <filename>wp-content/themes/tarski/loop.php</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>wp-content/themes/tarski/screenshot.png</filename>
    </modified>
    <modified>
      <diff>@@ -3,9 +3,9 @@ Theme Name: Tarski
 Theme URI: http://tarskitheme.com/
 Description: An elegant, flexible theme developed by &lt;a href=&quot;http://extralogical.net/&quot;&gt;Ben Eastaugh&lt;/a&gt; and &lt;a href=&quot;http://ceejayoz.com/&quot;&gt;Chris Sternal-Johnson&lt;/a&gt;.
 Author: Benedict Eastaugh and Chris Sternal-Johnson
-Author URI: http://tarskitheme.com/
+Author URI: http://tarskitheme.com/about/
 Tags: white, custom header, fixed width, two columns, widgets, API, options page, update notifier
-Version: 2.1.4
+Version: 2.3
 .
 Released under the &lt;a href=&quot;http://www.opensource.org/licenses/gpl-license.php&quot;&gt;GPL&lt;/a&gt;.
 .
@@ -89,7 +89,7 @@ body.rtl #navigation ul.primary { direction: ltr; }
 		sub { vertical-align: sub; }
 		hr { width: 100%; height: 1px; background: #ccc; color: #ccc; margin: 1em 0; border: none; padding: 0; }
 	pre, code { font-family: Courier, &quot;Courier New&quot;, monospace; font-size: 1em; }
-		pre { overflow: scroll; margin: 0 0 1em 0; padding: 0 0 0.5em 0; }
+		pre { overflow: scroll; margin: 0 0 1em 0; padding: 0 0 0.5em 0; white-space: pre-wrap; }
 		body .primary pre { width: 500px; }
 		body .secondary pre { width: 200px; }
 		code { color: #7ca653; }
@@ -151,10 +151,18 @@ body.rtl #navigation ul.primary { direction: ltr; }
 	a img { border: 1px solid #006a80; }
 	a:hover img, body .comment a:hover .avatar { border: 1px solid #a8001c; }
 		#wrapper .gallery a:link, #wrapper .gallery-item a:visited, #wrapper .gallery-item a:hover, #wrapper .gallery-item a:active, #wrapper a.imagelink2 img, #wrapper a.imagelink2:hover img, #wrapper a.imagelink:link, #wrapper a.imagelink:visited, #wrapper a.imagelink:hover, #wrapper a.imagelink:active, #wrapper a.imagelink2:link, #wrapper a.imagelink2:visited, #wrapper a.imagelink2:hover, #wrapper a.imagelink2:active { border: none; }
-		body .imageleft { float: left; margin: 0 10px 10px 0; }
-		body .imageright { float: right; margin: 0 0 10px 10px; }
+		body .imageleft, body .alignleft { float: left; margin: 0 10px 10px 0; }
+		body .imageright, body .alignright { float: right; margin: 0 0 10px 10px; }
 		body .imageblock { display: block; margin: 0 0 1em 0; }
-		body .imagecentre, body .imagecenter { display: block; text-align: center; margin: 0 auto 1em auto; }
+		body .imagecentre, body .imagecenter, body .centered, body .aligncenter { display: block; text-align: center; margin: 0 auto 1em auto; }
+		
+	body .gallery { margin: 0 auto 1em 0; }
+	body .gallery-item { float: left; margin-top: 10px; text-align: center; }
+	body #wrapper .content .gallery-item a, body #wrapper .content .attachment a { border-bottom:none; }
+	body .gallery-caption { margin-left: 0; }
+	
+	
+	
 
 	/* Tags &amp; Tags page
 	--------------------------------------- */
@@ -233,6 +241,7 @@ input, select, textarea { font-family: Verdana, Helvetica, Arial, sans-serif; fo
 	body .searchbox { width: 200px; margin: 0 0 1em 0; }
 		#s { display: block; width: 194px; margin: 0 0 0.6em 0; border: 1px solid #ccc; padding: 2px; background: #fafafa; color: #404040; }
 		#s:focus { background: #fff; }
+		body.js #searchlabel { display: none; }
 
 	/* Comment form
 	--------------------------------------- */
@@ -287,30 +296,3 @@ body .widget { margin: 0 0 2em 0; }
 		body .widget_calendar tfoot td { font-family: 'Times New Roman', Times, Georgia, serif; font-size: 1.5em; }
 		body .widget_calendar #prev { text-align: left; }
 		body .widget_calendar #next { text-align: right; }
-		
-/*Add default wordpress align*/
-		img.centered {
-			display: block;
-			margin-left: auto;
-			margin-right: auto;
-			}
-
-		img.alignright {
-			padding: 4px;
-			margin: 0 0 2px 7px;
-			display: inline;
-			}
-
-		img.alignleft {
-			padding: 4px;
-			margin: 0 7px 2px 0;
-			display: inline;
-			}
-
-		.alignright {
-			float: right;
-			}
-
-		.alignleft {
-			float: left
-			}
\ No newline at end of file</diff>
      <filename>wp-content/themes/tarski/style.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,53 +1,54 @@
-/*
-polar.css
-'Polar' style for the Tarski theme - http://tarskitheme.com/
-Designed by Benedict Eastaugh, http://extralogical.net/
-*/
-
-
-/* Navigation
------------------------------------------------ */
-body.polar #wrapper .nav-current:link, body.polar #wrapper .nav-current:visited, body.polar #wrapper .nav-current:active { color: #a8a8a8; }
-body.polar #wrapper .nav-current:hover { color: #000; }
-	
-/* Content
------------------------------------------------ */
-body.polar code { color: #8fafbf; }
-body.polar abbr, body.polar acronym { border-bottom: 1px solid #5c8499; }
-		
-		/* Headers
-		--------------------------------------- */
-		body.polar h3 { color: #a8a8a8; }
-		
-		/* Post content
-		--------------------------------------- */
-		body.polar .articlenav { background: #fff; }
-		
-		/* Inserts
-		--------------------------------------- */
-		body.polar .insert { background: #fff; margin: 0 0 1em 0; border: 1px solid #cfdee5; padding: 9px; }
-			body.polar .insert h3 { border-bottom: 1px solid #cfdee5; }
-		
-		/* Downloads
-		--------------------------------------- */
-		body.polar .content a.download:link, body.polar .content a.download:visited, body.polar .content a.download:active { background-color: #fafcfc; border: 1px solid #cfdee5; }
-		
-		/* Images
-		--------------------------------------- */
-		body.polar img { border: 0px; }
-		
-/* Links
------------------------------------------------ */
-body.polar a:link, body.polar a:active, body.polar a:visited { color: #4c8099; }
-body.polar a:hover { color: #000; }
-
-body.polar .content a:link, body.polar .content a:active, body.polar .content a:visited, body.polar .link-pages a:link, body .link-pages a:active, body .link-pages a:visited, body .tagdata a:link, body.polar .tagdata a:active, body.polar .tagdata a:visited, body.polar .widget_tag_cloud a:link, body.polar .widget_tag_cloud a:active, body.polar .widget_tag_cloud a:visited { border-bottom: 1px solid #ccc; }
-body.polar .content a:hover, body.polar .link-pages a:hover, body.polar .tagdata a:hover, body.polar .widget_tag_cloud a:hover { border-bottom: 1px solid #000; }
-
-/* Widgets
------------------------------------------------ */
-
-	/* Calendar widget
-	------------------------------------------- */
-	body.polar .widget_calendar tbody td a { color: #fff; background: #8bb6cc; }
-	body.polar .widget_calendar tbody td a:hover { color: #fff; background: #404040; }
+/*
+polar.css
+'Polar' style for the Tarski theme - http://tarskitheme.com/
+Designed by Benedict Eastaugh, http://extralogical.net/
+*/
+
+
+/* Navigation
+----------------------------------------------- */
+body.polar #wrapper .nav-current:link, body.polar #wrapper .nav-current:visited, body.polar #wrapper .nav-current:active { color: #a8a8a8; }
+body.polar #wrapper .nav-current:hover { color: #000; }
+	
+/* Content
+----------------------------------------------- */
+body.polar code { color: #8fafbf; }
+body.polar abbr, body.polar acronym { border-bottom: 1px solid #5c8499; }
+		
+		/* Headers
+		--------------------------------------- */
+		body.polar h3 { color: #a8a8a8; }
+		
+		/* Post content
+		--------------------------------------- */
+		body.polar .articlenav { background: #fff; }
+		
+		/* Inserts
+		--------------------------------------- */
+		body.polar .insert { background: #fff; margin: 0 0 1em 0; border: 1px solid #cfdee5; padding: 9px; }
+			body.polar .insert h3 { border-bottom: 1px solid #cfdee5; }
+		
+		/* Downloads
+		--------------------------------------- */
+		body.polar .content a.download:link, body.polar .content a.download:visited, body.polar .content a.download:active { background-color: #fafcfc; border: 1px solid #cfdee5; }
+		
+		/* Images
+		--------------------------------------- */
+		body.polar a img { border: 1px solid #4c8099; }
+		body.polar a:hover img, body.polar .comment a:hover .avatar { border: 1px solid #000; }
+		
+/* Links
+----------------------------------------------- */
+body.polar a:link, body.polar a:active, body.polar a:visited { color: #4c8099; }
+body.polar a:hover { color: #000; }
+
+body.polar .content a:link, body.polar .content a:active, body.polar .content a:visited, body.polar .link-pages a:link, body .link-pages a:active, body .link-pages a:visited, body .tagdata a:link, body.polar .tagdata a:active, body.polar .tagdata a:visited, body.polar .widget_tag_cloud a:link, body.polar .widget_tag_cloud a:active, body.polar .widget_tag_cloud a:visited { border-bottom: 1px solid #ccc; }
+body.polar .content a:hover, body.polar .link-pages a:hover, body.polar .tagdata a:hover, body.polar .widget_tag_cloud a:hover { border-bottom: 1px solid #000; }
+
+/* Widgets
+----------------------------------------------- */
+
+	/* Calendar widget
+	------------------------------------------- */
+	body.polar .widget_calendar tbody td a { color: #fff; background: #8bb6cc; }
+	body.polar .widget_calendar tbody td a:hover { color: #fff; background: #404040; }</diff>
      <filename>wp-content/themes/tarski/styles/polar.css</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>53016768969f4ecad1fec54b790f93c794595071</id>
    </parent>
  </parents>
  <author>
    <name>Alexandre Girard</name>
    <email>alx.girard@gmail.com</email>
  </author>
  <url>http://github.com/alx/alexgirard.com-blog/commit/be9c8d14be7cc9c366b23be0c9ecc94fe52f016e</url>
  <id>be9c8d14be7cc9c366b23be0c9ecc94fe52f016e</id>
  <committed-date>2008-08-14T09:51:33-07:00</committed-date>
  <authored-date>2008-08-14T09:51:33-07:00</authored-date>
  <message>Update tarski to 2.3</message>
  <tree>e1347d5d496cb557632ce6a21a1718d350f3af55</tree>
  <committer>
    <name>Alexandre Girard</name>
    <email>alx.girard@gmail.com</email>
  </committer>
</commit>
