diff -Nur /usr/local/share/zabbix-2.0.5/hostinventories.php /usr/local/share/zabbix-2.0.5-inventory-view/hostinventories.php
--- /usr/local/share/zabbix-2.0.5/hostinventories.php	2013-02-21 11:06:18.489893378 +0100
+++ /usr/local/share/zabbix-2.0.5-inventory-view/hostinventories.php	2013-04-19 16:36:20.658741967 +0200
@@ -37,6 +37,7 @@
 	// filter
 	'filter_set' =>		array(T_ZBX_STR, O_OPT,	P_ACT,	null,	null),
 	'filter_field'=>		array(T_ZBX_STR, O_OPT,  null,	null,	null),
+	'show_fields'=>		array(T_ZBX_STR, O_OPT,  null,	null,	null),
 	'filter_field_value'=>	array(T_ZBX_STR, O_OPT,  null,	null,	null),
 	'filter_exact'=>        array(T_ZBX_INT, O_OPT,  null,	'IN(0,1)',	null),
 	//ajax
@@ -61,6 +62,9 @@
 ?>
 <?php
 
+$hostInventoryTable = DB::getSchema('host_inventory');
+$inventoryFields = getHostInventories(true); // 'true' means list should be ordered by title
+
 $options = array(
 	'groups' => array(
 		'real_hosts' => 1,
@@ -98,29 +102,61 @@
 		$_REQUEST['filter_field'] = get_request('filter_field');
 		$_REQUEST['filter_field_value'] = get_request('filter_field_value');
 		$_REQUEST['filter_exact'] = get_request('filter_exact');
+		$_REQUEST['show_fields'] = get_request('show_fields');
+		if ($_REQUEST['show_fields'] == '') {
+			$_REQUEST['show_fields'] = array (
+					'software_full' => 'software_full'
+					);
+		}
+		$columnList = mapInventory($_REQUEST['show_fields']);
 		CProfile::update('web.hostinventories.filter_field', $_REQUEST['filter_field'], PROFILE_TYPE_STR);
 		CProfile::update('web.hostinventories.filter_field_value', $_REQUEST['filter_field_value'], PROFILE_TYPE_STR);
 		CProfile::update('web.hostinventories.filter_exact', $_REQUEST['filter_exact'], PROFILE_TYPE_INT);
+		CProfile::update('web.hostinventories.show_fields', $columnList, PROFILE_TYPE_STR);
 	}
 	else{
 		$_REQUEST['filter_field'] = CProfile::get('web.hostinventories.filter_field');
 		$_REQUEST['filter_field_value'] = CProfile::get('web.hostinventories.filter_field_value');
 		$_REQUEST['filter_exact'] = CProfile::get('web.hostinventories.filter_exact');
+		$columnList = CProfile::get('web.hostinventories.show_fields');
+	}
+	if ($columnList == '') {
+		// Default column
+		$_REQUEST['show_fields'] = array (
+				'software_full' => 'software_full'
+				);
+		$columnList = mapInventory($_REQUEST['show_fields']);
 	}
 
+	$filter_form = new CForm('get');
+	$filter_form->setAttribute('name','zbx_filter');
+	$filter_form->setAttribute('id','zbx_filter');
+
 	$filter_table = new CTable('', 'filter');
 	// getting inventory fields to make a drop down
-	$inventoryFields = getHostInventories(true); // 'true' means list should be ordered by title
+	$visibleFields = explode(',', $columnList);
+	foreach ($visibleFields as $visibleField) {
+		$fieldList[] = $inventoryFields[$visibleField]['db_field'];
+	}
+	$fieldTweenBox = new CTweenBox($filter_form, 'show_fields', $fieldList, 10);
+
 	$inventoryFieldsComboBox = new CComboBox('filter_field', $_REQUEST['filter_field']);
 	foreach($inventoryFields as $inventoryField){
+        $inventoryFieldMapping[$inventoryField['db_field']] = $inventoryField['title'];
 		$inventoryFieldsComboBox->addItem(
 			$inventoryField['db_field'],
 			$inventoryField['title']
 		);
+		$fieldTweenBox->addItem(
+				$inventoryField['db_field'],
+				$inventoryField['title']
+				);
 	}
 	$exactComboBox = new CComboBox('filter_exact', $_REQUEST['filter_exact']);
 	$exactComboBox->addItem('0', _('like'));
 	$exactComboBox->addItem('1', _('exactly'));
+	$column = new CCol ($fieldTweenBox->get(_('Visible columns'), _('Available columns')));
+	$filter_table->addRow($column);
 	$filter_table->addRow(array(
 		array(
 			array(bold(_('Field:')), $inventoryFieldsComboBox),
@@ -144,39 +180,31 @@
 
 	$filter_table->addRow($footer_col);
 
-	$filter_form = new CForm('get');
-	$filter_form->setAttribute('name','zbx_filter');
-	$filter_form->setAttribute('id','zbx_filter');
 	$filter_form->addItem($filter_table);
 	$hostinvent_wdgt->addFlicker($filter_form, CProfile::get('web.hostinventories.filter.state', 0));
 	$hostinvent_wdgt->addHeaderRowNumber();
 
 	$table = new CTableInfo(_('No hosts defined.'));
-	$table->setHeader(array(
+	$header = array(
 		is_show_all_nodes() ? make_sorting_header(_('Node'), 'hostid') : null,
 		make_sorting_header(_('Host'), 'name'),
-		_('Group'),
-		make_sorting_header(_('Name'), 'pr_name'),
-		make_sorting_header(_('Type'), 'pr_type'),
-		make_sorting_header(_('OS'), 'pr_os'),
-		make_sorting_header(_('Serial number A'), 'pr_serialno_a'),
-		make_sorting_header(_('Tag'), 'pr_tag'),
-		make_sorting_header(_('MAC address A'), 'pr_macaddress_a'))
+		_('Group')
 	);
 
+
+	foreach ($visibleFields as $visibleField) {
+		$label = $inventoryFields[$visibleField]['title']; 
+		$header[] = make_sorting_header($label, 'pr_'.$inventoryFields[$visibleField]['db_field']);
+	}
+
+	$table->setHeader($header);
+
 	$hosts = array();
 	$paging = getPagingLine($hosts);
 
 	if($pageFilter->groupsSelected){
 		// which inventory fields we will need for displaying
-		$requiredInventoryFields = array(
-			'name',
-			'type',
-			'os',
-			'serialno_a',
-			'tag',
-			'macaddress_a'
-		);
+		$requiredInventoryFields = $fieldList;
 
 		// checking if correct inventory field is specified for filter
 		$possibleInventoryFields = getHostInventories();
@@ -193,7 +221,7 @@
 			}
 
 			$options = array(
-				'output' => array('hostid', 'name'),
+				'output' => array('hostid', 'name', 'status'),
 				'selectInventory' => $requiredInventoryFields,
 				'withInventory' => true,
 				'selectGroups' => API_OUTPUT_EXTEND,
@@ -207,13 +235,10 @@
 			// copy some inventory fields to the uppers array level for sorting
 			// and filter out hosts if we are using filter
 			foreach($hosts as $num => $host){
-				$hosts[$num]['pr_name'] = $host['inventory']['name'];
-				$hosts[$num]['pr_type'] = $host['inventory']['type'];
-				$hosts[$num]['pr_os'] = $host['inventory']['os'];
-				$hosts[$num]['pr_serialno_a'] = $host['inventory']['serialno_a'];
-				$hosts[$num]['pr_tag'] = $host['inventory']['tag'];
-				$hosts[$num]['pr_macaddress_a'] = $host['inventory']['macaddress_a'];
-				// if we are filtering by inventory field
+				foreach ($fieldList as $field) {
+					$hosts[$num]['pr_'.$field] = $host['inventory'][$field];
+				}
+				//// if we are filtering by inventory field
 				if(!empty($_REQUEST['filter_field']) && !empty($_REQUEST['filter_field_value'])){
 					// must we filter exactly or using a substring (both are case insensitive)
 					$match = $_REQUEST['filter_exact']
@@ -239,17 +264,19 @@
 				natsort($host_groups);
 				$host_groups = implode(', ', $host_groups);
 
+				$style = $host['status'] == HOST_STATUS_NOT_MONITORED ? 'on' : null;
+
 				$row = array(
 					get_node_name_by_elid($host['hostid']),
-					new CLink($host['name'],'?hostid='.$host['hostid'].url_param('groupid')),
-					$host_groups,
-					zbx_str2links($host['inventory']['name']),
-					zbx_str2links($host['inventory']['type']),
-					zbx_str2links($host['inventory']['os']),
-					zbx_str2links($host['inventory']['serialno_a']),
-					zbx_str2links($host['inventory']['tag']),
-					zbx_str2links($host['inventory']['macaddress_a']),
-				);
+					new CLink($host['name'],'?hostid='.$host['hostid'].url_param('groupid'), $style), $host_groups);
+					foreach ($fieldList as $field) {
+						if ($hostInventoryTable['fields'][$field]['type'] == DB::FIELD_TYPE_TEXT) {
+							$row[] = new CCol(zbx_str2links($host['inventory'][$field]), 'wraptext top');
+						}
+						else {
+							$row[] = new CCol(zbx_str2links($host['inventory'][$field]));
+					}
+				}
 
 				$table->addRow($row);
 			}
diff -Nur /usr/local/share/zabbix-2.0.5/include/hosts.inc.php /usr/local/share/zabbix-2.0.5-inventory-view/include/hosts.inc.php
--- /usr/local/share/zabbix-2.0.5/include/hosts.inc.php	2013-02-21 11:06:18.651893124 +0100
+++ /usr/local/share/zabbix-2.0.5-inventory-view/include/hosts.inc.php	2013-04-19 16:17:06.197030753 +0200
@@ -461,6 +461,29 @@
 	return $inventoryFields;
 }
 
+/**
+ * Map an inventory array to ids and join to a string
+ * That's necessary to fit it into the 255 chars of a profile
+ *
+ * @param array $fields
+ *
+ * @return string
+ */
+function mapInventory($fields) {
+	// Maintain field order
+	asort($fields);
+	global $inventoryFields;
+	foreach ($inventoryFields as $inventoryField) {
+		$fieldMap[$inventoryField['db_field']] = $inventoryField['nr'];
+	}
+
+	foreach (array_keys($fields) as $field) {
+		$intMap[] = $fieldMap[$field];
+	}
+
+	return implode(',', $intMap);
+}
+
 function hostInterfaceTypeNumToName($type) {
 	switch ($type) {
 		case INTERFACE_TYPE_AGENT:
diff -Nur /usr/local/share/zabbix-2.0.5/styles/default.css /usr/local/share/zabbix-2.0.5-inventory-view/styles/default.css
--- /usr/local/share/zabbix-2.0.5/styles/default.css	2013-02-21 11:06:18.707893144 +0100
+++ /usr/local/share/zabbix-2.0.5-inventory-view/styles/default.css	2013-03-29 14:11:41.340302577 +0100
@@ -716,6 +716,11 @@
 	border-left: 0 !important;
 	padding: 0 2px 0 6px;
 }
+table.filter table {
+    margin-left: auto;
+    margin-right: auto;
+}
+
 table.filter tr td.label { border-right: 0 !important; }
 table.filter tr td.controls { text-align: center; }
 
