 pgadmin/ctl/ctlSQLBox.cpp            | 5 ++++-
 pgadmin/dlg/dlgFindReplace.cpp       | 5 ++++-
 pgadmin/include/dlg/dlgFindReplace.h | 2 +-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/pgadmin/ctl/ctlSQLBox.cpp b/pgadmin/ctl/ctlSQLBox.cpp
index cf33207..492aff7 100644
--- a/pgadmin/ctl/ctlSQLBox.cpp
+++ b/pgadmin/ctl/ctlSQLBox.cpp
@@ -442,7 +442,10 @@ void ctlSQLBox::OnKeyDown(wxKeyEvent &event)
 	}
 	else if (m_dlgFindReplace && event.GetKeyCode() == WXK_F3)
 	{
-		m_dlgFindReplace->FindNext();
+		if (event.GetModifiers() == wxMOD_SHIFT)
+			m_dlgFindReplace->FindNext(false);
+		else
+			m_dlgFindReplace->FindNext(true);
 	}
 	else
 		event.Skip();
diff --git a/pgadmin/dlg/dlgFindReplace.cpp b/pgadmin/dlg/dlgFindReplace.cpp
index d8aa3fd..bbeb533 100644
--- a/pgadmin/dlg/dlgFindReplace.cpp
+++ b/pgadmin/dlg/dlgFindReplace.cpp
@@ -279,10 +279,13 @@ void dlgFindReplace::OnReplaceAll(wxCommandEvent &ev)
 	sqlbox->ReplaceAll(txtFind->GetValue(), txtReplace->GetValue(), wholeWord, matchCase, useRegexps);
 }
 
-void dlgFindReplace::FindNext()
+void dlgFindReplace::FindNext(bool directionForward)
 {
 	if (btnFind->IsEnabled() && !txtFind->IsEmpty())
 	{
+		rdDirectionForward->SetValue(directionForward);
+		rdDirectionBackward->SetValue(!directionForward);
+
 		wxCommandEvent ev;
 		OnFind(ev);
 	}
diff --git a/pgadmin/include/dlg/dlgFindReplace.h b/pgadmin/include/dlg/dlgFindReplace.h
index 9595f05..6d1b7a0 100644
--- a/pgadmin/include/dlg/dlgFindReplace.h
+++ b/pgadmin/include/dlg/dlgFindReplace.h
@@ -23,7 +23,7 @@ public:
 	dlgFindReplace(ctlSQLBox *parent);
 	~dlgFindReplace();
 	void FocusSearch();
-	void FindNext();
+	void FindNext(bool directionForward = true);
 	void SetFindString(const wxString &val);
 
 private:
