diff --git a/application/modules/bulletin/models/UtilityModel.php b/application/modules/bulletin/models/UtilityModel.php
index 22377a1288c13f51458c660a0a8497447fafd4f6..ee74b4b3e4aadd634f5ce733c27c666966be9143 100644
--- a/application/modules/bulletin/models/UtilityModel.php
+++ b/application/modules/bulletin/models/UtilityModel.php
@@ -31,6 +31,19 @@ class Bulletin_UtilityModel implements Creq_Model_UtilityInterface
         return $requestColleges;
     }
 
+    static public function getMajorsForRequests($requests)
+    {
+        $requestMajors = array();
+
+        $requestSections = Bulletin_SectionModel::findWithRequest($requests);
+        foreach ($requests as $request) {
+            $section = $requestSections[$request->getId()];
+            $requestMajors[$request->getId()] = $section->getMajor();
+        }
+
+        return $requestMajors;
+    }
+
     static public function getTextBetweenTokens($text, $start_token, $end_token)
     {
         $content_start = strpos($text, $start_token);
diff --git a/application/modules/courses/models/UtilityModel.php b/application/modules/courses/models/UtilityModel.php
index 83f4615ac667bd7b61b5914bd22cd22b56a87bff..19d40126f0355947e07938630ae136e9574c1e29 100644
--- a/application/modules/courses/models/UtilityModel.php
+++ b/application/modules/courses/models/UtilityModel.php
@@ -40,4 +40,14 @@ class Courses_UtilityModel implements Creq_Model_UtilityInterface
 
         return $requestColleges;
     }
+
+    static public function getMajorsForRequests($requests)
+    {
+        $requestMajors = array();
+        foreach ($requests as $request) {
+            $requestMajors[$request->getId()] = NULL;
+        }
+
+        return $requestMajors;
+    }
 }
diff --git a/application/modules/courses/views/scripts/approval-chain-manager/edit-action/collegeRouter.phtml b/application/modules/courses/views/scripts/approval-chain-manager/edit-action/collegeRouter.phtml
deleted file mode 100644
index f0bcdf3e9a3b1a6740d2d784d65d6289c36759c7..0000000000000000000000000000000000000000
--- a/application/modules/courses/views/scripts/approval-chain-manager/edit-action/collegeRouter.phtml
+++ /dev/null
@@ -1 +0,0 @@
-<!-- No options for this action -->
\ No newline at end of file
diff --git a/application/modules/fouryearplans/models/FourYearPlanModel.php b/application/modules/fouryearplans/models/FourYearPlanModel.php
index b734a92819d547f3261f365af3bd8b01c0506bb2..8fe540e116ac3214474d13cea8510abd94a8c0e9 100644
--- a/application/modules/fouryearplans/models/FourYearPlanModel.php
+++ b/application/modules/fouryearplans/models/FourYearPlanModel.php
@@ -913,33 +913,82 @@ class FourYearPlans_FourYearPlanModel extends Unl_Model
         }
     }
 
