diff --git a/core/js/js.js b/core/js/js.js
index 99372c5f2418d5879e66ff544f8e97cb157881c2..a83d6abb6a51280a30b185abd5fec4abad147fd8 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -70,14 +70,18 @@ OC={
 	},
 	search:function(query){
 		if(query){
-			OC.addScript('search','result',function(){
-				OC.addStyle('search','results');
-				$.getJSON(OC.filePath('search','ajax','search.php')+'?query='+encodeURIComponent(query), OC.search.showResults);
+			OC.addStyle('search','results');
+			$.getJSON(OC.filePath('search','ajax','search.php')+'?query='+encodeURIComponent(query), function(results){
+				OC.search.lastResults=results;
+				OC.search.showResults(results);
 			});
 		}
 	}
 }
 OC.search.customResults={};
+OC.search.currentResult=-1;
+OC.search.lastQuery='';
+OC.search.lastResults={};
 OC.addStyle.loaded=[];
 OC.addScript.loaded=[];
 
@@ -133,15 +137,40 @@ $(document).ready(function(){
 			element.attr('src',src.substr(0,src.length-3)+'png');
 		});
 	};
-	$('#searchbox').keyup(function(){
-		var query=$('#searchbox').val();
-		if(query.length>2){
-			OC.search(query);
+	$('form.searchbox').submit(function(event){
+		event.preventDefault();
+	})
+	$('#searchbox').keyup(function(event){
+		if(event.keyCode==13){//enter
+			if(OC.search.currentResult>-1){
+				var result=$('#searchresults tr.result a')[OC.search.currentResult];
+				$(result).click();
+			}
+		}else if(event.keyCode==38){//up
+			if(OC.search.currentResult>0){
+				OC.search.currentResult--;
+				OC.search.renderCurrent();
+			}
+		}else if(event.keyCode==40){//down
+			if(OC.search.lastResults.length>OC.search.currentResult+1){
+				OC.search.currentResult++;
+				OC.search.renderCurrent();
+			}
+		}else if(event.keyCode==27){//esc
+			OC.search.hide();
 		}else{
-			if(OC.search.hide){
-				OC.search.hide();
+			var query=$('#searchbox').val();
+			if(OC.search.lastQuery!=query){
+				OC.search.lastQuery=query;
+				OC.search.currentResult=-1;
+				if(query.length>2){
+					OC.search(query);
+				}else{
+					if(OC.search.hide){
+						OC.search.hide();
+					}
+				}
 			}
 		}
 	});
-	$('#searchbox').click(function(){$('#searchbox').trigger('keyup')});
 });
diff --git a/core/templates/part.searchbox.php b/core/templates/part.searchbox.php
index ddf184ed5b684ff50d1ac0a72369570f44515f31..49b44c718ecce2241ff5590bc60b439511d19307 100644
--- a/core/templates/part.searchbox.php
+++ b/core/templates/part.searchbox.php
@@ -1,3 +1,3 @@
-<form class="searchbox" action="<?php echo $_['searchurl']?>" method="post">
+<form class="searchbox" action="#" method="post">
 	<input id='searchbox' type="search" name="query" value="<?php if(isset($_POST['query'])){echo $_POST['query'];};?>" class="prettybutton" />
 </form>
diff --git a/lib/base.php b/lib/base.php
index 2c29d9c571df5f6eb99e5fbcc090fe81acff0923..98c6fbb8e33b25724d6fa6379faa0ca1d0bda839 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -96,6 +96,7 @@ OC_Group::setBackend( OC_Config::getValue( "groupbackend", "database" ));
 OC_Util::addScript( "jquery-1.6.2.min" );
 OC_Util::addScript( "jquery-ui-1.8.14.custom.min" );
 OC_Util::addScript( "js" );
+OC_Util::addScript('search','result');
 OC_Util::addStyle( "jquery-ui-1.8.14.custom" );
 OC_Util::addStyle( "styles" );
 
diff --git a/search/css/results.css b/search/css/results.css
index 61b7cf541c518aa5195f6bc2db3be290f4dcc336..e61bf419b355a622e5db4931917cf754dfa2706e 100644
--- a/search/css/results.css
+++ b/search/css/results.css
@@ -6,3 +6,4 @@
 #searchresults td.result{width:30em;}
 #searchresults td.result *{cursor:pointer}
 #searchresults td.type{width:7em;text-align:right; border-right:1px solid #aaa;border-bottom:none}
+#searchresults tr.current{background-color:#ddd}
diff --git a/search/js/result.js b/search/js/result.js
index 5ccc42252bf70473f012ad2af403fea107f3f4ae..1087f9684b29663cb91973ad28a19a701cbdacdc 100644
--- a/search/js/result.js
+++ b/search/js/result.js
@@ -30,12 +30,14 @@ OC.search.showResults=function(results){
 			$(window).click(function(event){
 				OC.search.hide();
 			});
+			OC.search.lastResults=results;
 			OC.search.showResults(results);
 		});
 	}else{
 		var types=OC.search.catagorizeResults(results);
 		$('#searchresults').show();
 		$('#searchresults tr.result').remove();
+		var index=0;
 		for(var name in types){
 			var type=types[name];
 			if(type.length>0){
@@ -46,6 +48,8 @@ OC.search.showResults=function(results){
 				row.find('td.result a').attr('href',type[0].link);
 				row.find('td.result div.name').text(type[0].name);
 				row.find('td.result div.text').text(type[0].text);
+				row.data('index',index);
+				index++;
 				if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here
 					OC.search.customResults[name](row,type[0]);
 				}
@@ -57,6 +61,8 @@ OC.search.showResults=function(results){
 					row.find('td.result a').attr('href',type[i].link);
 					row.find('td.result div.name').text(type[i].name);
 					row.find('td.result div.text').text(type[i].text);
+					row.data('index',index);
+					index++;
 					if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here
 						OC.search.customResults[name](row,type[i]);
 					}
@@ -67,3 +73,11 @@ OC.search.showResults=function(results){
 	}
 }
 OC.search.showResults.loaded=false;
+
+OC.search.renderCurrent=function(){
+	if($('#searchresults tr.result')[OC.search.currentResult]){
+		var result=$('#searchresults tr.result')[OC.search.currentResult];
+		$('#searchresults tr.result').removeClass('current');
+		$(result).addClass('current');
+	}
+}