diff --git a/scripts/build_course_db.php b/scripts/build_course_db.php
index 1071fcfd8ce60f4696dc701c81643be84d6a7798..491e85c00839a0e21248810495af6309095b3e0b 100755
--- a/scripts/build_course_db.php
+++ b/scripts/build_course_db.php
@@ -65,9 +65,17 @@ $edition = new Controller;
     $db->exec('ALTER TABLE `crosslistings` ADD INDEX ( `subjectArea` )  ');
     $db->exec('ALTER TABLE `crosslistings` ADD INDEX ( `courseNumber` )  ');
     
+    $db->exec('CREATE TABLE IF NOT EXISTS prereqs (
+    course_id INT UNSIGNED NOT NULL ,
+    subjectArea VARCHAR( 4 ) NOT NULL ,
+    courseNumber VARCHAR( 4 ) NOT NULL
+    );');
+    
+    $db->exec('CREATE INDEX IF NOT EXISTS IX_prereqs_subjectArea_courseNumber ON prereqs ( subjectArea, courseNumber );');
     
     $course_stmt = $db->prepare('INSERT INTO courses (id,subjectArea,courseNumber,title,slo,prerequisite,credits,xml) VALUES (?,?,?,?,?,?,?,?);');
     $cross_stmt =  $db->prepare('INSERT INTO crosslistings (course_id, subjectArea, courseNumber) VALUES (?,?,?);');
+    $prereq_stmt = $db->prepare('INSERT INTO prereqs (course_id, subjectArea, courseNumber) VALUES (?,?,?);');
     
     foreach ($courses as $course) {
         $id++;
@@ -90,6 +98,14 @@ $edition = new Controller;
         }
     
         $values[] = $course->prerequisite;
+        $prereqs = UNL_UndergraduateBulletin_EPUB_Utilities::findCourses($course->prerequisite);
+        foreach ($prereqs as $subj => $courseNums) {
+            foreach ($courseNums as $num) {
+                $prereq_stmt->execute(array($id, $subj, $num));
+            }
+        }
+        unset($subj, $courseNums, $num, $prereqs);
+        
     
         $credits = $course->getCredits();
         if (isset($credits['Single Value'])) {
diff --git a/src/UNL/Catalog/CourseSearch/DBSearcher.php b/src/UNL/Catalog/CourseSearch/DBSearcher.php
index ba3f173b9598997459f19cd16574997f37655846..31439368e72a7041caadd870a4478f9737e89e51 100644
--- a/src/UNL/Catalog/CourseSearch/DBSearcher.php
+++ b/src/UNL/Catalog/CourseSearch/DBSearcher.php
@@ -107,7 +107,14 @@ class DBSearcher extends \UNL_Services_CourseApproval_SearchInterface
 
     function prerequisiteQuery($prereq)
     {
-        return 'courses.prerequisite LIKE '.self::getDB()->quote('%'.$prereq.'%');
+        $query = explode(' ', $prereq, 2);
+        $sql = '
+SELECT DISTINCT courses.id, courses.xml
+FROM courses 
+INNER JOIN prereqs ON prereqs.course_id = courses.id
+WHERE prereqs.subjectArea = ' . self::getDB()->quote($query[0]) . ' AND prereqs.courseNumber = ' . self::getDB()->quote($query[1] ?: '');
+        
+        return new Select($sql);
     }
 
     function intersectQuery($query1, $query2)
@@ -127,14 +134,18 @@ class DBSearcher extends \UNL_Services_CourseApproval_SearchInterface
 
     function getQueryResult($query, $offset = 0, $limit = -1)
     {
-        $query =  'SELECT DISTINCT courses.id, courses.xml 
-                   FROM courses INNER JOIN crosslistings ON courses.id=crosslistings.course_id
-                   WHERE (
-                          LENGTH(crosslistings.courseNumber) >= 3
-                          AND crosslistings.courseNumber < "500"
-                          OR LENGTH(crosslistings.courseNumber) < 3
-                         )
-                         AND (' . $query . ');';
+        if ($query instanceof Select) {
+            $query = $query->__toString();
+        } else {
+            $query =  'SELECT DISTINCT courses.id, courses.xml 
+                       FROM courses INNER JOIN crosslistings ON courses.id=crosslistings.course_id
+                       WHERE (
+                              LENGTH(crosslistings.courseNumber) >= 3
+                              AND crosslistings.courseNumber < "500"
+                              OR LENGTH(crosslistings.courseNumber) < 3
+                             )
+                             AND (' . $query . ');';
+        }
         return new DBSearchResults($query, $offset, $limit);
     }
 }
\ No newline at end of file
diff --git a/src/UNL/Catalog/CourseSearch/Select.php b/src/UNL/Catalog/CourseSearch/Select.php
new file mode 100644
index 0000000000000000000000000000000000000000..13554c7873a9862c8ceada4b8f2885fb27ae1a92
--- /dev/null
+++ b/src/UNL/Catalog/CourseSearch/Select.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace UNL\Catalog\CourseSearch;
+
+class Select
+{
+    protected $sql;
+    
+    public function __construct($sql)
+    {
+        $this->sql = $sql;
+    }
+    
+    public function __toString()
+    {
+        return $this->sql;
+    }
+}