Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 10634)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 10646)
@@ -26,4 +26,6 @@
 from datetime import datetime, timedelta
 from urllib import urlencode
+from hurry.query import Eq, Text
+from hurry.query.query import Query
 from zope import schema
 from zope.i18n import translate
@@ -72,4 +74,5 @@
 
 from waeup.kofa.students.export import EXPORTER_NAMES as STUDENT_EXPORTERS
+from waeup.kofa.students.catalog import StudentQueryResultItem
 
 FORBIDDEN_CHARACTERS = (160,)
@@ -1850,4 +1853,51 @@
         return del_local_roles(self,3,**data)
 
+class FindStudentsPage(KofaPage):
+    """Search students in faculty.
+    """
+    grok.context(IFaculty)
+    grok.name('find_students')
+    grok.require('waeup.showStudents')
+    grok.template('findstudentspage')
+    label = _('Find students')
+    search_button = _('Find student')
+    pnav = 1
+
+    def _find_students(self,query=None, searchtype=None, view=None):
+        hitlist = []
+        if searchtype in ('fullname',):
+            results = Query().searchResults(
+                Text(('students_catalog', searchtype), query) &
+                Eq(('students_catalog', 'faccode'), self.context.code)
+                )
+        else:
+            results = Query().searchResults(
+                Eq(('students_catalog', searchtype), query) &
+                Eq(('students_catalog', 'faccode'), self.context.code)
+                )
+        for result in results:
+            hitlist.append(StudentQueryResultItem(result, view=view))
+        return hitlist
+
+    def update(self, *args, **kw):
+        datatable.need()
+        form = self.request.form
+        self.hitlist = []
+        if 'searchterm' in form and form['searchterm']:
+            self.searchterm = form['searchterm']
+            self.searchtype = form['searchtype']
+        elif 'old_searchterm' in form:
+            self.searchterm = form['old_searchterm']
+            self.searchtype = form['old_searchtype']
+        else:
+            if 'search' in form:
+                self.flash(_('Empty search string'))
+            return
+        self.hitlist = self._find_students(query=self.searchterm,
+            searchtype=self.searchtype, view=self)
+        if not self.hitlist:
+            self.flash(_('No student found.'))
+        return
+
 class DepartmentAddFormPage(KofaAddFormPage):
     """Add a department to a faculty.
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/findstudentspage.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/findstudentspage.pt	(revision 10646)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/findstudentspage.pt	(revision 10646)
@@ -0,0 +1,50 @@
+<form method="POST" i18n:domain="waeup.kofa">
+<br />
+  <input class="btn primary" type="submit" name="search"
+    tal:attributes="value view/search_button" />
+
+  <select name="searchtype">
+    <option i18n:translate="" value="student_id">with id</option>
+    <option i18n:translate="" value="fullname">with name</option>
+    <option i18n:translate="" value="reg_number">with registration number</option>
+    <option i18n:translate="" value="matric_number">with matriculation number</option>
+  </select>
+
+  <input type="text" name="searchterm" />
+
+  <p>&nbsp;</p>
+  <div tal:condition="view/hitlist">
+    <h3 i18n:translate="">Search Results</h3>
+    <input type="hidden" name="old_searchterm"
+         tal:attributes="value view/searchterm" />
+    <input type="hidden" name="old_searchtype"
+         tal:attributes="value view/searchtype" />
+    <table class="display dataTable">
+      <thead>
+      <tr>
+        <th i18n:translate="">Student Id</th>
+        <th i18n:translate="">Reg. Number</th>
+        <th i18n:translate="">Matric. Number</th>
+        <th i18n:translate="">State</th>
+        <th i18n:translate="">Full Name</th>
+      </tr>
+      </thead>
+      <tbody>
+      <tr tal:repeat="item view/hitlist" class="gradeC">
+        <td> <a tal:attributes="href item/url">
+          <span tal:content="item/student_id">A123456</span></a>
+        </td>
+        <td class="center"> <a tal:attributes="href item/url">
+          <span tal:content="item/reg_number">9999999</span></a>
+        </td>
+        <td class="center"> <a tal:attributes="href item/url">
+          <span tal:content="item/matric_number">9999999</span></a>
+        </td>
+        <td tal:content="item/state">admitted</td>
+        <td tal:content="item/display_fullname">Bob</td>
+      </tr>
+      </tbody>
+    </table>
+    <br />
+  </div>
+</form>
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 10634)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 10646)
@@ -446,4 +446,13 @@
     text = _('Manage faculty')
 
+class StudentSearchActionButton(ManageActionButton):
+    grok.order(2)
+    grok.context(IFaculty)
+    grok.view(FacultyPage)
+    grok.require('waeup.showStudents')
+    text = _('Find students')
+    icon = 'actionicon_search.png'
+    target = 'find_students'
+
 class ManageDepartmentActionButton(ManageActionButton):
     """ 'Manage settings' button for departments.
