diff --git a/cms/pages/modules/cms_catalogues.php b/cms/pages/modules/cms_catalogues.php
index 382e693..a442043 100644
--- a/cms/pages/modules/cms_catalogues.php
+++ b/cms/pages/modules/cms_catalogues.php
@@ -1668,9 +1668,10 @@ class Module_cms_catalogues_alt extends standard_aed_module
 			$fields->attach(form_input_text_comcode(do_lang_tempcode('DESCRIPTION'),do_lang_tempcode('DESCRIPTION_CATALOGUE_DESCRIPTION'),'description',$description,false));
 
 			$display_types=new ocp_tempcode();
-			$display_types->attach(form_input_list_entry(strval(0),$display_type==0,do_lang_tempcode('DT_MAPS')));
-			$display_types->attach(form_input_list_entry(strval(1),$display_type==1,do_lang_tempcode('DT_LIST')));
-			$display_types->attach(form_input_list_entry(strval(2),$display_type==2,do_lang_tempcode('DT_MATRIX')));
+			foreach (array(C_DT_FIELDMAPS=>'DT_FIELDMAPS',C_DT_TITLELIST=>'DT_TITLELIST',C_DT_TABULAR=>'DT_TABULAR',C_DT_GRID=>'DT_GRID') as $_display_type=>$display_type_str)
+			{
+				$display_types->attach(form_input_list_entry(strval($_display_type),$display_type==$_display_type,do_lang_tempcode($display_type_str)));
+			}
 			$fields->attach(form_input_list(do_lang_tempcode('DISPLAY_TYPE'),do_lang_tempcode('DESCRIPTION_DISPLAY_TYPE'),'display_type',$display_types));
 
 			if (addon_installed('shopping'))
diff --git a/lang/EN/catalogues.ini b/lang/EN/catalogues.ini
index 418b21c..346d6b1 100644
--- a/lang/EN/catalogues.ini
+++ b/lang/EN/catalogues.ini
@@ -62,9 +62,10 @@ ECOM_CATD_stock_level_maintain=Whether stock will be maintained. If the stock is
 DISPLAY_TYPE=Catalogue display type
 DESCRIPTION_DISPLAY_TYPE=How the catalogue data will be displayed in categories (view pages on the other hand always show mapped details for a single entry). Be aware that if you wish to you can also provide your own templates for a catalogue (described in the documentation).
 VIEW_CATALOGUE=View catalogue's index
-DT_MAPS=Field-maps (Each entry is in it's own 2 column table)
-DT_LIST=Title lists (A list of links, with link captions as entry titles)
-DT_MATRIX=Tabular listings (Entries as rows, Fields as columns)
+DT_FIELDMAPS=Field-maps (Each entry is in it's own 2 column table)
+DT_TITLELIST=Title lists (A list of links, with link captions as entry titles)
+DT_TABULAR=Tabular listings (Entries as rows, Fields as columns)
+DT_GRID=Grid of images (In the default tpl set the 2nd catalogue field must be an image)
 PUT_IN_CATEGORY=Display in category-views
 PUT_IN_SEARCH=Display in search/feature-views
 DESCRIPTION_PUT_IN_CATEGORY=Whether the field is to be shown in category views (not applicable for the &lsquo;title lists&rsquo; display type).
diff --git a/site/pages/modules/catalogues.php b/site/pages/modules/catalogues.php
index ae1eea6..6e214cf 100644
--- a/site/pages/modules/catalogues.php
+++ b/site/pages/modules/catalogues.php
@@ -254,7 +254,7 @@ class Module_catalogues
 			$groups=$GLOBALS['FORUM_DRIVER']->get_usergroup_list(false,true);
 
 			// Projects
-			actual_add_catalogue('projects',lang_code_to_default_content('DEFAULT_CATALOGUE_PROJECTS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_PROJECTS_DESCRIPTION',true,3),0,0,'',30);
+			actual_add_catalogue('projects',lang_code_to_default_content('DEFAULT_CATALOGUE_PROJECTS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_PROJECTS_DESCRIPTION',true,3),C_DT_FIELDMAPS,0,'',30);
 			$fields=array(
 				array('NAME','DESCRIPTION_NAME','short_trans',1,1),
 				array('MAINTAINER','DESCRIPTION_MAINTAINER','user',0,1),
@@ -272,7 +272,7 @@ class Module_catalogues
 			add_menu_item_simple('main_content',NULL,'DEFAULT_CATALOGUE_PROJECTS_TITLE','_SEARCH:catalogues:type=index:id=projects');
 
 			// Modifications
-			actual_add_catalogue('modifications',lang_code_to_default_content('DEFAULT_CATALOGUE_MODIFICATIONS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_MODIFICATIONS_DESCRIPTION',true,3),1,0,'',60);
+			actual_add_catalogue('modifications',lang_code_to_default_content('DEFAULT_CATALOGUE_MODIFICATIONS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_MODIFICATIONS_DESCRIPTION',true,3),C_DT_TITLELIST,0,'',60);
 			$fields=array(
 				array('NAME','DESCRIPTION_NAME','short_trans',1,1),
 				array('IMAGE','DESCRIPTION_MODIFICATION_IMAGE_URL','picture',0,0),
@@ -288,7 +288,7 @@ class Module_catalogues
 			add_menu_item_simple('main_content',NULL,'DEFAULT_CATALOGUE_MODIFICATIONS_TITLE','_SEARCH:catalogues:type=index:id=modifications');
 
 			// Hosted-sites
-			actual_add_catalogue('hosted',lang_code_to_default_content('DEFAULT_CATALOGUE_HOSTED_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_HOSTED_DESCRIPTION',true,3),0,0,'',0);
+			actual_add_catalogue('hosted',lang_code_to_default_content('DEFAULT_CATALOGUE_HOSTED_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_HOSTED_DESCRIPTION',true,3),C_DT_FIELDMAPS,0,'',0);
 			$fields=array(
 				array('NAME','DESCRIPTION_NAME','short_trans',1,1),
 				array('URL','DESCRIPTION_URL','url',0,0),
@@ -305,7 +305,7 @@ class Module_catalogues
 			add_menu_item_simple('main_content',NULL,'DEFAULT_CATALOGUE_HOSTED_TITLE','_SEARCH:catalogues:type=index:id=hosted');
 
 			// Links
-			$links_category=actual_add_catalogue('links',lang_code_to_default_content('DEFAULT_CATALOGUE_LINKS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_LINKS_DESCRIPTION',true,3),2,1,'',0);
+			$links_category=actual_add_catalogue('links',lang_code_to_default_content('DEFAULT_CATALOGUE_LINKS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_LINKS_DESCRIPTION',true,3),C_DT_TABULAR,1,'',0);
 			$fields=array(
 				// Name, Description, Type, Defines order, Required, Put in category
 				array('TITLE','DESCRIPTION_TITLE','short_trans',1,1,1),
@@ -322,7 +322,7 @@ class Module_catalogues
 			add_menu_item_simple('main_content',NULL,'DEFAULT_CATALOGUE_LINKS_TITLE','_SEARCH:catalogues:type=index:id=links');
 
 			// FAQs
-			actual_add_catalogue('faqs',lang_code_to_default_content('DEFAULT_CATALOGUE_FAQS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_FAQS_DESCRIPTION',true,3),0,0,'',0);
+			actual_add_catalogue('faqs',lang_code_to_default_content('DEFAULT_CATALOGUE_FAQS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_FAQS_DESCRIPTION',true,3),C_DT_FIELDMAPS,0,'',0);
 			$fields=array(
 				array('QUESTION','DESCRIPTON_QUESTION','short_trans',0,1,1),
 				array('ANSWER','_DESCRIPTION_ANSWER','long_trans',0,1,1),
@@ -339,7 +339,7 @@ class Module_catalogues
 			add_menu_item_simple('main_content',NULL,'DEFAULT_CATALOGUE_FAQS_TITLE','_SEARCH:catalogues:type=index:id=faqs');
 
 			// Contacts
-			actual_add_catalogue('contacts',lang_code_to_default_content('CONTACTS',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_CONTACTS_DESCRIPTION',true,3),0,0,'',30);
+			actual_add_catalogue('contacts',lang_code_to_default_content('CONTACTS',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_CONTACTS_DESCRIPTION',true,3),C_DT_FIELDMAPS,0,'',30);
 			$fields=array(
 				array('CONTACT_FIRST_NAME','','short_text',0,1),
 				array('CONTACT_LAST_NAME','','short_text',1,1),
@@ -387,7 +387,7 @@ class Module_catalogues
 
 		if ((is_null($upgrade_from)) || ($upgrade_from<3))
 		{
-			$cat_id=actual_add_catalogue('products',lang_code_to_default_content('DEFAULT_CATALOGUE_PRODUCTS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_PRODUCTS_DESCRIPTION',false,2),1,1,'',0,1);
+			$cat_id=actual_add_catalogue('products',lang_code_to_default_content('DEFAULT_CATALOGUE_PRODUCTS_TITLE',false,2),lang_code_to_default_content('DEFAULT_CATALOGUE_PRODUCTS_DESCRIPTION',false,2),C_DT_GRID,1,'',0,1);
 
 			$fields=array(
 				//		Name							 Description			Type			  Defines order  Required  Visible  Searchable
@@ -864,7 +864,7 @@ class Module_catalogues
 			if ($uses_rep_image || $is_ecommerce)
 			{
 				$display_string=do_lang_tempcode(($catalogue['c_is_tree']==1)?'CATEGORY_SUBORDINATE':'CATEGORY_SUBORDINATE_2',integer_format($num_entries),integer_format($num_children));
-				if($sc['rep_image'])
+				if ($sc['rep_image'])
 					$rep_image=do_image_thumb($sc['rep_image'],$sc['cc_title'],$sc['cc_title'],false);
 				else
 					$rep_image=new ocp_tempcode();
@@ -963,7 +963,24 @@ class Module_catalogues
 			$cart_link=show_cart_image();
 		}
 
-		return do_template('CATALOGUE_'.$tpl_set.'_CATEGORY_SCREEN',array('ID'=>strval($id),'ADD_DATE_RAW'=>strval($category['cc_add_date']),'TITLE'=>$title,'_TITLE'=>$_title,'TAGS'=>get_loaded_tags('catalogue_categories'),'CATALOGUE'=>$catalogue_name,'BROWSER'=>$browser,'SORTING'=>$sorting,'ADD_LINK'=>$add_link,'ADD_CAT_URL'=>$add_cat_url,'EDIT_CAT_URL'=>$edit_cat_url,'EDIT_CATALOGUE_URL'=>$edit_catalogue_url,'ENTRIES'=>$entry_buildup,'SUBCATEGORIES'=>$subcategories,'DESCRIPTION'=>get_translated_tempcode($category['cc_description']),'CART_LINK'=>$cart_link,'TREE'=>$tree),NULL,false,'CATALOGUE_DEFAULT_CATEGORY_SCREEN');
+		$display_type='';
+		switch ($catalogue['c_display_type'])
+		{
+			case C_DT_FIELDMAPS:
+				$display_type='FIELDMAPS';
+				break;
+			case C_DT_TITLELIST:
+				$display_type='TITLELIST';
+				break;
+			case C_DT_TABULAR:
+				$display_type='TABULAR';
+				break;
+			case C_DT_GRID:
+				$display_type='GRID';
+				break;
+		}
+
+		return do_template('CATALOGUE_'.$tpl_set.'_CATEGORY_SCREEN',array('ID'=>strval($id),'DISPLAY_TYPE'=>$display_type,'ADD_DATE_RAW'=>strval($category['cc_add_date']),'TITLE'=>$title,'_TITLE'=>$_title,'TAGS'=>get_loaded_tags('catalogue_categories'),'CATALOGUE'=>$catalogue_name,'BROWSER'=>$browser,'SORTING'=>$sorting,'ADD_LINK'=>$add_link,'ADD_CAT_URL'=>$add_cat_url,'EDIT_CAT_URL'=>$edit_cat_url,'EDIT_CATALOGUE_URL'=>$edit_catalogue_url,'ENTRIES'=>$entry_buildup,'SUBCATEGORIES'=>$subcategories,'DESCRIPTION'=>get_translated_tempcode($category['cc_description']),'CART_LINK'=>$cart_link,'TREE'=>$tree),NULL,false,'CATALOGUE_DEFAULT_CATEGORY_SCREEN');
 	}
 
 	/**
@@ -1004,7 +1021,7 @@ class Module_catalogues
 
 		$catalogues=$GLOBALS['SITE_DB']->query_select('catalogues',array('*'),array('c_name'=>$catalogue_name),'',1);
 
-		if(!array_key_exists(0,$catalogues)) warn_exit(do_lang_tempcode('MISSING_RESOURCE'));
+		if (!array_key_exists(0,$catalogues)) warn_exit(do_lang_tempcode('MISSING_RESOURCE'));
 
 		$catalogue=$catalogues[0];
 
@@ -1095,7 +1112,6 @@ class Module_catalogues
 		$catalogue_rows=$GLOBALS['SITE_DB']->query_select('catalogues',array('*'),array('c_name'=>$catalogue_name),'',1);
 		if (!array_key_exists(0,$catalogue_rows)) warn_exit(do_lang_tempcode('MISSING_RESOURCE'));
 		$catalogue=$catalogue_rows[0];
-		//$tpl_set=$catalogue_name;
 		$description=get_translated_tempcode($catalogue['c_description']);
 		$description_2=get_translated_text($catalogue['c_description']);
 		$title_to_use=do_lang_tempcode($catalogue_name.'__CATALOGUE_INDEX',escape_html(get_translated_text($catalogue['c_title'])));
@@ -1129,9 +1145,6 @@ class Module_catalogues
 		{
 			if ((get_value('disable_cat_cat_perms')!=='1') && (!has_category_access(get_member(),'catalogues_category',strval($myrow['id'])))) continue;
 
-	//		$count=$GLOBALS['SITE_DB']->query_value_null_ok('catalogue_entries','COUNT(*)',array('cc_id'=>$myrow['id'],'ce_validated'=>1));
-	//		if (!($count>0)) continue;
-
 			$url=build_url(array('page'=>'_SELF','id'=>$myrow['id'],'type'=>'category'),'_SELF');
 			$name=$myrow['cc_title'];
 			$description=get_translated_tempcode($myrow['cc_description']);
diff --git a/sources/catalogues.php b/sources/catalogues.php
index 6f884c2..e31d3e6 100644
--- a/sources/catalogues.php
+++ b/sources/catalogues.php
@@ -30,11 +30,12 @@ function init__catalogues()
 	$CAT_FIELDS_CACHE=array();
 
 	// We do not actually necessarily use these constants in the code (they're based on an extensive of an old BINARY field): but they're here for reference so as to understand the codes
-	if (!defined('C_DT_MAPS'))
+	if (!defined('C_DT_FIELDMAPS'))
 	{
-		define('C_DT_MAPS',0);
-		define('C_DT_LIST',1);
-		define('C_DT_MATRIX',2);
+		define('C_DT_FIELDMAPS',0);
+		define('C_DT_TITLELIST',1);
+		define('C_DT_TABULAR',2);
+		define('C_DT_GRID',3);
 	}
 }
 
@@ -279,7 +280,7 @@ function get_catalogue_category_entry_buildup($category_id,$catalogue_name,$cata
 	{
 		if ((!$in_db_sorting) || (((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || ((is_array($select)) && (in_array($entry['id'],$select))))))
 		{
-			$entries[$i]['map']=get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root,$fields,(($display_type==1) && (!$is_ecomm) && (!is_null($order_by)))?array(0,intval($order_by)):NULL,false,false,intval($order_by));
+			$entries[$i]['map']=get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root,$fields,(($display_type==C_DT_TITLELIST) && (!$is_ecomm) && (!is_null($order_by)))?array(0,intval($order_by)):NULL,false,false,intval($order_by));
 		}
 	}
 
@@ -400,7 +401,7 @@ function get_catalogue_category_entry_buildup($category_id,$catalogue_name,$cata
 	$entry_buildup=new ocp_tempcode();
 
 	$extra_map=array();
-	if($is_ecomm)
+	if ($is_ecomm)
 	{	
 		require_lang('shopping');
 		$i=0;
@@ -413,81 +414,97 @@ function get_catalogue_category_entry_buildup($category_id,$catalogue_name,$cata
 		}
 	}
 
-	
-	if ($display_type==2)
+	switch ($display_type)
 	{
-		for ($i=0;$i<$num_entries;$i++)
-		{
-			if (!array_key_exists($i,$entries)) break;
-			$entry=$entries[$i];			
-			if (((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || (is_array($select)) && (in_array($entry['id'],$select))))
+		case C_DT_FIELDMAPS:
+			for ($i=0;$i<$num_entries;$i++)
 			{
-				$tab_entry_map=$entry['map']+(array_key_exists($i,$extra_map)?$extra_map[$i]:array());
-				if ((get_option('is_on_comments')=='1') && ($entry['allow_comments']>=1) || (get_option('is_on_rating')=='1') && ($entry['allow_rating']==1) || (get_option('is_on_trackbacks')=='1') && ($entry['allow_trackbacks']==1))
-				{
-					$tab_entry_map['VIEW_URL']=build_url(array('page'=>'catalogues','type'=>'entry','id'=>$entry['id'],'root'=>($root==-1)?NULL:$root),get_module_zone('catalogues'));
-				} else
-				{
-					$tab_entry_map['VIEW_URL']='';
-				}
+				if (!array_key_exists($i,$entries)) break;
+
+				$entry=$entries[$i];
 
-				$entry_buildup->attach(/*Preserve memory*/static_evaluate_tempcode(do_template('CATALOGUE_'.$tpl_set.'_TAB_ENTRY',$tab_entry_map,NULL,false,'CATALOGUE_DEFAULT_TAB_ENTRY')));
+				if ((is_null($max)) || ((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || ((is_array($select)) && (in_array($entry['id'],$select)))))
+					$entry_buildup->attach(do_template('CATALOGUE_'.$tpl_set.'_FIELDMAP_ENTRY_WRAP',$entry['map']+(array_key_exists($i,$extra_map)?$extra_map[$i]:array()),NULL,false,'CATALOGUE_DEFAULT_FIELDMAP_ENTRY_WRAP'));
 			}
-			if ((!is_null($start)) && ($i>=$start+$max)) break;
-		}
+			break;
 
-		if (!$entry_buildup->is_empty())
-		{
-			$head=new ocp_tempcode();
-			$field_count=0;
-			foreach ($fields as $i=>$field)
+		case C_DT_TITLELIST:
+			for ($i=0;$i<$num_entries;$i++)
+			{
+				if (!array_key_exists($i,$entries)) break;
+
+				$entry=$entries[$i];
+
+				if (((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || ((is_array($select)) && (in_array($entry['id'],$select)))))
+					$entry_buildup->attach(do_template('CATALOGUE_'.$tpl_set.'_TITLELIST_ENTRY',$entry['map']+(array_key_exists($i,$extra_map)?$extra_map[$i]:array()),NULL,false,'CATALOGUE_DEFAULT_TITLELIST_ENTRY'));
+			}
+			if (!$entry_buildup->is_empty()) $entry_buildup=do_template('CATALOGUE_'.$tpl_set.'_TITLELIST_WRAP',$entry['map']+array('CATALOGUE'=>$catalogue_name,'CONTENT'=>$entry_buildup),NULL,false,'CATALOGUE_DEFAULT_TITLELIST_WRAP');
+			break;
+
+		case C_DT_TABULAR:
+			for ($i=0;$i<$num_entries;$i++)
 			{
-				if (((($field['cf_put_in_category']==1) && ($view_type=='CATEGORY')) || (($field['cf_put_in_search']==1) && ($view_type=='SEARCH'))) && ($field['cf_visible']==1))
+				if (!array_key_exists($i,$entries)) break;
+				$entry=$entries[$i];			
+				if (((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || (is_array($select)) && (in_array($entry['id'],$select))))
 				{
-					if ($field['cf_searchable']==1)
+					$tab_entry_map=$entry['map']+(array_key_exists($i,$extra_map)?$extra_map[$i]:array());
+					if ((get_option('is_on_comments')=='1') && ($entry['allow_comments']>=1) || (get_option('is_on_rating')=='1') && ($entry['allow_rating']==1) || (get_option('is_on_trackbacks')=='1') && ($entry['allow_trackbacks']==1))
 					{
-						$sort_url_asc=get_self_url(false,false,array('order'=>strval($field['id']).' ASC'),true);
-						$sort_url_desc=get_self_url(false,false,array('order'=>strval($field['id']).' DESC'),true);
-						$sort_asc_selected=(($order_by==strval($field['id'])) && ($direction=='ASC'));
-						$sort_desc_selected=(($order_by==strval($field['id'])) && ($direction=='DESC'));
+						$tab_entry_map['VIEW_URL']=build_url(array('page'=>'catalogues','type'=>'entry','id'=>$entry['id'],'root'=>($root==-1)?NULL:$root),get_module_zone('catalogues'));
 					} else
 					{
-						$sort_url_asc='';
-						$sort_url_desc='';
-						$sort_asc_selected=false;
-						$sort_desc_selected=false;
+						$tab_entry_map['VIEW_URL']='';
 					}
-					$head->attach(do_template('CATALOGUE_'.$tpl_set.'_TAB_FIELD_HEAD',array('SORT_ASC_SELECTED'=>$sort_asc_selected,'SORT_DESC_SELECTED'=>$sort_desc_selected,'SORT_URL_ASC'=>$sort_url_asc,'SORT_URL_DESC'=>$sort_url_desc,'CATALOGUE'=>$catalogue_name,'FIELDID'=>strval($i),'_FIELDID'=>strval($field['id']),'FIELD'=>get_translated_text($field['cf_name']),'FIELDTYPE'=>$field['cf_type']),NULL,false,'CATALOGUE_DEFAULT_TAB_FIELD_HEAD'));
-					$field_count++;
+
+					$entry_buildup->attach(/*Preserve memory*/static_evaluate_tempcode(do_template('CATALOGUE_'.$tpl_set.'_TABULAR_ENTRY_WRAP',$tab_entry_map,NULL,false,'CATALOGUE_DEFAULT_TABULAR_ENTRY_WRAP')));
 				}
+				if ((!is_null($start)) && ($i>=$start+$max)) break;
 			}
-			$entry_buildup=do_template('CATALOGUE_'.$tpl_set.'_TAB_WRAP',array('CATALOGUE'=>$catalogue_name,'HEAD'=>$head,'CONTENT'=>$entry_buildup,'FIELD_COUNT'=>strval($field_count)),NULL,false,'CATALOGUE_DEFAULT_TAB_WRAP');
-		}
-	}
-	elseif ($display_type==0)
-	{		
-		for ($i=0;$i<$num_entries;$i++)
-		{
-			if (!array_key_exists($i,$entries)) break;
 
-			$entry=$entries[$i];
+			if (!$entry_buildup->is_empty())
+			{
+				$head=new ocp_tempcode();
+				$field_count=0;
+				foreach ($fields as $i=>$field)
+				{
+					if (((($field['cf_put_in_category']==1) && ($view_type=='CATEGORY')) || (($field['cf_put_in_search']==1) && ($view_type=='SEARCH'))) && ($field['cf_visible']==1))
+					{
+						if ($field['cf_searchable']==1)
+						{
+							$sort_url_asc=get_self_url(false,false,array('order'=>strval($field['id']).' ASC'),true);
+							$sort_url_desc=get_self_url(false,false,array('order'=>strval($field['id']).' DESC'),true);
+							$sort_asc_selected=(($order_by==strval($field['id'])) && ($direction=='ASC'));
+							$sort_desc_selected=(($order_by==strval($field['id'])) && ($direction=='DESC'));
+						} else
+						{
+							$sort_url_asc='';
+							$sort_url_desc='';
+							$sort_asc_selected=false;
+							$sort_desc_selected=false;
+						}
+						$head->attach(do_template('CATALOGUE_'.$tpl_set.'_TABULAR_HEADCELL',array('SORT_ASC_SELECTED'=>$sort_asc_selected,'SORT_DESC_SELECTED'=>$sort_desc_selected,'SORT_URL_ASC'=>$sort_url_asc,'SORT_URL_DESC'=>$sort_url_desc,'CATALOGUE'=>$catalogue_name,'FIELDID'=>strval($i),'_FIELDID'=>strval($field['id']),'FIELD'=>get_translated_text($field['cf_name']),'FIELDTYPE'=>$field['cf_type']),NULL,false,'CATALOGUE_DEFAULT_TABULAR_HEADCELL'));
+						$field_count++;
+					}
+				}
+				$entry_buildup=do_template('CATALOGUE_'.$tpl_set.'_TABULAR_WRAP',array('CATALOGUE'=>$catalogue_name,'HEAD'=>$head,'CONTENT'=>$entry_buildup,'FIELD_COUNT'=>strval($field_count)),NULL,false,'CATALOGUE_DEFAULT_TABULAR_WRAP');
+			}
+			break;
 
-			if ((is_null($max)) || ((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || ((is_array($select)) && (in_array($entry['id'],$select)))))
-				$entry_buildup->attach(do_template('CATALOGUE_'.$tpl_set.'_ENTRY_EMBED',$entry['map']+(array_key_exists($i,$extra_map)?$extra_map[$i]:array()),NULL,false,'CATALOGUE_DEFAULT_ENTRY_EMBED'));
-		}
-	}
-	else
-	{
-		for ($i=0;$i<$num_entries;$i++)
-		{
-			if (!array_key_exists($i,$entries)) break;
+		case C_DT_GRID:
+			for ($i=0;$i<$num_entries;$i++)
+			{
+				if (!array_key_exists($i,$entries)) break;
 
-			$entry=$entries[$i];
+				$entry=$entries[$i];
 
-			if (((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || ((is_array($select)) && (in_array($entry['id'],$select)))))
-				$entry_buildup->attach(do_template('CATALOGUE_'.$tpl_set.'_LINE',$entry['map']+(array_key_exists($i,$extra_map)?$extra_map[$i]:array()),NULL,false,'CATALOGUE_DEFAULT_LINE'));
-		}
-		if (!$entry_buildup->is_empty()) $entry_buildup=do_template('CATALOGUE_'.$tpl_set.'_LINE_WRAP',$entry['map']+array('CATALOGUE'=>$catalogue_name,'CONTENT'=>$entry_buildup),NULL,false,'CATALOGUE_DEFAULT_LINE_WRAP');
+				if ((is_null($max)) || ((is_null($start)) || ($i>=$start) && ($i<$start+$max)) && ((!is_array($select)) || ((is_array($select)) && (in_array($entry['id'],$select)))))
+					$entry_buildup->attach(do_template('CATALOGUE_'.$tpl_set.'_GRID_ENTRY_WRAP',$entry['map']+(array_key_exists($i,$extra_map)?$extra_map[$i]:array()),NULL,false,'CATALOGUE_DEFAULT_GRID_ENTRY_WRAP'));
+			}
+			break;
+
+		default:
+			warn_exit(do_lang_tempcode('INTERNAL_ERROR'));
 	}
 
 	return array($entry_buildup,$sorting,$entries,$num_entries);
@@ -512,7 +529,10 @@ function get_catalogue_category_entry_buildup($category_id,$catalogue_name,$cata
 function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NULL,$fields=NULL,$only_fields=NULL,$feedback_details=false,$tree_details=false,$order_by=NULL)
 {
 	$id=$entry['id'];
+	$all_visible=true;
+	require_code('fields');
 
+	// Load catalogue if needed
 	if (is_null($catalogue))
 	{
 		$catalogue_rows=$GLOBALS['SITE_DB']->query_select('catalogues',array('*'),array('c_name'=>$entry['c_name']),'',1);
@@ -520,25 +540,23 @@ function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NUL
 		$catalogue=$catalogue_rows[0];
 	}
 
-	// Views
-	if (get_db_type()!='xml')
-	{
-		$entry['ce_views']++;
-	}
-
+	// Update view count
+	if (get_db_type()!='xml') $entry['ce_views']++;
 
+	// Get values
 	$catalogue_name=$catalogue['c_name'];
 	$fields=get_catalogue_entry_field_values($catalogue_name,$entry,$only_fields,$fields);
+
+	// Prepare output map
 	$map=array();
 	$map['FIELDS']=new ocp_tempcode();
-	$map['FIELDS_TABLE']=new ocp_tempcode();
+	$map['FIELDS_GRID']=new ocp_tempcode();
+	$map['FIELDS_TABULAR']=new ocp_tempcode();
 	$map['fields']=$fields;
 	$fields_1d=array();
 	$fields_2d=array();
-	$all_visible=true;
-	
-	require_code('fields');
 
+	// Loop over all fields
 	foreach ($fields as $i=>$field)
 	{
 		if (!array_key_exists('effective_value',$field))
@@ -547,33 +565,36 @@ function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NUL
 			continue;
 		}
 
-		$ev=$field['effective_value'];
-		$dereference_ev=is_object($field['effective_value'])?$field['effective_value']->evaluate():$field['effective_value'];
-		$use_ev=$dereference_ev;
-		/*if (($field['cf_visible']==1) || ($i==0) || ($order_by===$i)) // If it's visible, or if it is the first (name) field, or if it is our order field        Actually we always want the data even if it's not visible, especially for catalogues */
+		// Do field details if it's visible, or if it is the first (name) field, or if it is our order field
+		/*if (($field['cf_visible']==1) || ($i==0) || ($order_by===$i)) Actually we always want the data even if it's not visible, especially for catalogues */
 		{
+			// Value to show
+			$ev=$field['effective_value'];
+			$dereference_ev=is_object($field['effective_value'])?$field['effective_value']->evaluate():$field['effective_value'];
 			$ob=get_fields_hook($field['cf_type']);
-			$use_ev=$ob->render_field_value($field,$ev,$i,$only_fields);
-			if (($i==0) && ($catalogue['c_display_type']==1))
+			if (($i==0) && ($catalogue['c_display_type']==C_DT_TITLELIST))
 			{
-				//$use_ev=hyperlink(build_url(array('page'=>'catalogues','type'=>'entry','id'=>$id,'root'=>$root),get_module_zone('catalogues')),$ev,false,!is_object($ev));
 				$use_ev=$ev;
+			} else
+			{
+				$use_ev=$ob->render_field_value($field,$ev,$i,$only_fields);
 			}
 		
-			//Set image thumbnail in to the map array
-			if($field['cf_type']=='picture')
+			// Special case for access to raw thumbnail
+			if ($field['cf_type']=='picture')
 			{
-				if((!is_null($ev)) && ($dereference_ev!=''))
+				if ((!is_null($ev)) && ($dereference_ev!=''))
 				{
 					require_code('images');
-					$map['FIELD_'.strval($i).'_THUMB']=do_image_thumb($dereference_ev,($i==0)?'':(is_object($map['FIELD_0'])?$map['FIELD_0']->evaluate():$map['FIELD_0']),false,false,100,100);
+					$map['FIELD_'.strval($i).'_THUMB']=do_image_thumb($dereference_ev,($i==0)?'':(is_object($map['FIELD_0'])?$map['FIELD_0']->evaluate():$map['FIELD_0']),false,false);
 				} else
 				{
 					$map['FIELD_'.strval($i).'_THUMB']= new ocp_tempcode();
 				}
 				$map['_FIELD_'.strval($field['id']).'_THUMB']=$map['FIELD_'.strval($i).'_THUMB'];
 			}
-	
+
+			// Different ways of accessing the main field value, and pure version of it
 			$map['FIELD_'.strval($i)]=$use_ev;
 			$map['_FIELD_'.strval($field['id'])]=$use_ev;
 			$map['FIELD_'.strval($i).'_PLAIN']=$ev;
@@ -588,31 +609,21 @@ function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NUL
 			$fields_2d[]=array('NAME'=>$field_name,'VALUE'=>$use_ev);
 			$field_type=$field['cf_type'];
 			$map['FIELDTYPE_'.strval($i)]=$field_type;
-			
+
+			// If the field should be shown, show it
 			if (($view_type=='PAGE') || (($field['cf_put_in_category']==1) && ($view_type=='CATEGORY')) || (($field['cf_put_in_search']==1) && ($view_type=='SEARCH')))
 			{
 				$use_ev_enhanced=$use_ev;
-				/*if (($view_type!='PAGE') && ($i==0) && (($field['cf_type']=='short_trans') || ($field['cf_type']=='short_text')))
-				{
-					foreach ($fields as $field_temp)
-					{
-						if ((array_key_exists('effective_value',$field_temp)) && ($field_temp['cf_type']=='url') && (!((($field_temp['cf_put_in_category']==1) && ($view_type=='CATEGORY')) || (($field_temp['cf_put_in_search']==1) && ($view_type=='SEARCH')))) && ($field_temp['cf_visible']==1))
-						{
-							if ($field_temp['effective_value']!='')
-							{
-								$use_ev_enhanced=hyperlink($field_temp['effective_value'],$use_ev,true);
-								break;
-							}
-						}
-					}
-				}*/
 
 				if (($field['cf_visible']==1) || ($i==0))
 				{
-					$_field=do_template('CATALOGUE_'.$tpl_set.'_ENTRY_FIELD',array('ENTRYID'=>strval($id),'CATALOGUE'=>$catalogue_name,'TYPE'=>$field['cf_type'],'FIELD'=>$field_name,'FIELDID'=>strval($i),'_FIELDID'=>strval($field['id']),'FIELDTYPE'=>$field_type,'VALUE_PLAIN'=>$ev,'VALUE'=>$use_ev_enhanced),NULL,false,'CATALOGUE_DEFAULT_ENTRY_FIELD');
-					if ((!is_string($ev)) || ($ev!='')) $map['FIELDS']->attach($_field);
-					$_field=do_template('CATALOGUE_'.$tpl_set.'_TAB_FIELD',array('ENTRYID'=>strval($id),'CATALOGUE'=>$catalogue_name,'TYPE'=>$field['cf_type'],'FIELD'=>$field_name,'FIELDID'=>strval($i),'_FIELDID'=>strval($field['id']),'FIELDTYPE'=>$field_type,'VALUE_PLAIN'=>$ev,'VALUE'=>$use_ev_enhanced),NULL,false,'CATALOGUE_DEFAULT_TAB_FIELD');
-					$map['FIELDS_TABLE']->attach($_field);
+					$f=array('ENTRYID'=>strval($id),'CATALOGUE'=>$catalogue_name,'TYPE'=>$field['cf_type'],'FIELD'=>$field_name,'FIELDID'=>strval($i),'_FIELDID'=>strval($field['id']),'FIELDTYPE'=>$field_type,'VALUE_PLAIN'=>$ev,'VALUE'=>$use_ev_enhanced);
+					$_field=do_template('CATALOGUE_'.$tpl_set.'_FIELDMAP_ENTRY_FIELD',$f,NULL,false,'CATALOGUE_DEFAULT_FIELDMAP_ENTRY_FIELD');
+					$map['FIELDS']->attach($_field);
+					$_field=do_template('CATALOGUE_'.$tpl_set.'_GRID_ENTRY_FIELD',$f,NULL,false,'CATALOGUE_DEFAULT_GRID_ENTRY_FIELD');
+					$map['FIELDS_GRID']->attach($_field);
+					$_field=do_template('CATALOGUE_'.$tpl_set.'_TABULAR_ENTRY_FIELD',$f,NULL,false,'CATALOGUE_DEFAULT_TABULAR_ENTRY_FIELD');
+					$map['FIELDS_TABULAR']->attach($_field);
 				}
 			} else $all_visible=false;
 
@@ -629,6 +640,7 @@ function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NUL
 		$map['EDIT_URL']=build_url(array('page'=>'cms_catalogues','type'=>'_edit_entry','catalogue_name'=>$catalogue_name,'id'=>$id),get_module_zone('cms_catalogues'));
 	} else $map['EDIT_URL']='';
 
+	// Various bits of meta data
 	$map['SUBMITTER']=strval($entry['ce_submitter']);
 	$map['VIEWS']=strval($entry['ce_views']);
 	$map['ADD_DATE_RAW']=strval($entry['ce_add_date']);
@@ -636,10 +648,11 @@ function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NUL
 	$map['ADD_DATE']=get_timezoned_date($entry['ce_add_date']);
 	$map['EDIT_DATE']=get_timezoned_date($entry['ce_edit_date']);
 	$map['ID']=strval($id);
+	$map['CATALOGUE']=$catalogue_name;
+	$map['CAT']=strval($entry['cc_id']);
 	if ((get_option('is_on_comments')=='1') && (!has_no_forum()) && ($entry['allow_comments']>=1)) $map['COMMENT_COUNT']='1';
 
 	// Feedback
-	//Set basic rating display of item to the map array
 	require_code('feedback');
 	$c_value=array_key_exists('FIELD_0_PLAIN_PURE',$map)?$map['FIELD_0_PLAIN_PURE']:$map['FIELD_0_PLAIN'];
 	if (is_object($c_value)) $c_value=$c_value->evaluate();
@@ -664,13 +677,16 @@ function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NUL
 		);
 	}
 
+	// Link to view entry
 	if ((get_option('is_on_comments')=='1') && ($entry['allow_comments']>=1) || (get_option('is_on_rating')=='1') && ($entry['allow_rating']==1) || (get_option('is_on_trackbacks')=='1') && ($entry['allow_trackbacks']==1) || (!$all_visible))
 	{
-		$map['VIEW_URL']=($tpl_set=='WML')?make_string_tempcode('wap.php?page=catalogues&type=entry&id='.strval($id)):build_url(array('page'=>'catalogues','type'=>'entry','id'=>$id,'root'=>($root==-1)?NULL:$root),get_module_zone('catalogues'));
+		$map['VIEW_URL']=build_url(array('page'=>'catalogues','type'=>'entry','id'=>$id,'root'=>($root==-1)?NULL:$root),get_module_zone('catalogues'));
 	} else
 	{
 		$map['VIEW_URL']='';
 	}
+
+	// Breadcrumbs
 	if ($tree_details)
 	{
 		$map['TREE']='';
@@ -680,8 +696,6 @@ function get_catalogue_entry_map($entry,$catalogue,$view_type,$tpl_set,$root=NUL
 			$map['TREE']=$tree;
 		}
 	}
-	$map['CATALOGUE']=$catalogue_name;
-	$map['CAT']=strval($entry['cc_id']);
 
 	return $map;
 }
@@ -1254,10 +1268,10 @@ function render_catalogue_entry_screen($id,$no_title=false)
 
 	$ecommerce=is_ecommerce_catalogue($catalogue_name);
 
-	if($ecommerce)
-		$tpl_set	=	'products';
+	if ($ecommerce)
+		$tpl_set='products';
 	else
-		$tpl_set	=	$catalogue_name;
+		$tpl_set=$catalogue_name;
 
 	$root=get_param_integer('root',NULL);
 	$map=get_catalogue_entry_map($entry,$catalogue,'PAGE',$tpl_set,$root,NULL,NULL,true,true);
@@ -1277,7 +1291,7 @@ function render_catalogue_entry_screen($id,$no_title=false)
 		$map['WARNINGS']=do_template('WARNING_TABLE',array('_GUID'=>'bf604859a572ca53e969bec3d91f9cfb','WARNING'=>do_lang_tempcode((get_param_integer('redirected',0)==1)?'UNVALIDATED_TEXT_NON_DIRECT':'UNVALIDATED_TEXT')));
 	} else $map['WARNINGS']='';
 	
-	//Finding any hook exists for this product--------------------
+	// Finding any hook exists for this product
 	if (addon_installed('ecommerce'))
 	{
 		$object=find_product(strval($id));
@@ -1286,10 +1300,10 @@ function render_catalogue_entry_screen($id,$no_title=false)
 			$object->get_custom_product_map_fields($id,$map);
 		}
 	}
-	//------------------------------------------------------------
 
+	// Main rendering...
 	
-	$map['ENTRY']=do_template('CATALOGUE_'.$tpl_set.'_ENTRY',$map,NULL,false,'CATALOGUE_DEFAULT_ENTRY');
+	$map['ENTRY']=do_template('CATALOGUE_'.$tpl_set.'_FIELDMAP_ENTRY_WRAP',$map+array('ENTRY_SCREEN'=>true),NULL,false,'CATALOGUE_DEFAULT_FIELDMAP_ENTRY_WRAP');
 	$map['ADD_DATE']=get_timezoned_date($entry['ce_add_date']);
 	$map['ADD_DATE_RAW']=strval($entry['ce_add_date']);
 	$map['EDIT_DATE']=is_null($entry['ce_edit_date'])?'':get_timezoned_date($entry['ce_edit_date']);
diff --git a/sources/catalogues2.php b/sources/catalogues2.php
index 69c9153..2f844f3 100644
--- a/sources/catalogues2.php
+++ b/sources/catalogues2.php
@@ -171,7 +171,7 @@ function actual_add_catalogue($name,$title,$description,$display_type,$is_tree,$
 	if ($is_tree==1)
 	{
 		// Create root node
-		$root_title=($display_type==1)?do_lang('_HOME',get_translated_text($title)):get_translated_text($title);
+		$root_title=($is_tree==1)?do_lang('_HOME',get_translated_text($title)):get_translated_text($title);
 		$category=$GLOBALS['SITE_DB']->query_insert('catalogue_categories',array('cc_move_days_lower'=>30,'cc_move_days_higher'=>60,'cc_move_target'=>NULL,'rep_image'=>'','c_name'=>$name,'cc_title'=>insert_lang($root_title,1),'cc_description'=>insert_lang_comcode('',3),'cc_notes'=>'','cc_add_date'=>time(),'cc_parent_id'=>NULL),true);
 	} else $category=NULL;
 
@@ -684,12 +684,6 @@ function actual_delete_catalogue_category($id,$deleting_all=false)
 	delete_lang($myrow['cc_title']);
 	delete_lang($myrow['cc_description']);
 
-	/*$entries=collapse_1d_complexity('id',$GLOBALS['SITE_DB']->query_select('catalogue_entries',array('id'),array('cc_id'=>$id)));
-	foreach ($entries as $entry)
-	{
-		actual_delete_catalogue_entry($entry);
-	}*/
-
 	$old_parent_id=$GLOBALS['SITE_DB']->query_value('catalogue_categories','cc_parent_id',array('id'=>$id));
 
 	$GLOBALS['SITE_DB']->query_delete('catalogue_categories',array('id'=>$id),'',1);
diff --git a/sources/hooks/modules/search/catalogue_entries.php b/sources/hooks/modules/search/catalogue_entries.php
index 6f3e24b..a86d67f 100644
--- a/sources/hooks/modules/search/catalogue_entries.php
+++ b/sources/hooks/modules/search/catalogue_entries.php
@@ -419,7 +419,8 @@ class Hook_search_catalogue_entries
 
 		$catalogue_name=$row['c_name'];
 		if (!array_key_exists($catalogue_name,$SEARCH_CATALOGUE_ENTRIES_CATALOGUES)) return new ocp_tempcode();
-		if (($SEARCH_CATALOGUE_ENTRIES_CATALOGUES[$catalogue_name]['c_display_type']==0) || (get_param_integer('specific',0)==0))
+		$display_type=$SEARCH_CATALOGUE_ENTRIES_CATALOGUES[$catalogue_name]['c_display_type'];
+		if (($display_type==C_DT_FIELDMAPS) || ($display_type==C_DT_GRID) || (get_param_integer('specific',0)==0)) // Singular results
 		{
 			$tpl_set=$catalogue_name;
 			$display=get_catalogue_entry_map($row,$SEARCH_CATALOGUE_ENTRIES_CATALOGUES[$catalogue_name],'SEARCH',$tpl_set,-1);
diff --git a/sources/hooks/systems/fields/multilist.php b/sources/hooks/systems/fields/multilist.php
index 7e38dc6..e723a1d 100644
--- a/sources/hooks/systems/fields/multilist.php
+++ b/sources/hooks/systems/fields/multilist.php
@@ -98,7 +98,7 @@ class Hook_fields_multilist
 			if (in_array($option,$exploded)) $all[]=array('OPTION'=>$option,'HAS'=>true);
 		}
 		if (!array_key_exists('c_name',$field)) $field['c_name']='other';
-		return do_template('CATALOGUE_'.$field['c_name'].'_MULTILIST',array('ALL'=>$all),NULL,false,'CATALOGUE_DEFAULT_MULTILIST');
+		return do_template('CATALOGUE_'.$field['c_name'].'_FIELD_MULTILIST',array('ALL'=>$all),NULL,false,'CATALOGUE_DEFAULT_MULTILIST');
 	}
 
 	// ======================
diff --git a/sources/hooks/systems/fields/picture.php b/sources/hooks/systems/fields/picture.php
index c27eb6f..f4a568a 100644
--- a/sources/hooks/systems/fields/picture.php
+++ b/sources/hooks/systems/fields/picture.php
@@ -80,7 +80,7 @@ class Hook_fields_picture
 		if (is_object($ev)) return $ev;
 
 		if ($ev=='') return '';
-		
+
 		$img_url=$ev;
 		if (url_is_local($img_url)) $img_url=get_custom_base_url().'/'.$img_url;
 		if ((get_option('is_on_gd')=='0') || (!function_exists('imagetypes')))
@@ -105,7 +105,7 @@ class Hook_fields_picture
 			'image'=>$img_url,
 		);
 
-		return do_template('CATALOGUE_'.$tpl_set.'_ENTRY_FIELD_PICTURE',array('I'=>is_null($only_fields)?'-1':strval($i),'CATALOGUE'=>$field['c_name'],'URL'=>$img_url,'THUMB_URL'=>$img_thumb_url),NULL,false,'CATALOGUE_DEFAULT_ENTRY_FIELD_PICTURE');
+		return do_template('CATALOGUE_'.$tpl_set.'_FIELD_PICTURE',array('I'=>is_null($only_fields)?'-1':strval($i),'CATALOGUE'=>$field['c_name'],'URL'=>$img_url,'THUMB_URL'=>$img_thumb_url),NULL,false,'CATALOGUE_DEFAULT_FIELD_PICTURE');
 	}
 
 	// ======================
diff --git a/sources/hooks/systems/symbols/CATALOGUE_ENTRY_ALL_FIELD_VALUES.php b/sources/hooks/systems/symbols/CATALOGUE_ENTRY_ALL_FIELD_VALUES.php
index 7924954..9cd9404 100644
--- a/sources/hooks/systems/symbols/CATALOGUE_ENTRY_ALL_FIELD_VALUES.php
+++ b/sources/hooks/systems/symbols/CATALOGUE_ENTRY_ALL_FIELD_VALUES.php
@@ -38,7 +38,7 @@ class Hook_symbol_CATALOGUE_ENTRY_ALL_FIELD_VALUES
 				require_code('catalogues');
 				$catalogue_name=$rows[0]['c_name'];
 				$tpl_set=$catalogue_name;
-				$display=get_catalogue_entry_map($rows[0],array('c_name'=>$catalogue_name,'c_display_type'=>C_DT_MAPS),'PAGE',$tpl_set,-1);
+				$display=get_catalogue_entry_map($rows[0],array('c_name'=>$catalogue_name,'c_display_type'=>C_DT_FIELDMAPS),'PAGE',$tpl_set,-1);
 				if ((array_key_exists(1,$param)) && ($param[1]=='1'))
 				{
 					$value=$display['FIELDS']->evaluate();
diff --git a/sources/images.php b/sources/images.php
index 46accd3..1b34d18 100644
--- a/sources/images.php
+++ b/sources/images.php
@@ -268,18 +268,21 @@ function get_max_image_size()
  * @param  mixed			The caption for the thumbnail (string or Tempcode)
  * @param  boolean		Whether to use a JS tooltip. Forcibly set to true if you pass Tempcode
  * @param  boolean		Whether already a thumbnail (if not, function will make one)
- * @param  integer		Thumbnail width to use
- * @param  integer		Thumbnail height to use
+ * @param  ?integer		Thumbnail width to use (NULL: default)
+ * @param  ?integer		Thumbnail height to use (NULL: default)
  * @return tempcode		The thumbnail
  */
-function do_image_thumb($url,$caption,$js_tooltip=false,$is_thumbnail_already=true,$width=90,$height=90)
+function do_image_thumb($url,$caption,$js_tooltip=false,$is_thumbnail_already=true,$width=NULL,$height=NULL)
 {
 	if (is_object($caption))
 	{
 		$js_tooltip=true;
 	}
 
-	if(!$is_thumbnail_already)
+	if (is_null($width)) $width=intval(get_option('thumb_width'));
+	if (is_null($height)) $height=intval(get_option('thumb_width'));
+
+	if (!$is_thumbnail_already)
 	{	
 		$new_name=strval($width).'_'.strval($height).'_'.url_to_filename($url);
 		
diff --git a/themes/default/css/catalogues.css b/themes/default/css/catalogues.css
index 65ded2c..ae13c83 100644
--- a/themes/default/css/catalogues.css
+++ b/themes/default/css/catalogues.css
@@ -3,13 +3,9 @@
  Copyright (c) ocProducts, 2004-2012
 */
 
-/* These styles are all related to eCommerce catalogues */
+/* Grid display */
 
-.addtocart {
-	width: 100%;
-}
-
-.products-grid {
+.display_type_GRID {
 	margin: 0 0 15px;
 	padding: 0 0 0 5px;
 	position: relative;
@@ -17,29 +13,16 @@
 	border: 1px;
 }
 
-li.catalogue_product_box {
+.display_type_GRID .medborder {
 	float: left;
-	width: 25%;
-	list-style-type: none;
-}
-
-.catalogue_product_box_inner {
 	margin-right: 5px;
 	margin-bottom: 5px;
-	overflow: hidden;
 }
 
-.ratings .rating-box {
-	float: left;
-	margin-right: 5px;
+.display_type_GRID .entry_box_thumbnail {
 }
 
-.price-box {
-	font-weight: bold;
-	color: #0d1522; /* {$,wizard, 20% seed + 80% !W/B} */
-	margin: 10px 0;
-	font-size: 1.2em;
-}
+/* eCommerce cart button (logo) template */
 
 .cart_info {
 	text-align: right;
@@ -47,47 +30,55 @@ li.catalogue_product_box {
 	overflow: visible;
 }
 
-.cartlink {
+.cart_logo {
 	display: inline;
 	float: right;
+	margin-right: 18px;
 }
 
-.cart-logo {
-	display: inline;
-	float: right;
-	margin-right:18px;
+/* eCommerce add to cart template */
+
+.add_to_cart {
+	width: 100%;
 }
 
-.actions {
-	width:100%;
+.purchase_buy {
+	float: left;
+	margin-right: 5px;
 }
 
-.product-view {
+.tax_opted_out {
+	font-size: 0.85em;
 }
 
-.product-img-box {
-	float: right;
-	margin: 30px 0 30px 30px;
+/* eCommerce product entry screen AND eCommerce product entries */
+
+.price_box {
+	font-weight: bold;
+	margin: 10px 0;
+	font-size: 1.2em;
 }
 
-.data-table {
+/* eCommerce product entries */
+
+/* eCommerce product entry screen */
+
+.data_table {
 	margin-bottom: 10px;
 	font-size: 0.85em;
 }
 
-.data-table th, .data-table td {
-	padding:5px 12px;
-	text-align:left;
+.data_table th, .data_table td {
+	padding: 5px 12px;
+	text-align: left;
 }
 
-.purchase_buy {
-	float:left;
-	margin-right:5px;
+.ratings .rating_box {
+	float: left;
+	margin-right: 5px;
 }
 
-.product-image-box	{
-	padding:5px 5px 5px 5px;	
-}
-.tax_opted_out {
-	font-size:0.85em;
+.product_view .entry_box_thumbnail {
+	float: right;
+	margin: 30px 0 30px 30px;
 }
diff --git a/themes/default/css/global.css b/themes/default/css/global.css
index 37ad8dd..fbd550a 100644
--- a/themes/default/css/global.css
+++ b/themes/default/css/global.css
@@ -2455,6 +2455,9 @@ th.meta_data_title {
 	padding: 3px;
 	min-width: 40px;
 	min-height: 40px;
+	font-size: 0.8em;
+	min-height: 65px;
+	min-width: 85px;
 }
 
 #page_running_admin_themes .radio_list_picture {
@@ -3091,7 +3094,7 @@ ul.sitemap li li {
 	cursor: pointer;
 }
 
-.addtocart {
+.add_to_cart {
 	width: 100px;
 	height:34px;
 	padding-top: 10px;
diff --git a/themes/default/templates/CART_LOGO.tpl b/themes/default/templates/CART_LOGO.tpl
index a4bd6ca..676d109 100755
--- a/themes/default/templates/CART_LOGO.tpl
+++ b/themes/default/templates/CART_LOGO.tpl
@@ -1,5 +1,5 @@
 <div class="cart_info">
-	<span class="cart-logo">
+	<span class="cart_logo">
 		<a href="{URL*}"><img class="button_page" src="{$IMG*,page/cart_view}" title="{TITLE*}" alt="{TITLE*}"/></a>
 	</span>
 </div>
\ No newline at end of file
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_CATEGORY_SCREEN.tpl b/themes/default/templates/CATALOGUE_DEFAULT_CATEGORY_SCREEN.tpl
index 849d5a8..5de2d60 100644
--- a/themes/default/templates/CATALOGUE_DEFAULT_CATEGORY_SCREEN.tpl
+++ b/themes/default/templates/CATALOGUE_DEFAULT_CATEGORY_SCREEN.tpl
@@ -15,7 +15,9 @@
 {SUBCATEGORIES}
 
 {+START,IF_NON_EMPTY,{ENTRIES}}
-	{ENTRIES}
+	<div class="float_surrounder display_type_{DISPLAY_TYPE*}">
+		{ENTRIES}
+	</div>
 {+END}
 
 {+START,IF_EMPTY,{ENTRIES}{SUBCATEGORIES}}
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY.tpl b/themes/default/templates/CATALOGUE_DEFAULT_ENTRY.tpl
deleted file mode 100644
index 8303f4a..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY.tpl
+++ /dev/null
@@ -1,14 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-<div class="wide_table_wrap"><table summary="{!MAP_TABLE}" class="wide_table solidborder spaced_table">
-	{+START,IF,{$NOT,{$MOBILE}}}
-		<colgroup>
-			<col style="width: 150px" />
-			<col style="width: 100%" />
-		</colgroup>
-	{+END}
-
-	<tbody>
-		{FIELDS}
-	</tbody>
-</table></div>
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_EMBED.tpl b/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_EMBED.tpl
deleted file mode 100644
index ca66e01..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_EMBED.tpl
+++ /dev/null
@@ -1,27 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-<div class="wide_table_wrap"><table summary="{!MAP_TABLE}" class="wide_table solidborder spaced_table">
-	{+START,IF,{$NOT,{$MOBILE}}}
-		<colgroup>
-			<col style="width: 150px" />
-			<col style="width: 100%" />
-		</colgroup>
-	{+END}
-
-	<tbody>
-		{FIELDS}
-	</tbody>
-</table></div>
-
-<div class="float_surrounder">
-	<p class="left">
-		<a target="_self" href="#"><img class="inline_image" title="{!BACK_TO_TOP}" alt="{!BACK_TO_TOP}" src="{$IMG*,top}" /></a>
-	</p>
-	{+START,IF_NON_EMPTY,{VIEW_URL}}
-		<p class="right">
-			<a href="{VIEW_URL*}" title="{!VIEW}: {$STRIP_TAGS*,{FIELD_0}}"><img title="{!VIEW}{+START,IF_PASSED,COMMENT_COUNT} ({$STRIP_TAGS,{$COMMENT_COUNT,catalogues,{ID}}}){+END}" alt="{!COMMENTS} / {!VIEW}" class="button_pageitem" src="{$IMG*,pageitem/goto}" /></a>
-		</p>
-	{+END}
-</div>
-
-<br />
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_FIELD.tpl b/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_FIELD.tpl
deleted file mode 100644
index 672a7ce..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_FIELD.tpl
+++ /dev/null
@@ -1,8 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-{+START,IF_NON_EMPTY,{VALUE}}
-	<tr>
-		<th>{FIELD*}</th>
-		<td>{VALUE}</td>
-	</tr>
-{+END}
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_FIELD_PICTURE.tpl b/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_FIELD_PICTURE.tpl
deleted file mode 100644
index 854516f..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_ENTRY_FIELD_PICTURE.tpl
+++ /dev/null
@@ -1 +0,0 @@
-{+START,IF,{$NEQ,{I},0}}<a rel="lightbox" href="{URL*}">{+END}<img src="{THUMB_URL*}" title="" alt="{!IMAGE}" />{+START,IF,{$NEQ,{I},0}}</a>{+END}
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_GRID_ENTRY_WRAP.tpl b/themes/default/templates/CATALOGUE_DEFAULT_GRID_ENTRY_WRAP.tpl
index a442336..a896919 100644
--- a/themes/default/templates/CATALOGUE_DEFAULT_GRID_ENTRY_WRAP.tpl
+++ b/themes/default/templates/CATALOGUE_DEFAULT_GRID_ENTRY_WRAP.tpl
@@ -1,15 +1,23 @@
-<div class="entry_box">
-	<div class="entry_box_inner">
-		{+START,BOX,<span class="name">{FIELD_0}</span>,,med}
-			{+START,IF_NON_EMPTY,{FIELD_1_THUMB}}
-				<div class="entry_box_thumbnail">
-					<a href="{VIEW_URL*}">{FIELD_1_THUMB}</a>
-				</div>
-			{+END}
+{+START,BOX,<span class="name">{FIELD_0}</span>,{$ADD,{$CONFIG_OPTION,thumb_width},24}px,med}
+	{+START,SET,TOOLTIP}
+		<table summary="{!MAP_TABLE}" class="solidborder">
+			<tbody>
+				{FIELDS_GRID}
+			</tbody>
+		</table>
+	{+END}
 
-			<div class="ratings">
-				{RATING}
-			</div>
-		{+END}
+	{+START,IF_NON_EMPTY,{FIELD_1_THUMB}}
+		<div class="entry_box_thumbnail">
+			<a onmouseout="if (typeof window.deactivateTooltip!='undefined') deactivateTooltip(this,event);" onmousemove="if (typeof window.activateTooltip!='undefined') repositionTooltip(this,event);" onmouseover="if (typeof window.activateTooltip!='undefined') activateTooltip(this,event,'{$GET^;*,TOOLTIP}','500px');" href="{VIEW_URL*}">{FIELD_1_THUMB}</a>
+		</div>
+	{+END}
+
+	{+START,IF_EMPTY,{FIELD_1_THUMB}}
+		<a title="{$STRIP_TAGS,{FIELD_0}}" href="{VIEW_URL*}">{!VIEW}</a>
+	{+END}
+
+	<div class="ratings">
+		{RATING}
 	</div>
-</div>
+{+END}
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_LINE.tpl b/themes/default/templates/CATALOGUE_DEFAULT_LINE.tpl
deleted file mode 100644
index 344077f..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_LINE.tpl
+++ /dev/null
@@ -1,6 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-<li>
-	{+START,IF_NON_EMPTY,{VIEW_URL}}<a href="{VIEW_URL*}">{+END}{+START,FRACTIONAL_EDITABLE,{FIELD_0_PLAIN},field_0,_SEARCH:cms_catalogues:type=__edit_entry:id={ID},1}{FIELD_0}{+END}{+START,IF_NON_EMPTY,{VIEW_URL}}</a>{+END}
-</li>
-
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_LINE_WRAP.tpl b/themes/default/templates/CATALOGUE_DEFAULT_LINE_WRAP.tpl
deleted file mode 100644
index 2f19a04..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_LINE_WRAP.tpl
+++ /dev/null
@@ -1,7 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-{!ENTRIES}:
-<ul>
-	{CONTENT}
-</ul>
-
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_MULTILIST.tpl b/themes/default/templates/CATALOGUE_DEFAULT_MULTILIST.tpl
deleted file mode 100644
index 079ad9d..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_MULTILIST.tpl
+++ /dev/null
@@ -1,14 +0,0 @@
-<div>
-	{+START,LOOP,ALL}
-		<p>
-			{+START,IF,{HAS}}
-				<!--<img alt="{!YES}" class="inline_image_2" src="{$IMG*,checklist/checklist1}" />--> &#10003;
-			{+END}
-			{+START,IF,{$NOT,{HAS}}}
-				<!--<img alt="{!NO}" class="inline_image_2" src="{$IMG*,checklist/checklist0}" />--> &#10007;
-			{+END}
-
-			{OPTION*}
-		</p>
-	{+END}
-</div>
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_TABULAR_ENTRY_WRAP.tpl b/themes/default/templates/CATALOGUE_DEFAULT_TABULAR_ENTRY_WRAP.tpl
index 681de98..e1bb49b 100644
--- a/themes/default/templates/CATALOGUE_DEFAULT_TABULAR_ENTRY_WRAP.tpl
+++ b/themes/default/templates/CATALOGUE_DEFAULT_TABULAR_ENTRY_WRAP.tpl
@@ -3,7 +3,7 @@
 {$SET,EDIT_URL,{EDIT_URL}}
 
 <tr>
-	{FIELDS_TABLE}
+	{FIELDS_TABULAR}
 	{+START,IF_NON_EMPTY,{VIEW_URL}}
 		<td class="dottedborder_barrier_b_nonrequired">
 			<!--VIEWLINK-->
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_TAB_ENTRY.tpl b/themes/default/templates/CATALOGUE_DEFAULT_TAB_ENTRY.tpl
deleted file mode 100644
index 681de98..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_TAB_ENTRY.tpl
+++ /dev/null
@@ -1,24 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-{$SET,EDIT_URL,{EDIT_URL}}
-
-<tr>
-	{FIELDS_TABLE}
-	{+START,IF_NON_EMPTY,{VIEW_URL}}
-		<td class="dottedborder_barrier_b_nonrequired">
-			<!--VIEWLINK-->
-			<a href="{VIEW_URL*}"><img title="{!COMMENTS} / {!VIEW}" alt="{!COMMENTS} / {!VIEW}" class="button_pageitem" src="{$IMG*,pageitem/more}" /></a>
-		</td>
-	{+END}
-	{$, Uncomment to show ratings
-	<td class="dottedborder_barrier_b_nonrequired">
-		{+START,IF_NON_EMPTY,{$TRIM,{RATING}}}
-			{RATING}
-		{+END}
-		{+START,IF_EMPTY,{$TRIM,{RATING}}}
-			{!UNRATED}
-		{+END}
-	</td>
-	}
-</tr>
-
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_TAB_FIELD.tpl b/themes/default/templates/CATALOGUE_DEFAULT_TAB_FIELD.tpl
deleted file mode 100644
index cbd5a18..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_TAB_FIELD.tpl
+++ /dev/null
@@ -1,14 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-<td class="dottedborder_barrier_b_nonrequired">
-	{VALUE}
-
-	{+START,IF,{$NEQ,{FIELDID},0}}
-		{+START,IF_NON_EMPTY,{$GET,EDIT_URL}}
-			<p class="associated_caption">
-				( <a href="{$GET*,EDIT_URL}">{!EDIT}</a> )
-			</p>
-		{+END}
-	{+END}
-</td>
-
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_TAB_FIELD_HEAD.tpl b/themes/default/templates/CATALOGUE_DEFAULT_TAB_FIELD_HEAD.tpl
deleted file mode 100644
index 4bbe45d..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_TAB_FIELD_HEAD.tpl
+++ /dev/null
@@ -1,12 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-<th>
-	{+START,IF,{$NEQ,{$PAGE},search}}
-	{+START,IF_NON_EMPTY,{SORT_URL_ASC}}<a href="{SORT_URL_ASC*}"><img src="{$IMG*,results/{$?,{SORT_ASC_SELECTED},sortablefield_asc,sortablefield_asc_nonselected}}" alt="{!SORT_BY}, {!SMALLEST_FIRST}" title="" /></a>{+END}
-	{+END}
-	{FIELD*}
-	{+START,IF,{$NEQ,{$PAGE},search}}
-	{+START,IF_NON_EMPTY,{SORT_URL_DESC}}<a target="_self" href="{SORT_URL_DESC*}"><img src="{$IMG*,results/{$?,{SORT_DESC_SELECTED},sortablefield_desc,sortablefield_desc_nonselected}}" alt="{!SORT_BY}, {!LARGEST_FIRST}" title="" /></a>{+END}
-	{+END}
-</th>
-
diff --git a/themes/default/templates/CATALOGUE_DEFAULT_TAB_WRAP.tpl b/themes/default/templates/CATALOGUE_DEFAULT_TAB_WRAP.tpl
deleted file mode 100644
index c608013..0000000
--- a/themes/default/templates/CATALOGUE_DEFAULT_TAB_WRAP.tpl
+++ /dev/null
@@ -1,41 +0,0 @@
-{$,Read the catalogue tutorial for information on custom catalogue layouts}
-
-<div class="wide_table_wrap"{$?,{$VALUE_OPTION,html5}, itemscope="itemscope" itemtype="http://schema.org/Table"}>
-	{+START,IF,{$VALUE_OPTION,html5}}
-		<meta itemprop="mainContentOfPage" content="true" />
-	{+END}
-	<table summary="{!COLUMNED_TABLE}" class="dottedborder wide_table catalogue_table">
-		{+START,IF,{$NOT,{$MOBILE}}}
-			<colgroup>
-				{$SET,INC,0}
-				{+START,WHILE,{$NEQ,{$GET,INC},{FIELD_COUNT}}}
-					<col />
-					{$INC,INC}
-				{+END}
-				{+START,IF,{$IN_STR,{CONTENT},<!--VIEWLINK-->}}
-					<col style="width: 80px" />
-				{+END}
-				{$, Uncomment to show ratings
-					<col style="width: 85px" />
-				}
-			</colgroup>
-		{+END}
-
-		<thead>
-			<tr>
-				{HEAD}
-				{+START,IF,{$IN_STR,{CONTENT},<!--VIEWLINK-->}}
-					<th></th>
-				{+END}
-				{$, Uncomment to show ratings
-					<th>{!RATING}</th>
-				}
-			</tr>
-		</thead>
-
-		<tbody>
-			{CONTENT}
-		</tbody>
-	</table>
-</div>
-
diff --git a/themes/default/templates/CATALOGUE_ENTRY_ADD_TO_CART.tpl b/themes/default/templates/CATALOGUE_ENTRY_ADD_TO_CART.tpl
index 0c380b2..6409554 100644
--- a/themes/default/templates/CATALOGUE_ENTRY_ADD_TO_CART.tpl
+++ b/themes/default/templates/CATALOGUE_ENTRY_ADD_TO_CART.tpl
@@ -1,5 +1,5 @@
 <div class="float_surrounder">
-	<div class="addtocart">
+	<div class="add_to_cart">
 		{+START,IF_NON_EMPTY,{ACTION_URL}}
 			<div class="purchase_buy">
 				<form title="{!ADD_TO_CART}" method="post" action="{ACTION_URL*}">	
diff --git a/themes/default/templates/CATALOGUE_links_CATEGORY_SCREEN.tpl b/themes/default/templates/CATALOGUE_links_CATEGORY_SCREEN.tpl
deleted file mode 100644
index d90defe..0000000
--- a/themes/default/templates/CATALOGUE_links_CATEGORY_SCREEN.tpl
+++ /dev/null
@@ -1,48 +0,0 @@
-{TITLE}
-
-{+START,IF_NON_EMPTY,{DESCRIPTION}}
-	<p{$?,{$VALUE_OPTION,html5}, itemprop="description"}>
-		{DESCRIPTION}
-	</p>
-{+END}
-
-{$SET,bound_catalogue_entry,{$CATALOGUE_ENTRY_FOR,catalogue_category,{ID}}}
-{+START,IF_NON_EMPTY,{$GET,bound_catalogue_entry}}{$CATALOGUE_ENTRY_ALL_FIELD_VALUES,{$GET,bound_catalogue_entry}}{+END}
-
-{SUBCATEGORIES}
-
-{+START,IF_NON_EMPTY,{ENTRIES}}
-	{ENTRIES}
-	<br />
-{+END}
-
-{+START,IF_EMPTY,{ENTRIES}{SUBCATEGORIES}}
-	<p class="nothing_here">
-		{!NO_ENTRIES}
-	</p>
-{+END}
-
-
-{$,Load up the staff actions template to display staff actions uniformly (we relay our parameters to it)...}
-{+START,INCLUDE,STAFF_ACTIONS}
-	1_URL={ADD_LINK*}
-	1_TITLE={!CATALOGUE_GENERIC_ADD,{_TITLE}}
-	1_REL=add
-	2_URL={ADD_CAT_URL*}
-	2_TITLE={!CATALOGUE_GENERIC_ADD_CATEGORY,{_TITLE}}
-	2_REL=add
-	3_ACCESSKEY=q
-	3_URL={EDIT_CAT_URL*}
-	3_TITLE={!CATALOGUE_GENERIC_EDIT_CATEGORY,{_TITLE}}
-	3_REL=edit
-	4_URL={EDIT_CATALOGUE_URL*}
-	4_TITLE={!EDIT_CATALOGUE}
-{+END}
-
-{+START,IF_NON_EMPTY,{BROWSER}}
-	<div class="float_surrounder">
-		{BROWSER}
-	</div>
-{+END}
-
-
diff --git a/themes/default/templates/CATALOGUE_links_TABULAR_ENTRY_WRAP.tpl b/themes/default/templates/CATALOGUE_links_TABULAR_ENTRY_WRAP.tpl
index 2878449..184cecf 100644
--- a/themes/default/templates/CATALOGUE_links_TABULAR_ENTRY_WRAP.tpl
+++ b/themes/default/templates/CATALOGUE_links_TABULAR_ENTRY_WRAP.tpl
@@ -2,6 +2,6 @@
 {$SET,EDIT_URL,{EDIT_URL}}
 
 <tr>
-	{FIELDS_TABLE}
+	{FIELDS_TABULAR}
 </tr>
 
diff --git a/themes/default/templates/CATALOGUE_links_TAB_ENTRY.tpl b/themes/default/templates/CATALOGUE_links_TAB_ENTRY.tpl
deleted file mode 100644
index 2878449..0000000
--- a/themes/default/templates/CATALOGUE_links_TAB_ENTRY.tpl
+++ /dev/null
@@ -1,7 +0,0 @@
-{$SET,FIELD_1_PLAIN,{FIELD_1_PLAIN}}
-{$SET,EDIT_URL,{EDIT_URL}}
-
-<tr>
-	{FIELDS_TABLE}
-</tr>
-
diff --git a/themes/default/templates/CATALOGUE_links_TAB_FIELD.tpl b/themes/default/templates/CATALOGUE_links_TAB_FIELD.tpl
deleted file mode 100644
index fb0a6dc..0000000
--- a/themes/default/templates/CATALOGUE_links_TAB_FIELD.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-<td class="dottedborder_barrier_b_nonrequired">
-	{+START,IF,{$EQ,{FIELDID},0}}
-		<a target="_blank" title="{$STRIP_TAGS,{VALUE}} {!LINK_NEW_WINDOW}" href="{$GET*,FIELD_1_PLAIN}">{VALUE}</a>
-	{+END}
-
-	{+START,IF,{$NEQ,{FIELDID},0}}
-		{VALUE}
-	{+END}
-
-	{+START,IF,{$NEQ,{FIELDID},0}}
-		{+START,IF_NON_EMPTY,{$GET,EDIT_URL}}
-			<p class="associated_caption">
-				( <a href="{$GET*,EDIT_URL}">{!EDIT}</a> )
-			</p>
-		{+END}
-	{+END}
-</td>
-
diff --git a/themes/default/templates/CATALOGUE_links_TAB_FIELD_HEAD.tpl b/themes/default/templates/CATALOGUE_links_TAB_FIELD_HEAD.tpl
deleted file mode 100644
index 7c490b0..0000000
--- a/themes/default/templates/CATALOGUE_links_TAB_FIELD_HEAD.tpl
+++ /dev/null
@@ -1,10 +0,0 @@
-<th>
-	{+START,IF,{$NEQ,{$PAGE},search}}
-	{+START,IF_NON_EMPTY,{SORT_URL_ASC}}<a href="{SORT_URL_ASC*}"><img src="{$IMG*,results/{$?,{SORT_ASC_SELECTED},sortablefield_asc,sortablefield_asc_nonselected}}" alt="{!SORT_BY}, {!SMALLEST_FIRST}" title="" /></a>{+END}
-	{+END}
-	{FIELD*}
-	{+START,IF,{$NEQ,{$PAGE},search}}
-	{+START,IF_NON_EMPTY,{SORT_URL_DESC}}<a target="_self" href="{SORT_URL_DESC*}"><img src="{$IMG*,results/{$?,{SORT_DESC_SELECTED},sortablefield_desc,sortablefield_desc_nonselected}}" alt="{!SORT_BY}, {!LARGEST_FIRST}" title="" /></a>{+END}
-	{+END}
-</th>
-
diff --git a/themes/default/templates/CATALOGUE_links_TAB_WRAP.tpl b/themes/default/templates/CATALOGUE_links_TAB_WRAP.tpl
deleted file mode 100644
index 4015d7e..0000000
--- a/themes/default/templates/CATALOGUE_links_TAB_WRAP.tpl
+++ /dev/null
@@ -1,21 +0,0 @@
-<div class="wide_table_wrap"{$?,{$VALUE_OPTION,html5}, itemscope="itemscope" itemtype="http://schema.org/Table"}>
-	{+START,IF,{$VALUE_OPTION,html5}}
-		<meta itemprop="mainContentOfPage" content="true" />
-	{+END}
-	<table summary="{!COLUMNED_TABLE}" class="dottedborder wide_table">
-		{+START,IF,{$NOT,{$MOBILE}}}
-			<colgroup>
-				{$SET,INC,0}
-				{+START,WHILE,{$NEQ,{$GET,INC},{FIELD_COUNT}}}
-					<col />
-					{$INC,INC}
-				{+END}
-			</colgroup>
-		{+END}
-
-		<tbody>
-			{CONTENT}
-		</tbody>
-	</table>
-</div>
-
diff --git a/themes/default/templates/CATALOGUE_products_CATEGORY_SCREEN.tpl b/themes/default/templates/CATALOGUE_products_CATEGORY_SCREEN.tpl
index 5434331..79d0bde 100644
--- a/themes/default/templates/CATALOGUE_products_CATEGORY_SCREEN.tpl
+++ b/themes/default/templates/CATALOGUE_products_CATEGORY_SCREEN.tpl
@@ -1,9 +1,12 @@
 {TITLE}
 
 {+START,IF_NON_EMPTY,{DESCRIPTION}}
-	<p{$?,{$VALUE_OPTION,html5}, itemprop="description"}>
-		{DESCRIPTION}	
-	</p>
+	{+START,BOX,,,curved}
+		<div{$?,{$VALUE_OPTION,html5}, itemprop="description"}>
+			{DESCRIPTION}
+		</div>
+	{+END}
+	<br />
 {+END}
 
 {+START,IF_NON_EMPTY,{SUBCATEGORIES}}
@@ -11,19 +14,16 @@
 {+END}
 
 {$SET,bound_catalogue_entry,{$CATALOGUE_ENTRY_FOR,catalogue_category,{ID}}}
-{+START,IF_NON_EMPTY,{$GET,bound_catalogue_entry}}{$CATALOGUE_ENTRY_ALL_FIELD_VALUES,{$GET,bound_catalogue_entry}}{+END}
+{+START,IF_NON_EMPTY,{$GET,bound_catalogue_entry}}{$CATALOGUE_ENTRY_ALL_FIELD_VALUES,{$GET,bound_catalogue_entry}}<br />{+END}
 
 {SUBCATEGORIES}
 
 {+START,IF_NON_EMPTY,{ENTRIES}}
 	{CART_LINK}
-{+END}
 
-{+START,IF_NON_EMPTY,{ENTRIES}}
-	<div class="float_surrounder">
+	<div class="float_surrounder display_type_{DISPLAY_TYPE*}">
 		{ENTRIES}
 	</div>
-	<br />
 {+END}
 
 {+START,IF_EMPTY,{ENTRIES}{SUBCATEGORIES}}
@@ -32,16 +32,29 @@
 	</p>
 {+END}
 
+{+START,IF_NON_EMPTY,{SORTING}}
+	<div class="medborder special_category_sorter inline_block">
+		{$SET,show_sort_button,1}
+		{SORTING}
+	</div>
+{+END}
+
+{+START,IF_NON_EMPTY,{BROWSER}}
+	<div class="float_surrounder">
+		{BROWSER}
+	</div>
+{+END}
+
 {+START,IF,{$CONFIG_OPTION,show_content_tagging}}{TAGS}{+END}
 
 {$,Load up the staff actions template to display staff actions uniformly (we relay our parameters to it)...}
 
 {+START,INCLUDE,STAFF_ACTIONS}
 	1_URL={ADD_LINK*}
-	1_TITLE={!CATALOGUE_GENERIC_ADD,{CATALOGUE*}}
+	1_TITLE={!CATALOGUE_GENERIC_ADD,{_TITLE*}}
 	1_REL=add
 	2_URL={ADD_CAT_URL*}
-	2_TITLE={!CATALOGUE_GENERIC_ADD_CATEGORY,{CATALOGUE*}}
+	2_TITLE={!CATALOGUE_GENERIC_ADD_CATEGORY,{_TITLE*}}
 	2_REL=add
 	3_ACCESSKEY=q
 	3_URL={EDIT_CAT_URL*}
@@ -51,10 +64,4 @@
 	4_TITLE={!EDIT_CATALOGUE}
 {+END}
 
-{+START,IF_NON_EMPTY,{BROWSER}}
-	<div class="float_surrounder">
-		{BROWSER}
-	</div>
-{+END}
-
 {+START,IF,{$CONFIG_OPTION,show_screen_actions}}{+START,IF_PASSED,_TITLE}{$BLOCK,failsafe=1,block=main_screen_actions,title={$META_DATA,title}}{+END}{+END}
diff --git a/themes/default/templates/CATALOGUE_products_ENTRY.tpl b/themes/default/templates/CATALOGUE_products_ENTRY.tpl
deleted file mode 100644
index abbfd6e..0000000
--- a/themes/default/templates/CATALOGUE_products_ENTRY.tpl
+++ /dev/null
@@ -1,55 +0,0 @@
-{CART_LINK}
-
-{+START,BOX,,,light}
-	<div class="hproduct"{$?,{$AND,{$MATCH_KEY_MATCH,_WILD:_WILD:misc},{$VALUE_OPTION,html5}}, itemscope="itemscope" itemtype="http://schema.org/Offer"}>
-		<div class="float_surrounder">
-			{+START,IF_NON_EMPTY,{FIELD_7_THUMB}}
-				<p class="product-img-box">
-					<a rel="lightbox" class="link_exempt" href="{+START,IF,{$NOT,{$IN_STR,{FIELD_7_PLAIN},://}}}{$BASE_URL*}/{+END}{FIELD_7_PLAIN*}" target="_blank" alt="{FIELD_0}" title="{!LINK_NEW_WINDOW}"{$?,{$VALUE_OPTION,html5}, itemprop="image"}>{$TRIM,{FIELD_7_THUMB}}</a>
-				</p>
-			{+END}
-
-			<div class="product-view">
-				<div class="product-main-info">
-					{+START,IF_NON_EMPTY,{FIELD_0}}
-						<div class="accessibility_hidden product-name">
-							<h2 class="fn"{$?,{$VALUE_OPTION,html5}, itemprop="itemOffered"}>{FIELD_0}{$,Product name}</h2>
-						</div>
-					{+END}
-					{+START,IF_NON_EMPTY,{FIELD_1}}
-						<p class="product-ids sku">{!PRODUCT_CODE} {FIELD_1}{$,Product code}</p>
-					{+END}
-					{+START,IF_NON_EMPTY,{FIELD_9}}
-						<div class="description"{$?,{$VALUE_OPTION,html5}, itemprop="description"}>
-							{FIELD_9}{$,Product description}
-						</div>
-					{+END}
-					{+START,IF_NON_EMPTY,{FIELD_2}}
-						<div class="price-box">
-							<span class="price">{!PRICE} <span{$?,{$VALUE_OPTION,html5}, itemprop="priceCurrency"}>{$CURRENCY_SYMBOL}</span><span{$?,{$VALUE_OPTION,html5}, itemprop="price"}>{$FLOAT_FORMAT,{FIELD_2}}</span>{$,Product price}</span>
-						</div>
-					{+END}
-				</div>
-			</div>
-		</div>
-
-		{+START,IF_NON_EMPTY,{$TRIM,{FIELDS}}}
-			<div class="wide_table_wrap">
-				<table id="product-attribute-specs-table" class="data-table wide_table solidborder" summary="{!MAP_TABLE}">
-					{+START,IF,{$NOT,{$MOBILE}}}
-						<colgroup>
-							<col style="width: 30%"/>
-							<col style="width: 70%"/>
-						</colgroup>
-					{+END}
-
-					<tbody>
-						{FIELDS}
-					</tbody>
-				</table>
-			</div>
-		{+END}
-
-		{CART_BUTTONS}
-	</div>
-{+END}
diff --git a/themes/default/templates/CATALOGUE_products_ENTRY_EMBED.tpl b/themes/default/templates/CATALOGUE_products_ENTRY_EMBED.tpl
deleted file mode 100644
index 9b92962..0000000
--- a/themes/default/templates/CATALOGUE_products_ENTRY_EMBED.tpl
+++ /dev/null
@@ -1,56 +0,0 @@
-{+START,BOX,,,light}
-	<div class="hproduct"{$?,{$AND,{$MATCH_KEY_MATCH,_WILD:_WILD:misc},{$VALUE_OPTION,html5}}, itemscope="itemscope" itemtype="http://schema.org/Offer"}>
-		<div class="float_surrounder">
-			<div class="product-view">
-				<div class="product-main-info">
-					{+START,IF_NON_EMPTY,{FIELD_0}}
-						<div class="product-name">
-							<a class="fn"{$?,{$VALUE_OPTION,html5}, itemprop="itemOffered"} href="{VIEW_URL*}" title="{!VIEW}: {$STRIP_TAGS*,{FIELD_0}}">{FIELD_0}</a>{$,Product name}
-						</div>
-					{+END}
-					{+START,IF_NON_EMPTY,{FIELD_1}}
-						<p class="product-ids sku">{!PRODUCT_CODE} {FIELD_1}{$,Product code}</p>
-					{+END}
-					{+START,IF_NON_EMPTY,{FIELD_9}}
-						<div class="description"{$?,{$VALUE_OPTION,html5}, itemprop="description"}>
-							{FIELD_9}{$,Product description}
-						</div>
-					{+END}
-					{+START,IF_NON_EMPTY,{FIELD_2}}
-						<div class="price-box">
-							<span class="price">{!PRICE} <span{$?,{$VALUE_OPTION,html5}, itemprop="priceCurrency"}>{$CURRENCY_SYMBOL}</span><span{$?,{$VALUE_OPTION,html5}, itemprop="price"}>{$FLOAT_FORMAT,{FIELD_2}}</span>{$,Product price}</span>
-						</div>
-					{+END}
-					{+START,IF_NON_EMPTY,{$TRIM,{RATING}}}
-						<div class="rating">
-							<span class="price">{!RATING} {RATING}{$,Product rating}</span>
-						</div>
-					{+END}
-				</div>
-			</div>
-
-			{+START,IF_NON_EMPTY,{FIELD_7_THUMB}}
-				<p class="product-img-box">
-					<a class="link_exempt" href="{+START,IF,{$NOT,{$IN_STR,{FIELD_7_PLAIN},://}}}{$BASE_URL*}/{+END}{FIELD_7_PLAIN*}" target="_blank" alt="{FIELD_0}" title="{!IMAGE}: {!LINK_NEW_WINDOW}"{$?,{$VALUE_OPTION,html5}, itemprop="image"}>{$TRIM,{FIELD_7_THUMB}}</a>
-				</p>
-			{+END}
-		</div>
-
-		{+START,IF_NON_EMPTY,{$TRIM,{FIELDS}}}
-			<div class="wide_table_wrap">
-				<table id="product-attribute-specs-table" class="data-table wide_table solidborder" summary="{!MAP_TABLE}">
-					{+START,IF,{$NOT,{$MOBILE}}}
-						<colgroup>
-							<col style="width: 30%"/>
-							<col style="width: 70%"/>
-						</colgroup>
-					{+END}
-	
-					<tbody>
-						{FIELDS}
-					</tbody>
-				</table>
-			</div>
-		{+END}
-	</div>
-{+END}
diff --git a/themes/default/templates/CATALOGUE_products_ENTRY_FIELD.tpl b/themes/default/templates/CATALOGUE_products_ENTRY_FIELD.tpl
deleted file mode 100644
index 10c8571..0000000
--- a/themes/default/templates/CATALOGUE_products_ENTRY_FIELD.tpl
+++ /dev/null
@@ -1,7 +0,0 @@
-{$,The IF filter makes sure we only show fields we haven't shown elsewhere (hard-coded list)}
-{+START,IF,{$NEQ,{FIELDID},0,1,2,9,7}}{+START,IF_NON_EMPTY,{VALUE}}
-	<tr>
-		<th width="30%">{FIELD*}</th>
-		<td width="70%">{VALUE}</td>
-	</tr>
-{+END}{+END}
diff --git a/themes/default/templates/CATALOGUE_products_ENTRY_SCREEN.tpl b/themes/default/templates/CATALOGUE_products_ENTRY_SCREEN.tpl
index 5cec905..83469e1 100644
--- a/themes/default/templates/CATALOGUE_products_ENTRY_SCREEN.tpl
+++ b/themes/default/templates/CATALOGUE_products_ENTRY_SCREEN.tpl
@@ -1,9 +1,59 @@
-<div{$?,{$VALUE_OPTION,html5}, itemscope="itemscope" itemtype="http://schema.org/Offer"}>
+<div{$?,{$VALUE_OPTION,html5}, itemscope="itemscope" itemtype="http://schema.org/Offer"} class="product_view">
 	{TITLE}
 
 	{WARNINGS}
 
-	{ENTRY}
+	{CART_LINK}
+
+	{+START,BOX,,,light}
+		<div class="hproduct"{$?,{$AND,{$MATCH_KEY_MATCH,_WILD:_WILD:misc},{$VALUE_OPTION,html5}}, itemscope="itemscope" itemtype="http://schema.org/Offer"}>
+			<div class="float_surrounder">
+				{+START,IF_NON_EMPTY,{FIELD_7_THUMB}}
+					<p class="entry_box_thumbnail">
+						<a rel="lightbox" class="link_exempt" href="{+START,IF,{$NOT,{$IN_STR,{FIELD_7_PLAIN},://}}}{$BASE_URL*}/{+END}{FIELD_7_PLAIN*}" target="_blank" alt="{FIELD_0}" title="{!IMAGE}: {!LINK_NEW_WINDOW}"{$?,{$VALUE_OPTION,html5}, itemprop="image"}>{$TRIM,{FIELD_7_THUMB}}</a>
+					</p>
+				{+END}
+
+				{+START,IF_NON_EMPTY,{FIELD_0}}
+					<div class="fn product-name"{$?,{$VALUE_OPTION,html5}, itemprop="itemOffered"}>
+						{FIELD_0}{$,Product name}
+					</div>
+				{+END}
+				{+START,IF_NON_EMPTY,{FIELD_1}}
+					<p class="product-ids sku">{!PRODUCT_CODE} {FIELD_1}{$,Product code}</p>
+				{+END}
+				{+START,IF_NON_EMPTY,{FIELD_9}}
+					<div class="description"{$?,{$VALUE_OPTION,html5}, itemprop="description"}>
+						{FIELD_9}{$,Product description}
+					</div>
+				{+END}
+				{+START,IF_NON_EMPTY,{FIELD_2}}
+					<div class="price_box">
+						<span class="price">{!PRICE} <span{$?,{$VALUE_OPTION,html5}, itemprop="priceCurrency"}>{$CURRENCY_SYMBOL}</span><span{$?,{$VALUE_OPTION,html5}, itemprop="price"}>{$FLOAT_FORMAT,{FIELD_2}}</span>{$,Product price}</span>
+					</div>
+				{+END}
+			</div>
+
+			{+START,IF_NON_EMPTY,{$TRIM,{FIELDS}}}
+				<div class="wide_table_wrap">
+					<table id="product-attribute-specs-table" class="data_table wide_table solidborder" summary="{!MAP_TABLE}">
+						{+START,IF,{$NOT,{$MOBILE}}}
+							<colgroup>
+								<col style="width: 30%"/>
+								<col style="width: 70%"/>
+							</colgroup>
+						{+END}
+
+						<tbody>
+							{FIELDS}
+						</tbody>
+					</table>
+				</div>
+
+				{CART_BUTTONS}
+			{+END}
+		</div>
+	{+END}
 
 	{$,Load up the staff actions template to display staff actions uniformly (we relay our parameters to it)...}
 	{+START,INCLUDE,STAFF_ACTIONS}
diff --git a/themes/default/templates/CATALOGUE_products_GRID_ENTRY_WRAP.tpl b/themes/default/templates/CATALOGUE_products_GRID_ENTRY_WRAP.tpl
index 5a8f6db..9caa1c5 100644
--- a/themes/default/templates/CATALOGUE_products_GRID_ENTRY_WRAP.tpl
+++ b/themes/default/templates/CATALOGUE_products_GRID_ENTRY_WRAP.tpl
@@ -1,24 +1,20 @@
-<div class="entry_box">
-	<div class="entry_box_inner">
-		{+START,BOX,<span class="name">{FIELD_0}</span>,,med}
-			{+START,IF_NON_EMPTY,{FIELD_7_THUMB}}
-				<div class="entry_box_thumbnail">
-					<a href="{VIEW_URL*}">{FIELD_7_THUMB}</a>
-				</div>
-			{+END}
+{+START,BOX,<span class="name">{FIELD_0}</span>,,med}
+	{+START,IF_NON_EMPTY,{FIELD_7_THUMB}}
+		<div class="entry_box_thumbnail">
+			<a href="{VIEW_URL*}">{FIELD_7_THUMB}</a>
+		</div>
+	{+END}
 
-			<div class="ratings">
-				{RATING}
-			</div>
+	<div class="ratings">
+		{RATING}
+	</div>
 
-			<div class="price_box">
-				<span class="price">{$CURRENCY_SYMBOL}{$FLOAT_FORMAT,{FIELD_2}}</span>
-			</div>
+	<div class="price_box">
+		<span class="price">{$CURRENCY_SYMBOL}{$FLOAT_FORMAT,{FIELD_2}}</span>
+	</div>
 
-			<div>
-				<a href="{ADD_TO_CART*}"><img class="button_pageitem" src="{$IMG*,pageitem/cart_add}" title="{!ADD_TO_CART}" alt="{!ADD_TO_CART}"/></a>
-				<a href="{VIEW_URL*}"><img class="button_pageitem" src="{$IMG*,pageitem/goto}" title="{!GO_FOR_IT}" alt="{!GO_FOR_IT}"/></a>			
-			</div>
-		{+END}
+	<div>
+		<a href="{ADD_TO_CART*}"><img class="button_pageitem" src="{$IMG*,pageitem/cart_add}" title="{!ADD_TO_CART}" alt="{!ADD_TO_CART}"/></a>
+		<a href="{VIEW_URL*}"><img class="button_pageitem" src="{$IMG*,pageitem/goto}" title="{!GO_FOR_IT}" alt="{!GO_FOR_IT}"/></a>			
 	</div>
-</div>
+{+END}
diff --git a/themes/default/templates/CATALOGUE_products_LINE.tpl b/themes/default/templates/CATALOGUE_products_LINE.tpl
deleted file mode 100644
index b0b1a05..0000000
--- a/themes/default/templates/CATALOGUE_products_LINE.tpl
+++ /dev/null
@@ -1,21 +0,0 @@
-<div class="catalogue_product_box"><div class="catalogue_product_box_inner">
-	{+START,BOX,<span class="name">{FIELD_0}</span>,,med}
-		<div class="product-list">
-			{+START,IF_NON_EMPTY,{FIELD_7_THUMB}}
-				<div class="product-image-box">
-					<a href="{VIEW_URL*}" class="product-image">{FIELD_7_THUMB}</a>
-				</div>
-			{+END}
-			<div class="ratings">
-				<span class="ratings">{RATING}</span>
-			</div>
-			<div class="price-box">
-				<span class="price">{$CURRENCY_SYMBOL}{$FLOAT_FORMAT,{FIELD_2}}</span>
-			</div>
-			<div class="actions">
-				<a href="{ADD_TO_CART*}"><img class="button_pageitem action-image" src="{$IMG*,pageitem/cart_add}" title="{!ADD_TO_CART}" alt="{!ADD_TO_CART}"/></a>
-				<a href="{VIEW_URL*}"><img class="button_pageitem action-image" src="{$IMG*,pageitem/goto}" title="{!GO_FOR_IT}" alt="{!GO_FOR_IT}"/></a>			
-			</div>
-		</div>
-	{+END}
-</div></div>
diff --git a/themes/default/templates/CATALOGUE_products_LINE_WRAP.tpl b/themes/default/templates/CATALOGUE_products_LINE_WRAP.tpl
deleted file mode 100644
index 0581513..0000000
--- a/themes/default/templates/CATALOGUE_products_LINE_WRAP.tpl
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="float_surrounder">
-	<div class="products-grid">
-		{CONTENT}
-	</div>
-</div>