+    static protected $_majorCollegeMap = array();
+    static protected function _getMajorCollegeMap()
+    {
+        if (!self::$_majorCollegeMap) {
+            $db = Zend_Registry::get('db');
+            $select = new Zend_Db_Select($db);
+
+            $select->from(array('c' => 'creqColleges'), array(
+                'collegeId',
+                'college'     => 'name',
+                'collegeLong' => 'description'
+            ));
+            $select->join(array('m' => 'creqMajors'), 'c.collegeId = m.college', array(
+                'majorId',
+                'major' => 'name'
+            ));
+
+            foreach ($select->query()->fetchAll() as $row) {
+                self::$_majorCollegeMap[$row['majorId']] = $row;
+            }
+        }
+        return self::$_majorCollegeMap;
+    }
+
+    public function getCollege()
+    {
+        $majorCollegeMap = self::_getMajorCollegeMap();
+        if (!isset($majorCollegeMap[$this->_data['majorId']])) {
+            return NULL;
+        }
+
+        return $majorCollegeMap[$this->_data['majorId']]['college'];
+    }
+
+    public function getCollegeLong()
+    {
+        $majorCollegeMap = self::_getMajorCollegeMap();
+        if (!isset($majorCollegeMap[$this->_data['majorId']])) {
+            return NULL;
+        }
+
+        return $majorCollegeMap[$this->_data['majorId']]['collegeLong'];
+    }
+
     public function getMajor()
     {
         if (!$this->_data['majorId'] && $this->_data['major']) {
             return $this->_data['major'];
         }
 
-        $majors = Bulletin_UtilityModel::getAllMajors();
-        if (isset($majors[$this->_data['majorId']])) {
-            return $majors[$this->_data['majorId']];
+        $majorCollegeMap = self::_getMajorCollegeMap();
+        if (!isset($majorCollegeMap[$this->_data['majorId']])) {
+            return NULL;
         }
 
-        return NULL;
+        return $majorCollegeMap[$this->_data['majorId']]['major'];
     }
 
     public function setMajorId($majorId)
     {
-        $majors = Bulletin_UtilityModel::getAllMajors();
-        if (!isset($majors[$majorId])) {
+        $majorCollegeMap = self::_getMajorCollegeMap();
+        if (!isset($majorCollegeMap[$majorId])) {
             throw new Exception('Major not found.');
         }
+
         $this->_data['majorId'] = $majorId;
     }
 
     public function setMajor($major)
     {
-        $majors = Bulletin_UtilityModel::getAllMajors();
-        $majorId = array_search($major, $majors);
+        $majorId = NULL;
+        foreach (self::_getMajorCollegeMap() as $item) {
+            if ($item['major'] == $major) {
+                $majorId = $item['majorId'];
+            }
+        }
 
         if (!$majorId) {
             throw new Exception ('The major "' . $major . '" does not exist.');
diff --git a/application/modules/fouryearplans/models/UtilityModel.php b/application/modules/fouryearplans/models/UtilityModel.php
index 5d681f758f4b37bd63db3e7d48043f4b6fbcf7f6..1ae3165d97ffbafee72376232fcbe4a61ed8c9a0 100644
--- a/application/modules/fouryearplans/models/UtilityModel.php
+++ b/application/modules/fouryearplans/models/UtilityModel.php
@@ -33,4 +33,21 @@ class FourYearPlans_UtilityModel implements Creq_Model_UtilityInterface
 
         return $requestColleges;
     }
+
+    static public function getMajorsForRequests($requests)
+    {
+        $requestMajors = array();
+
+        $requestParentFyps = FourYearPlans_FourYearPlanModel::findParentOfRequest($requests);
+        $requestCurrentFyps = FourYearPlans_FourYearPlanModel::findLatestOfRequest($requests);
+        foreach ($requests as $request) {
+            $fyp = $requestParentFyps[$request->getId()];
+            if (!$fyp) {
+                $fyp = $requestCurrentFyps[$request->getId()];
+            }
+            $requestMajors[$request->getId()] = $fyp->getMajor();
+        }
+
+        return $requestMajors;
+    }
 }
diff --git a/application/modules/courses/models/ApprovalActionCollegeRouterModel.php b/application/modules/requests/models/ApprovalActionMajorRouterModel.php
similarity index 76%
rename from application/modules/courses/models/ApprovalActionCollegeRouterModel.php
rename to application/modules/requests/models/ApprovalActionMajorRouterModel.php
index 5f3647e80acfb46d8b086bba7b1ead1a72256df4..d88cecb466009535bd6bd625bd7fb91a790bfc59 100644
--- a/application/modules/courses/models/ApprovalActionCollegeRouterModel.php
+++ b/application/modules/requests/models/ApprovalActionMajorRouterModel.php
@@ -1,8 +1,8 @@
 <?php
 
-class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionModel
+class Requests_ApprovalActionMajorRouterModel extends Requests_ApprovalActionModel
 {
-    protected $_colleges = array();
+    protected $_majors = array();
 
     public static function find($id)
     {
@@ -10,7 +10,7 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo
 
         $select = new Zend_Db_Select($db);
         $select->from(array('a' => 'creqApprovalActions'));
-        $select->join(array('d' => 'creqApprovalActionsCollegeRouter'), 'a.approvalActionId = d.approvalActionId');
+        $select->join(array('d' => 'creqApprovalActionsMajorRouter'), 'a.approvalActionId = d.approvalActionId');
         if (Unl_Util::isArray($id)) {
             $select->where('a.approvalActionId IN(?)', $id);
         } else {
@@ -32,7 +32,7 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo
         }
 
     }
-    
+
     static public function fetchNew()
     {
         $data = array(
@@ -43,12 +43,12 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo
             'participatingRoles'  => array(),
             'editingRoles'        => array()
         );
-        
+
         $new = new self($data);
         $new->_setClean();
-        
-        $new->_data['className'] = 'ApprovalActionCollegeRouter';
-        
+
+        $new->_data['className'] = 'ApprovalActionMajorRouter';
+
         return $new;
     }
 
@@ -91,7 +91,7 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo
     {
         $db = Zend_Registry::get('db');
 
-        $sql = 'INSERT INTO creqApprovalActionsCollegeRouter (approvalActionId) VALUES ';
+        $sql = 'INSERT INTO creqApprovalActionsMajorRouter (approvalActionId) VALUES ';
         $sqlParts = array();
         foreach ($models as $model) {
             $sqlParts[] = $db->quoteInto('(?) ', $model->_data['approvalActionId']);
@@ -102,16 +102,17 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo
 
     public function consider($requests)
     {
-        $requestParentCourses = Courses_CourseModel::findParentOfRequest($requests);
-        $requestCurrentCourses = Courses_CourseModel::findLatestOfRequest($requests);
+        $modulesRequests = array();
         foreach ($requests as $request) {
-            $course = $requestParentCourses[$request->getId()];
-            if (!$course) {
-                $course = $requestCurrentCourses[$request->getId()];
+            $modulesRequests[$request->getModule()][$request->getId()] = $request;
+        }
+        foreach ($modulesRequests as $module => $moduleRequests) {
+            $model = ucfirst($module) . '_UtilityModel';
+            foreach ($model::getMajorsForRequests($moduleRequests) as $requestId => $major) {
+                $moduleRequests[$requestId]->setState($major);
             }
-            $college = $course->getCollege();
-            $request->setState($college);
         }
+
         Requests_RequestModel::save($requests);
         Requests_ApprovalChainModel::advance($requests);
         return $requests;
@@ -129,11 +130,11 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo
 
     public function getResultStatusStrings()
     {
-    	$colleges = array();
-    	foreach (Courses_CourseModel::getColleges() as $college) {
-    		$colleges[$college] = $college;
-    	}
-    	
-    	return $colleges;
+        $majors = array();
+        foreach (Bulletin_UtilityModel::getAllMajors() as $major) {
+            $majors[$major] = $major;
+        }
+
+        return $majors;
     }
 }
diff --git a/application/modules/requests/views/scripts/approval-chain-manager/edit-action/majorRouter.phtml b/application/modules/requests/views/scripts/approval-chain-manager/edit-action/majorRouter.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/library/Creq/Model/UtilityInterface.php b/library/Creq/Model/UtilityInterface.php
index ebda84a3b7ab6e12fa0d618f11b7aa69b4892e3c..fbb67be01ac1fd4455bbd73d9579a771538c09e0 100644
--- a/library/Creq/Model/UtilityInterface.php
+++ b/library/Creq/Model/UtilityInterface.php
@@ -27,4 +27,14 @@ interface Creq_Model_UtilityInterface
      * if not applicable.
      */
     static public function getCollegesForRequests($requests);
+
+    /**
+     * @param $requests
+     * @return array
+     *
+     * Given an array of requests, return an array where each key is the requestId
+     * and the value is the name of the major associated with the request, or NULL
+     * if not applicable.
+     */
+    static public function getMajorsForRequests($requests);
 }