Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 6446)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/pages.py	(revision 6447)
@@ -31,5 +31,4 @@
     ICertificateAdd, ICertificateCourse, ICertificateCourseAdd)
 from waeup.sirp.browser.resources import warning, datepicker, tabs, datatable
-from waeup.sirp.catalog import search_context
 from waeup.sirp.interfaces import(
     IWAeUPObject, IUserContainer, IUserAccount, IDataCenter,
@@ -332,28 +331,18 @@
 # Search pages...
 #
-class SearchStudentPage(WAeUPPage):
-    grok.context(IUniversity)
-    grok.name('searchstudent')
-    grok.template('searchstudentpage')
-    grok.require('waeup.viewStudents')
-    title = u"Student Search"
-    pnav = 2
-
-    def update(self, query=None):
-        self.search_result = []
-        if query is not None:
-            self.search_result = search_context(query)
-            print "RESULT: ", list(self.search_result)
-
 
 class SearchPage(WAeUPPage):
-    grok.context(IUniversity)
+    """General search page for the academics section.
+    """
+    grok.context(IFacultyContainer)
     grok.name('search')
     grok.template('searchpage')
     grok.require('waeup.manageUniversity')
-    title = u"Site Search"
-    pnav = 2
+    title = u"Academics"
+    label = u"Search Academic Section"
+    pnav = 1
 
     def update(self, *args, **kw):
+        datatable.need()
         form = self.request.form
         self.hitlist = []
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/static/waeup-base.css
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/static/waeup-base.css	(revision 6446)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/static/waeup-base.css	(revision 6447)
@@ -52,4 +52,8 @@
 }
 
+.block .bd {
+    padding-bottom: 3em;
+}
+
 /* Define different styles for headlines in rendered restructured text */
 
@@ -91,4 +95,12 @@
 .dataTables_wrapper {
   min-height: 100px;
+}
+
+.dataTables_info {
+  padding-top: 10px;
+}
+
+.dataTables_paginate {
+  padding-top: 10px;
 }
 
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/searchpage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/searchpage.pt	(revision 6446)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/templates/searchpage.pt	(revision 6447)
@@ -1,17 +1,33 @@
-<h3>Search the site</h3>
+<h2 i18n:translate="" tal:condition="view/label" tal:content="view/label">Label</h2>
 <form method="post">
   <input type="text" name="query"
 	 tal:attributes="value view/query" />
-    <input type="submit" name="SUBMIT" value="search..." />
+    <input type="submit" name="SUBMIT" value="Search" />
 </form>
-<div tal:condition="view/hitlist">
-  <h4>Results (<span tal:replace="python: len(view.hitlist)" />):</h4>
-  <div tal:repeat="item view/hitlist">
-    <a href=""
-       tal:attributes="href item/url"
-       tal:content="item/title">Search Item Title</a>
-    <div tal:content="item/description">
-      Longer description of item...
-    </div>
-  </div>
-</div>
+<br />
+<span tal:condition="view/hitlist">
+    <h3>Results:</h3>
+    <table class="display dataTable">
+        <thead>
+            <tr>
+                <th>Code</th>
+                <th>Title</th>
+                <th>Type</th>
+            </tr>
+        </thead>
+        <tbody>
+            <tr tal:repeat="item view/hitlist"  class="gradeB">
+            <td>
+                <a href="" tal:attributes="href item/url"
+                           tal:content="item/code">Code</a>
+            </td>
+            <td tal:content="item/title">
+                Title
+            </td>
+            <td tal:content="item/type">
+                Type
+            </td>
+            </tr>
+        </tbody>
+    </table>
+</span>
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/test_permissions.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/test_permissions.py	(revision 6446)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/test_permissions.py	(revision 6447)
@@ -20,5 +20,5 @@
 manager_pages = [
     # The pages that should only be accessible by manager...
-    '/@@manage', '/@@administration', '/@@searchstudent', '/@@search',
+    '/@@manage', '/@@administration', '/faculties/@@search',
     '/users/@@index', '/users/@@add', '/users/alice/@@index',
     '/datacenter/@@index', '/datacenter/@@upload', '/datacenter/@@import1',
Index: main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py	(revision 6446)
+++ main/waeup.sirp/trunk/src/waeup/sirp/browser/viewlets.py	(revision 6447)
@@ -346,4 +346,13 @@
     grok.view(FacultyContainerPage)
     text = 'Manage academic section'
+
+class SearchFacultyContainerActionButton(ManageActionButton):
+    """ 'Manage settings' button for faculties.
+    """
+    grok.context(IFacultyContainer)
+    grok.view(FacultyContainerPage)
+    text = 'Search academic section'
+    icon = 'actionicon_search.png'
+    target = '@@search'
     
 class ManageFacultyActionButton(ManageActionButton):
Index: main/waeup.sirp/trunk/src/waeup/sirp/catalog.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/catalog.py	(revision 6446)
+++ main/waeup.sirp/trunk/src/waeup/sirp/catalog.py	(revision 6447)
@@ -12,6 +12,6 @@
 from waeup.sirp.app import University
 from waeup.sirp.interfaces import IQueryResultItem
-from waeup.sirp.student.interfaces import IStudent
 
+# not yet used
 class WAeUPQuery(Query):
     """A hurry.query-like query that supports also ``apply``.
@@ -35,11 +35,5 @@
 grok.global_utility(WAeUPQuery)
 
-class StudentIndexes(grok.Indexes):
-    grok.site(University)
-    grok.name('students_catalog')
-    grok.context(IStudent)
-
-    name = grok.index.Field(attribute='name')
-
+# not yet used
 class QueryResultItem(object):
     grok.implements(IQueryResultItem)
@@ -53,8 +47,2 @@
         self.title = context.title
         self.description = ''
-
-def search_context(query):
-    result = Query().searchResults(
-        Eq(('students_catalog', 'name'), query)
-        )
-    return result
Index: main/waeup.sirp/trunk/src/waeup/sirp/university/catalog.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/university/catalog.py	(revision 6446)
+++ main/waeup.sirp/trunk/src/waeup/sirp/university/catalog.py	(revision 6447)
@@ -2,17 +2,18 @@
 """
 import grok
-from hurry.query import Eq
+from hurry.query import Eq, Text
+from hurry.query.query import Query
 from zope.catalog.interfaces import ICatalog
 from zope.component import getUtility
 from zope.component.interfaces import ComponentLookupError
+from zope.index.text.parsetree import ParseError
 from zope.intid import IIntIds
-from waeup.sirp.catalog import QueryResultItem
+#from waeup.sirp.catalog import QueryResultItem
 from waeup.sirp.index import UniqueField
-from waeup.sirp.interfaces import IUniversity
+from waeup.sirp.interfaces import IUniversity, IQueryResultItem
 from waeup.sirp.university.interfaces import (
     ICourse, ICertificateCourse, IDepartment,
     ICertificate,
     )
-
 
 class CourseIndexes(grok.Indexes):
@@ -92,28 +93,46 @@
     return
 
-class CourseQueryResultItem(QueryResultItem):
+class CoursesQueryResultItem(object):
+    grok.implements(IQueryResultItem)
+
     def __init__(self, context, view):
         self.context = context
         self.url = view.url(context)
-        self.title = "COURSE: " + context.title
-        self.description = 'code: %s' % context.code
+        self.title = context.title
+        self.code = context.code
+        self.type = 'Course'
+
+class CertificateCoursesQueryResultItem(object):
+    grok.implements(IQueryResultItem)
+
+    def __init__(self, context, view):
+        self.context = context
+        self.url = view.url(context)
+        self.title = context.course.title
+        self.code = context.getCourseCode
+        self.type = 'Course Referrer'
 
 def search(query=None, view=None):
     if not query:
-        return []
-    cat = getUtility(ICatalog, name='courses_catalog')
-    results = list(cat.searchResults(code=(query, query)))
+        view.flash('Empty search string.')
+        return
 
     hitlist = []
-    results = Query().searchResults(
-        Eq(('courses_catalog', 'code'), query))
-    for result in results:
-        hitlist.append(CourseQueryResultItem(result, view=view))
+    try:
+        results = Query().searchResults(
+            Eq(('courses_catalog', 'code'), query))
+        for result in results:
+            hitlist.append(CoursesQueryResultItem(result, view=view))
+        results = Query().searchResults(
+            Text(('courses_catalog', 'title'), query))
+        for result in results:
+            hitlist.append(CoursesQueryResultItem(result, view=view))
 
-    results = Query().searchResults(
-        Text(('courses_catalog', 'title'), query))
-
-    for result in results:
-        hitlist.append(CourseQueryResultItem(result, view=view))
-
+        results = Query().searchResults(
+            Eq(('certcourses_catalog', 'course_code'), query))
+        for result in results:
+            hitlist.append(CertificateCoursesQueryResultItem(result, view=view))
+    except ParseError:
+        view.flash('Search string not allowed.')
+        return
     return hitlist
