diff --git a/src/dlangide/ui/frame.d b/src/dlangide/ui/frame.d
index d2a9d8f..21a0e19 100644
--- a/src/dlangide/ui/frame.d
+++ b/src/dlangide/ui/frame.d
@@ -631,12 +631,18 @@ class IDEFrame : AppFrame {
                     Log.d("Opening Search Field");
                		import dlangide.ui.searchPanel;
                     int searchPanelIndex = _logPanel.getTabs.tabIndex("search");
+                    SearchWidget searchPanel = null;
                     if(searchPanelIndex == -1) {
-                        SearchWidget searchPanel = new SearchWidget("search", this);
-                  		_logPanel.getTabs.addTab( searchPanel, "Search"d, null, true);
+                        searchPanel = new SearchWidget("search", this);
+                        _logPanel.getTabs.addTab( searchPanel, "Search"d, null, true);
+                    }
+                    else {
+                        searchPanel = cast(SearchWidget) _logPanel.getTabs.tabBody(searchPanelIndex);
                     }
                     _logPanel.getTabs.selectTab("search");
-                    //TODO: Focus search field
+                    if(searchPanel !is null) { 
+                        searchPanel.focus();
+                    }
                     return true;
                 default:
                     return super.handleAction(a);
diff --git a/src/dlangide/ui/searchPanel.d b/src/dlangide/ui/searchPanel.d
index b2e9123..b778b9e 100644
--- a/src/dlangide/ui/searchPanel.d
+++ b/src/dlangide/ui/searchPanel.d
@@ -112,7 +112,7 @@ class SearchLogWidget : LogWidget {
 	}
     
 	override bool onMouseEvent(MouseEvent event) {
-        super.onMouseEvent(event);
+        bool res = super.onMouseEvent(event);
 		if (event.action == MouseAction.ButtonDown && event.button == MouseButton.Left) {
             int line = _caretPos.line;
             if (searchResultClickHandler.assigned) {
@@ -120,7 +120,18 @@ class SearchLogWidget : LogWidget {
                 return true;
             }
         }
-        return false;
+        return res;
+    }
+    
+    override bool onKeyEvent(KeyEvent event) {
+        if (event.action == KeyAction.KeyDown && event.keyCode == KeyCode.RETURN) {
+            int line = _caretPos.line;
+            if (searchResultClickHandler.assigned) {
+                searchResultClickHandler(line);
+                return true;
+            }
+        }
+        return super.onKeyEvent(event);
     }
 }
 
@@ -146,10 +157,17 @@ class SearchWidget : TabWidget {
 	protected IDEFrame _frame;
     protected SearchMatchList[] _matchedList;
 
+    //Sets focus on result;
+    void focus() {
+        _findText.setFocus();
+        _findText.handleAction(new Action(EditorActions.SelectAll));
+    }
     bool onFindButtonPressed(Widget source) {
         dstring txt = _findText.text;
-        if (txt.length > 0)
-		    findText(txt);
+        if (txt.length > 0) {
+            findText(txt);
+            _resultLog.setFocus();
+        }
 		return true;
     }
 
@@ -226,9 +244,9 @@ class SearchWidget : TabWidget {
         
         switch (_searchScope.text) {
             case "File":
-                auto currentFileItem = _frame._wsPanel.workspace.findSourceFileItem(_frame.currentEditor.filename);
-                if(currentFileItem !is null)
-                    taskPool.put(task(&searchInProject, currentFileItem, source));
+                SearchMatchList match = findMatches(_frame.currentEditor.filename, source);
+                if(match.matches.length > 0)
+                    _matchedList ~= match;
                 break;
             case "Project":
                foreach(Project project; _frame._wsPanel.workspace.projects) {