diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index b744e35688c5cb21004195df82ee065d5408d919..2fe719118149305b08570ead903d57b0e32a93d4 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -109,6 +109,46 @@ class functions {
 		return $url;
 	}
 	
+    function json_encode($data) {
+		if(!function_exists('json_encode')){
+			switch ($type = gettype($data)){
+				case 'NULL':
+					return 'null';
+				case 'boolean':
+					return ($data ? 'true' : 'false');
+				case 'integer':
+				case 'double':
+				case 'float':
+					return $data;
+				case 'string':
+					return '"' . addslashes($data) . '"';
+				case 'object':
+					$data = get_object_vars($data);
+				case 'array':
+					$output_index_count = 0;
+					$output_indexed = array();
+					$output_associative = array();
+					foreach($data as $key => $value){
+						$output_indexed[] = $this->json_encode($value);
+						$output_associative[] = $this->json_encode($key) . ':' . $this->json_encode($value);
+						if($output_index_count !== NULL && $output_index_count++ !== $key){
+							$output_index_count = NULL;
+						}
+					}
+					if($output_index_count !== NULL){
+						return '[' . implode(',', $output_indexed) . ']';
+					} else {
+						return '{' . implode(',', $output_associative) . '}';
+					}
+				default:
+					return ''; // Not supported
+			}
+		} else {
+			return json_encode($data);
+		}
+    }
+
+	
 		
 }
 
diff --git a/interface/web/capp.php b/interface/web/capp.php
index 63177341d1d504335a63e2e1b9a6712407de1bd2..45123919880e7f584702dfeaf75ad38595cfa931 100644
--- a/interface/web/capp.php
+++ b/interface/web/capp.php
@@ -33,6 +33,8 @@ require_once('../lib/app.inc.php');
 
 //* Import module variable
 $mod = $_REQUEST["mod"];
+//* If we click on a search result, load that one instead of the module's start page
+$redirect = (isset($_REQUEST["redirect"]) ? $_REQUEST["redirect"] : '');
 
 //* Check if user is logged in
 if($_SESSION["s"]["user"]['active'] != 1) {
@@ -40,6 +42,8 @@ if($_SESSION["s"]["user"]['active'] != 1) {
 	//die();
 }
 
+if(!preg_match("/^[a-z]{2,20}$/i", $mod)) die('module name contains unallowed chars.');
+
 //* Check if user may use the module.
 $user_modules = explode(",",$_SESSION["s"]["user"]["modules"]);
 
@@ -50,7 +54,12 @@ if(is_file($mod."/lib/module.conf.php")) {
 	include_once($mod."/lib/module.conf.php");
 	$_SESSION["s"]["module"] = $module;
 	session_write_close();
-	echo "HEADER_REDIRECT:".$_SESSION["s"]["module"]["startpage"];
+	if($redirect == ''){
+		echo "HEADER_REDIRECT:".$_SESSION["s"]["module"]["startpage"];
+	} else {
+		//* If we click on a search result, load that one instead of the module's start page
+		echo "HEADER_REDIRECT:".$redirect;
+	}
 } else {
 	$app->error($app->lng(302));
 }
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 85b867104f2efd37604f7d5f4750d3da84d48df4..3fca605ef9c447f3c0ba7321c17eb7a7f53712b4 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -90,7 +95,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'contact_name' => array (
 			'datatype'	=> 'VARCHAR',
@@ -104,7 +110,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 1
 		),
 		'customer_no' => array (
 			'datatype'	=> 'VARCHAR',
@@ -115,7 +122,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'username' => array (
 			'datatype'	=> 'VARCHAR',
@@ -136,7 +144,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'password' => array (
 			'datatype'	=> 'VARCHAR',
@@ -181,7 +190,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'zip' => array (
 			'datatype'	=> 'VARCHAR',
@@ -192,7 +202,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '10',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'city' => array (
 			'datatype'	=> 'VARCHAR',
@@ -203,7 +214,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'state' => array (
 			'datatype'	=> 'VARCHAR',
@@ -214,7 +226,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'country' => array (
 			'datatype'	=> 'VARCHAR',
@@ -237,7 +250,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'mobile' => array (
 			'datatype'	=> 'VARCHAR',
@@ -248,7 +262,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'fax' => array (
 			'datatype'	=> 'VARCHAR',
@@ -259,7 +274,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'email' => array (
 			'datatype'	=> 'VARCHAR',
@@ -270,7 +286,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'internet' => array (
 			'datatype'	=> 'VARCHAR',
@@ -281,7 +298,8 @@ $form["tabs"]['address'] = array (
 			'width'		=> '30',
 			'maxlength'	=> '255',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 2
 		),
 		'icq' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/dashboard/ajax_get_json.php b/interface/web/dashboard/ajax_get_json.php
new file mode 100644
index 0000000000000000000000000000000000000000..18cd1e45e8bc57bd748fd736f581288c2315b22d
--- /dev/null
+++ b/interface/web/dashboard/ajax_get_json.php
@@ -0,0 +1,197 @@
+<?php
+
+/*
+Copyright (c) 2012, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('dashboard');
+
+$app->uses('tform');
+
+$type = $_GET["type"];
+
+//if($_SESSION["s"]["user"]["typ"] == 'admin') {
+
+	
+	if($type == 'globalsearch'){
+		$q = $app->db->quote($_GET["q"]);
+		$authsql = " AND ".$app->tform->getAuthSQL('r');
+		$modules = explode(',', $_SESSION['s']['user']['modules']);
+		
+		// clients
+		$result_clients = _search('client', 'client');
+		
+		// web sites
+		$result_webs = _search('sites', 'web_domain');
+		
+		// FTP users
+		$result_ftp_users = _search('sites', 'ftp_user');
+		
+		// shell users
+		$result_shell_users = _search('sites', 'shell_user');
+		
+		// databases
+		/*
+		$result_databases = array('cheader' => array(), 'cdata' => array());
+		if(in_array('sites', $modules)){
+			$sql = "SELECT * FROM web_database WHERE database_name LIKE '%".$q."%' OR database_user LIKE '%".$q."%' OR remote_ips LIKE '%".$q."%'".$authsql." ORDER BY database_name";
+			$results = $app->db->queryAllRecords($sql);
+
+			if(is_array($results) && !empty($results)){	
+				$result_databases['cheader'] = array('title' => 'Databases',
+														'total' => count($results),
+														'limit' => count($results)
+													);
+				foreach($results as $result){
+					$description = 'Database User: '.$result['database_user'].' - Remote IPs: '.$result['remote_ips'];
+					$result_databases['cdata'][] = array('title' => $result['database_name'],
+												'description' => $description,
+												'onclick' => 'capp(\'sites\',\'sites/database_edit.php?id='.$result['database_id'].'\');',
+												'fill_text' => strtolower($result['database_name'])
+												);
+				}	
+			}
+		}
+		*/
+		$result_databases = _search('sites', 'database');
+		
+		// email domains
+		$result_email_domains = _search('mail', 'mail_domain');
+		
+		// email mailboxes
+		$result_email_mailboxes = _search('mail', 'mail_user');
+		
+		// dns zones
+		$result_dns_zones = _search('dns', 'dns_soa');
+		
+		// secondary dns zones
+		$result_secondary_dns_zones = _search('dns', 'dns_slave');
+		
+		// virtual machines
+		$result_vms = _search('vm', 'openvz_vm');
+		
+		// virtual machines os templates
+		$result_vm_ostemplates = _search('vm', 'openvz_ostemplate');
+		
+		// virtual machines vm templates
+		$result_vm_vmtemplates = _search('vm', 'openvz_template');
+		
+		// virtual machines ip addresses
+		$result_vm_ip_addresses = _search('vm', 'openvz_ip');
+
+		$json = $app->functions->json_encode(array($result_clients, $result_webs, $result_ftp_users, $result_shell_users, $result_databases, $result_email_domains, $result_email_mailboxes, $result_dns_zones, $result_secondary_dns_zones, $result_vms, $result_vm_ostemplates, $result_vm_vmtemplates, $result_vm_ip_addresses));
+	}
+
+//}
+
+function _search($module, $section){
+	global $app, $q, $authsql, $modules;
+	//$q = $app->db->quote($_GET["q"]);
+	//$authsql = " AND ".$app->tform->getAuthSQL('r');
+	//$user_modules = explode(',', $_SESSION['s']['user']['modules']);
+
+	$result_array = array('cheader' => array(), 'cdata' => array());
+	if(in_array($module, $modules)){
+		$search_fields = array();
+		$desc_fields = array();
+		if(is_file('../'.$module.'/form/'.$section.'.tform.php')){
+			include_once('../'.$module.'/form/'.$section.'.tform.php');
+			
+			$category_title = $form["title"];
+			$form_file = $form["action"];
+			$db_table = $form["db_table"];
+			$db_table_idx = $form["db_table_idx"];
+			$order_by = $db_table_idx;
+			
+			if(is_array($form["tabs"]) && !empty($form["tabs"])){
+				foreach($form["tabs"] as $tab){
+					if(is_array($tab['fields']) && !empty($tab['fields'])){
+						foreach($tab['fields'] as $key => $val){
+							if(isset($val['searchable']) && $val['searchable'] > 0){
+								$search_fields[] = $key." LIKE '%".$q."%'";
+								if($val['searchable'] == 1){
+									$order_by = $key;
+									$title_key = $key;
+								}
+								if($val['searchable'] == 2){
+									$desc_fields[] = $key;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		unset($form);
+		
+		$where_clause = '';
+		if(!empty($search_fields)){
+			$where_clause = implode(' OR ', $search_fields);
+		} else {
+			// valid SQL query which returns an empty result set
+			$where_clause = '1 = 0';
+		}
+		$order_clause = '';
+		if($order_by != '') $order_clause = ' ORDER BY '.$order_by;
+		
+		$results = $app->db->queryAllRecords("SELECT * FROM ".$db_table." WHERE ".$where_clause.$authsql.$order_clause);
+		
+		if(is_array($results) && !empty($results)){	
+			$lng_file = '../'.$module.'/lib/lang/'.$_SESSION['s']['language'].'_'.$section.'.lng';
+			if(is_file($lng_file)) include($lng_file);
+			$result_array['cheader'] = array('title' => $category_title,
+											'total' => count($results),
+											'limit' => count($results)
+											);
+			foreach($results as $result){
+				$description = '';
+				if(!empty($desc_fields)){
+					$desc_items = array();
+					foreach($desc_fields as $desc_field){
+						if($result[$desc_field] != '') $desc_items[] = $wb[$desc_field.'_txt'].': '.$result[$desc_field];
+					}
+					if(!empty($desc_items)) $description = implode(' - ', $desc_items);
+				}
+				
+				$result_array['cdata'][] = array('title' => $wb[$title_key.'_txt'].': '.$result[$title_key],
+												'description' => $description,
+												'onclick' => "capp('".$module."','".$module."/".$form_file."?id=".$result[$db_table_idx]."');",
+												'fill_text' => strtolower($result[$title_key])
+												);
+			}	
+		}
+	}
+	return $result_array;
+}
+		
+header('Content-type: application/json');
+echo $json;
+?>
\ No newline at end of file
diff --git a/interface/web/dns/form/dns_slave.tform.php b/interface/web/dns/form/dns_slave.tform.php
index 097602e8e5f88faab9d2047e10334dc85f4e83a1..a1dea941fc34999eff34c058b1b074f784b54f9c 100644
--- a/interface/web/dns/form/dns_slave.tform.php
+++ b/interface/web/dns/form/dns_slave.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -88,7 +93,8 @@ $form["tabs"]['dns_slave'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'ns' => array (
 			'datatype'	=> 'VARCHAR',
@@ -100,7 +106,8 @@ $form["tabs"]['dns_slave'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 2
 		),
                 'xfer' => array (
                         'datatype'      => 'VARCHAR',
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index 53b408ef3a1cab68a3a48c977815de7ec5765cd4..c102e126fc00f36082536305705cfad9f9a92366 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -88,7 +93,8 @@ $form["tabs"]['dns_soa'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'ns' => array (
 			'datatype'	=> 'VARCHAR',
@@ -100,7 +106,8 @@ $form["tabs"]['dns_soa'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 2
 		),
 		'mbox' => array (
 			'datatype'	=> 'VARCHAR',
@@ -114,7 +121,8 @@ $form["tabs"]['dns_soa'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 2
 		),
 		'serial' => array (
 			'datatype'	=> 'INTEGER',
diff --git a/interface/web/js/jquery.ispconfigsearch.js b/interface/web/js/jquery.ispconfigsearch.js
new file mode 100644
index 0000000000000000000000000000000000000000..211dcd76dc7eea784694ec8ece516b402a43c11b
--- /dev/null
+++ b/interface/web/js/jquery.ispconfigsearch.js
@@ -0,0 +1,156 @@
+/*
+Copyright (c) 2012, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+(function($) {
+	$.fn.ispconfigSearch = function(settings){
+
+		var defaultSettings = {
+			dataSrc: '',
+			timeout: 500,
+			minChars: 2,
+			resultBox: '-resultbox',
+			cssPrefix: 'gs-',
+			fillSearchField: false,
+			fillSearchFieldWith: 'title',
+			resultsText: '$ of % results',
+			noResultsText: 'No results.',
+			displayEmptyCategories: false,
+			runJS: true
+		};
+		
+		var previousQ = '';
+		var data;
+		var settings = $.extend(defaultSettings, settings);
+		settings.resultBox = $(this).attr('id')+settings.resultBox;
+		
+		$(this).attr('autocomplete', 'off');
+		$(this).wrap('<div class="'+settings.cssPrefix+'container" />');
+		$(this).after('<ul id="'+settings.resultBox+'" class="'+settings.cssPrefix+'resultbox" style="display:none;"></ul>');
+		var searchField = $(this);
+		var resultBox = $('#'+settings.resultBox);
+
+		var timeout = null;
+		searchField.keyup(function(event) {
+			// 13 = enter, 9 = tab
+			if (event.keyCode != 13 && event.keyCode != 9){
+				// query value
+				var q = searchField.val();
+				
+				if (settings.minChars > q.length || q == ''){
+					resultBox.fadeOut();
+					resetTimer(timeout);
+				} else {
+					if (timeout != null){
+						resetTimer(timeout);
+					}
+					
+					timeout = setTimeout(function(){
+						searchField.addClass(settings.cssPrefix+'loading');
+
+						// we don't have to perform a new search if the query equals the previous query
+						previousQ = q;
+						var queryStringCombinator = '?';
+						if(settings.dataSrc.indexOf('?') != -1){
+							queryStringCombinator = '&';
+						}
+						$.getJSON(settings.dataSrc+queryStringCombinator+"q="+q, function(data, textStatus){
+							if (textStatus == 'success'){
+								var output = '';
+								var resultsFound = false;
+
+								if($.isEmptyObject(data) === false){
+									$.each(data, function(i, category){
+										if (category['cdata'].length > 0){
+											resultsFound = true;
+										}
+									});
+								}
+
+								if (!resultsFound){
+									output += '<li class="'+settings.cssPrefix+'cheader"><p class="'+settings.cssPrefix+'cheader-title">'+settings.noResultsText+'</p><p class="'+settings.cssPrefix+'cheader-limit">0 results</p></li>';
+								} else {
+								
+									$.each(data, function(i, category){
+										
+										if (settings.displayEmptyCategories || (!settings.displayEmptyCategories && category['cdata'].length != 0)){
+											var limit = category['cheader']['limit'];
+											var cnt = 0;
+
+											output += '<li class="'+settings.cssPrefix+'cheader"><p class="'+settings.cssPrefix+'cheader-title">'+category['cheader']['title']+'</p><p class="'+settings.cssPrefix+'cheader-limit">'+settings.resultsText.replace("%", category['cheader']['total']).replace("$", (category['cheader']['limit'] < category['cdata'].length ? category['cheader']['limit'] : category['cdata'].length))+'</p></li>';
+
+											var fillSearchFieldCode = (settings.fillSearchField) ? 'document.getElementById(\''+searchField.attr('id')+'\').value = \'%\';' : '';
+											//var fillSearchFieldCode = 'document.getElementById(\''+searchField.attr('id')+'\').value = \'%\';';
+											
+											$.each(category['cdata'], function (j, item){
+												if (cnt < limit){
+													//var link = '<a href="'+((item['url'] != undefined) ? item['url'] : 'javascript:void(0);')+'" '+((item['onclick'] != undefined) ? ' onclick="'+fillSearchFieldCode.replace("%", ((settings.fillSearchField) ? item[settings.fillSearchFieldWith] : ''))+(settings.runJS ? item['onclick'] : '')+'"' : '')+((item['target'] != undefined) ? ' target="'+item['target']+'"' : '')+'>';
+													var link = '<a href="'+((item['url'] != undefined) ? item['url'] : 'javascript:void(0);')+'" '+((item['onclick'] != undefined) ? ' onclick="'+fillSearchFieldCode.replace("%", item[settings.fillSearchFieldWith])+(settings.runJS ? item['onclick'] : '')+'"' : '')+((item['target'] != undefined) ? ' target="'+item['target']+'"' : '')+'>';
+
+													output += '<li class="'+settings.cssPrefix+'cdata">'+link+"\n";
+													output += '<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>';
+													output += '<p>';
+													output += (item['title'] != undefined) ? '<span class="'+settings.cssPrefix+'cdata-title">'+item['title']+"</span><br />\n" : '';
+													output += (item['description'] != undefined) ? ''+item['description']+''+"\n" : '';
+													output += '</p>'+"\n";
+													output += '</td></tr></table>';
+													output += '</a></li>'+"\n";
+												}
+												cnt++;
+											});
+										}
+									});
+								}
+
+								resultBox.html(output).css({'position' : 'absolute', 'top' : searchField.position().top+searchField.outerHeight(), 'right' : '0'}).fadeIn();
+
+								searchField.removeClass(settings.cssPrefix+'loading');
+							}
+						});
+					}, settings.timeout);
+				}
+			}		
+		});
+		
+		searchField.blur(function(){
+			resultBox.fadeOut();
+		});
+
+		searchField.focus(function(){
+			if (searchField.val() == previousQ && searchField.val() != ''){
+				resultBox.fadeIn();
+			} else if (searchField.val() != ''){
+				searchField.trigger('keyup');
+			}
+		});
+
+	};
+	
+	function resetTimer(timeout){
+		clearTimeout(timeout);
+		timeout = null;
+	};
+})(jQuery);
\ No newline at end of file
diff --git a/interface/web/js/scrigo.js.php b/interface/web/js/scrigo.js.php
index 25e2128ec371a0ab8e452d9c2c9cb90ea6fc2695..f8120e8372ac72b86fae019733925e6dcd752709 100644
--- a/interface/web/js/scrigo.js.php
+++ b/interface/web/js/scrigo.js.php
@@ -33,10 +33,10 @@ function loadContentRefresh(pagename) {
   }
 }
 
-function capp(module) {
+function capp(module, redirect) {
 	var submitFormObj = jQuery.ajax({		type: "GET", 
 											url: "capp.php", 
-											data: "mod="+module,
+											data: "mod="+module+((redirect != undefined) ? '&redirect='+redirect : ''),
 											dataType: "html",
 											success: function(data, textStatus, jqXHR) {
 												if(jqXHR.responseText != '') {
diff --git a/interface/web/mail/form/mail_domain.tform.php b/interface/web/mail/form/mail_domain.tform.php
index 7bebe7e730c85ebc5c724f9db105a39c4b51b5d7..fd0c28794b9371f3feb15037dd099db1295d7fa3 100644
--- a/interface/web/mail/form/mail_domain.tform.php
+++ b/interface/web/mail/form/mail_domain.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -83,7 +88,8 @@ $form["tabs"]['domain'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'active' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index b70d656d1f1130c1538b350a62b72de0adcc75bc..c9353edb34d64471de90d2f45d9a0985faa3fac7 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -77,7 +82,8 @@ $form["tabs"]['mailuser'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
     'login' => array (
       'datatype'  => 'VARCHAR',
@@ -109,7 +115,8 @@ $form["tabs"]['mailuser'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 2
 		),
 		'quota' => array (
 			'datatype'	=> 'INTEGER',
diff --git a/interface/web/sites/ajax_get_json.php b/interface/web/sites/ajax_get_json.php
index 8c7b738b2ed7a44fd64e7a8342352d74d478b8a0..887f5dae26f06037bfdb84b61cd4968117b9c063 100644
--- a/interface/web/sites/ajax_get_json.php
+++ b/interface/web/sites/ajax_get_json.php
@@ -101,6 +101,6 @@ $type = $_GET["type"];
 	}
 
 //}
-
+header('Content-type: application/json');
 echo $json;
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/form/database.tform.php b/interface/web/sites/form/database.tform.php
index 9bef109391203b5fb03f560abc434913bc31ea89..b26a1e4d539903022d3d6e6b89d6aeebe178ea82 100644
--- a/interface/web/sites/form/database.tform.php
+++ b/interface/web/sites/form/database.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -98,7 +103,8 @@ $form["tabs"]['database'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'database_user' => array (
 			'datatype'	=> 'VARCHAR',
@@ -114,7 +120,8 @@ $form["tabs"]['database'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 2
 		),
 		'database_password' => array (
 			'datatype'	=> 'VARCHAR',
@@ -153,7 +160,8 @@ $form["tabs"]['database'] = array (
 	                             ),
 	      'default' => '',
 	      'value'   => '',
-	      'width'   => '60'
+	      'width'   => '60',
+		  'searchable' => 2
 	    ),
 	##################################
 	# ENDE Datatable fields
diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 3450764ff55474654c82b392402deec840b3e70a..3f71828dbc1affaf4baf85706b44fd12543d116f 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -92,7 +97,8 @@ $form["tabs"]['ftp'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'password' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/sites/form/shell_user.tform.php b/interface/web/sites/form/shell_user.tform.php
index ec7b61276101d5bc451b81d780c9422c19bcb5b2..061dd29d91a76d987350f141bb10fd41c973f124 100644
--- a/interface/web/sites/form/shell_user.tform.php
+++ b/interface/web/sites/form/shell_user.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -92,7 +97,8 @@ $form["tabs"]['shell'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'password' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/sites/form/web_domain.tform.php b/interface/web/sites/form/web_domain.tform.php
index ce835a94b353ea269ba87b424d0625f376c11f59..d97d78b5d99e048f8333e00806dc1fd5f087c4f1 100644
--- a/interface/web/sites/form/web_domain.tform.php
+++ b/interface/web/sites/form/web_domain.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -87,7 +92,8 @@ $form["tabs"]['domain'] = array (
 										'keyfield'=> 'ip_address',
 										'valuefield'=> 'ip_address'
 									 ),*/
-			'value'		=> ''
+			'value'		=> '',
+			'searchable' => 2
 		),
 		'ipv6_address' => array (
 			'datatype'	=> 'VARCHAR',
@@ -98,7 +104,8 @@ $form["tabs"]['domain'] = array (
 										'keyfield'=> 'ip_address',
 										'valuefield'=> 'ip_address'
 									 ),*/
-			'value'		=> ''
+			'value'		=> '',
+			'searchable' => 2
 		),
 		'domain' => array (
 			'datatype'	=> 'VARCHAR',
@@ -114,7 +121,8 @@ $form["tabs"]['domain'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'type' => array (
 			'datatype'	=> 'VARCHAR',
@@ -208,7 +216,8 @@ $form["tabs"]['domain'] = array (
 			'formtype'	=> 'SELECT',
 			'default'	=> 'fast-cgi',
 			'valuelimit' => 'client:web_php_options',
-			'value'		=> array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM')
+			'value'		=> array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM'),
+			'searchable' => 2
 		),
 		'fastcgi_php_version' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/themes/default/css/screen/content_ispc.css b/interface/web/themes/default/css/screen/content_ispc.css
index 796cd57114a040743de6d3cc35bb329b392ae2fb..bb8b8368141dab6963890c0809dd711cbf77b3b7 100644
--- a/interface/web/themes/default/css/screen/content_ispc.css
+++ b/interface/web/themes/default/css/screen/content_ispc.css
@@ -993,6 +993,134 @@
 		-ms-transform:rotate(90deg);
 		transform:rotate(90deg);
 	}
-
+	
+	div.gs-container{
+		margin-top:10px;
+	}
+	div.gs-container *{
+		margin: 0;
+		padding: 0;
+		background-position: 0 0;
+		text-decoration: none;
+		font-size: 1em;
+	}
+	input.gs-loading{
+		background-image: url(../../icons/x16/loading.gif);
+		background-repeat: no-repeat;
+		background-position: center right;
+	}
+	ul.gs-resultbox{
+		margin: 0 !important;
+		padding: 0 !important;
+		width: 300px;
+		z-index: 999999;
+		border: 1px solid #aaa;
+		font-size: 11px;
+		background: #fff;
+		-moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
+		-webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
+		-khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
+		-o-box-shadow: 2px 2px 5px 0 #c5c5c5;
+		-ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
+		box-shadow: 2px 2px 5px 0 #c5c5c5;
+		list-style: none;
+		/*
+		-moz-border-radius-bottomleft:10px;
+		-webkit-border-bottom-left-radius:10px;
+		-khtml-border-bottom-left-radius:10px;
+		-o-border-bottom-left-radius:10px;
+		-ms-border-bottom-left-radius:10px;
+		border-bottom-left-radius:10px;	
+		-moz-border-radius-bottomright:10px;
+		-webkit-border-bottom-right-radius:10px;
+		-khtml-border-bottom-right-radius:10px;
+		-o-border-bottom-right-radius:10px;
+		-ms-border-bottom-right-radius:10px;
+		border-bottom-right-radius:10px;
+		*/
+	}
+	ul.gs-resultbox li{
+		float: left;
+		width: 100%;
+		clear: both;
+		cursor: pointer;
+	}
+	/*
+	ul.gs-resultbox li:last-child{
+		-moz-border-radius-bottomleft:10px;
+		-webkit-border-bottom-left-radius:10px;
+		-khtml-border-bottom-left-radius:10px;
+		-o-border-bottom-left-radius:10px;
+		-ms-border-bottom-left-radius:10px;
+		border-bottom-left-radius:10px;	
+		-moz-border-radius-bottomright:10px;
+		-webkit-border-bottom-right-radius:10px;
+		-khtml-border-bottom-right-radius:10px;
+		-o-border-bottom-right-radius:10px;
+		-ms-border-bottom-right-radius:10px;
+		border-bottom-right-radius:10px;
+	}
+	*/
+	ul.gs-resultbox li.gs-cheader{
+		height: 13px;
+		overflow: hidden;
+		padding: 5px 0;
+		color: #fff;
+		background: #6ea6d1;
+		cursor:default;
+		padding-bottom:10px;
+	}
+	ul.gs-resultbox li.gs-cheader p.gs-cheader-title{
+		margin: 0 !important;
+		padding: 0 0 0 10px !important;
+		float: left;
+		font-size: 12px;
+		font-weight: bold;
+	}
+	ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{
+		margin: 0 !important;
+		padding: 0 10px 0 0 !important;
+		float: right;
+		font-size: 11px;
+		font-weight: normal;
+	}
+	ul.gs-resultbox li.gs-cdata{
+		margin: 0 !important;
+		padding: 0 !important;
+		border-bottom: 1px solid #c5c5c5;
+	}
+	ul.gs-resultbox li.gs-cdata:last-child{
+		border-bottom: none;
+	}
+	ul.gs-resultbox li.gs-cdata:hover{
+		background: #eaf4fd;
+	}
+	ul.gs-resultbox li.gs-cdata a{
+		display: block;
+		padding: 5px 10px;
+		text-decoration: none !important;
+		background: #fff;
+	}
+	ul.gs-resultbox li.gs-cdata a:hover{
+		background: #cde0ff;
+	}
+	ul.gs-resultbox li.gs-cdata img{
+		margin-right: 12px;
+	}
+	ul.gs-resultbox li.gs-cdata p{
+		margin: 0 !important;
+		padding: 0 !important;
+		color: #444;
+		font-size: 10px;
+		min-height:30px;
+	}
+	ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{
+		display: inline !important;
+		margin: 0 !important;
+		padding: 0 !important;
+		font-size: 11px;
+		font-weight: bold;
+		color: #000;
+	}
 }
 
diff --git a/interface/web/themes/default/icons/x16/loading.gif b/interface/web/themes/default/icons/x16/loading.gif
new file mode 100644
index 0000000000000000000000000000000000000000..19afda1a39b4543b4745fe34a973988b77787f4d
Binary files /dev/null and b/interface/web/themes/default/icons/x16/loading.gif differ
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 1854b507d0d9f29fd509c4eb5d0d3e660381f97a..b012c068b6656e77f9e9dabdf3c4439cb2b9c314 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -60,6 +60,7 @@
 	<script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
     <script type="text/javascript" src="js/scrigo.js.php"></script>
     <script type="text/javascript" src="js/uni-form/uni-form.jquery.js"></script>
+	<script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
 	<script language="JavaScript" type="text/javascript">
 		var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
 		if(!is_chrome && getInternetExplorerVersion() > 8.0) {
@@ -81,6 +82,11 @@
 			jQuery('.subsectiontoggle').live("click", function(){
 				jQuery(this).children().toggleClass('showing').end().next().slideToggle();
 			});
+			
+			jQuery('#globalsearch').ispconfigSearch({
+				dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch'
+			});
+
 		});
 		
 		
@@ -109,6 +115,7 @@
                     <!-- end: skip link navigation -->
 			        <tmpl_if name="cpuser">
                     <span><a href="#logout" onclick="loadContent('login/logout.php');"><tmpl_var name="logout_txt"> <tmpl_var format="strtoupper" name="cpuser"></a><!-- | <a href="#" onclick="capp('help')">Help</a> | <a href="#">Imprint</a>--></span>
+					<input type="text" id="globalsearch" size="30" value="" />
 			        </tmpl_if>
                 </div>
                 <h1 id="ir-HeaderLogo" class="swap" style="background-image:url('{tmpl_var name='app_logo'}');"><span>ISPConfig 3</span></h1>
diff --git a/interface/web/vm/form/openvz_ip.tform.php b/interface/web/vm/form/openvz_ip.tform.php
index 78b9d944aa9577f33f877608123aa23b01c238ac..ca958b3f398c0ad7c05f80dc89be3a39462fe77c 100644
--- a/interface/web/vm/form/openvz_ip.tform.php
+++ b/interface/web/vm/form/openvz_ip.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -83,7 +88,8 @@ $form["tabs"]['main'] = array (
 			'width'		=> '15',
 			'maxlength'	=> '15',
 			'rows'		=> '',
-			'cols'		=> ''
+			'cols'		=> '',
+			'searchable' => 1
 		),
 		'vm_id' => array (
 			'datatype'	=> 'INTEGER',
diff --git a/interface/web/vm/form/openvz_ostemplate.tform.php b/interface/web/vm/form/openvz_ostemplate.tform.php
index 6b9be3f3e571c66091d31dd935c9647954fa0d5a..0224ffae8b8bd8dbac07b76606a5bbe4b3252dbd 100644
--- a/interface/web/vm/form/openvz_ostemplate.tform.php
+++ b/interface/web/vm/form/openvz_ostemplate.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -67,7 +72,8 @@ $form["tabs"]['main'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'template_file' => array (
 			'datatype'	=> 'VARCHAR',
@@ -78,7 +84,8 @@ $form["tabs"]['main'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 2
 		),
 		'server_id' => array (
 			'datatype'	=> 'INTEGER',
@@ -112,7 +119,8 @@ $form["tabs"]['main'] = array (
 			'width'		=> '',
 			'maxlength'	=> '',
 			'rows'		=> '10',
-			'cols'		=> '30'
+			'cols'		=> '30',
+			'searchable' => 2
 		),
 	##################################
 	# ENDE Datatable fields
diff --git a/interface/web/vm/form/openvz_template.tform.php b/interface/web/vm/form/openvz_template.tform.php
index 845d2bcfecc592b9f5c4e0f4bb1fd4c8e8aa1c09..39cd3ae7ab6f06232b674130555f23a4d9ba4710 100644
--- a/interface/web/vm/form/openvz_template.tform.php
+++ b/interface/web/vm/form/openvz_template.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -67,7 +72,8 @@ $form["tabs"]['main'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'diskspace' => array (
 			'datatype'	=> 'INTEGER',
@@ -169,7 +175,8 @@ $form["tabs"]['main'] = array (
 			'default'	=> '8.8.8.8 8.8.4.4',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 2
 		),
 		'active' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/vm/form/openvz_vm.tform.php b/interface/web/vm/form/openvz_vm.tform.php
index 3d75e8464b154c52b91c65188031b3550bab9172..ac7e8ef06887362914132a944682c78fe2aea079 100644
--- a/interface/web/vm/form/openvz_vm.tform.php
+++ b/interface/web/vm/form/openvz_vm.tform.php
@@ -29,6 +29,11 @@
 	Hint:
 	The ID field of the database table is not part of the datafield definition.
 	The ID field must be always auto incement (int or bigint).
+	
+	Search:
+	- searchable = 1 or searchable = 2 include the field in the search
+	- searchable = 1: this field will be the title of the search result
+	- searchable = 2: this field will be included in the description of the search result
 
 
 */
@@ -105,7 +110,8 @@ $form["tabs"]['main'] = array (
 										'keyfield'=> 'ip_address',
 										'valuefield'=> 'ip_address'
 									 ),
-			'value'		=> ''
+			'value'		=> '',
+			'searchable' => 2
 		),
 		'hostname' => array (
 			'datatype'	=> 'VARCHAR',
@@ -116,7 +122,8 @@ $form["tabs"]['main'] = array (
 			'default'	=> '',
 			'value'		=> '',
 			'width'		=> '30',
-			'maxlength'	=> '255'
+			'maxlength'	=> '255',
+			'searchable' => 1
 		),
 		'vm_password' => array (
 			'datatype'	=> 'VARCHAR',
@@ -158,7 +165,8 @@ $form["tabs"]['main'] = array (
 			'width'		=> '',
 			'maxlength'	=> '',
 			'rows'		=> '10',
-			'cols'		=> '30'
+			'cols'		=> '30',
+			'searchable' => 2
 		),
 	##################################
 	# ENDE Datatable fields