diff --git a/application/controllers/CourseadminController.php b/application/controllers/CourseadminController.php
index 1a069a8318415d4a6592f8f05905540de9547526..687e0de54db498151572c91f488870fe4af3b2b4 100644
--- a/application/controllers/CourseadminController.php
+++ b/application/controllers/CourseadminController.php
@@ -85,6 +85,7 @@ class CourseAdminController extends Nmc_Controller_Action
         $out->assign('parentGeneration', $course->getParentGeneration());
         $out->assign('childGenerations', $course->getChildGenerations());
         $out->assign('uriParams', $in->getParams());
+        $out->assign('essentialStudiesAreas', $course->getEssentialStudiesAreas());
         $out->tagline = 'Edit Course';
         echo $out->render('unlModernWrapper.xhtml');
     }
@@ -141,7 +142,22 @@ class CourseAdminController extends Nmc_Controller_Action
                     $course->gradTieIn->$key2 = $val2;
                     //echo '$course->gradTieIn->' . $key2 . ' = ' . $val2 . "\n";
                 }
-            } else if(is_array($val)) {
+            } else if ($key == 'essentialStudies') {
+                //
+                foreach ($val as $collegeName => $areas) {
+                    $college = Colleges::getInstance()->fetchWithName($collegeName);
+                    foreach ($course->crosslistings as $crosslisting) {
+                        $courseCodeId = $crosslisting->courseCode;
+                        $courseCode = CourseCodes::getInstance()->findOne($courseCodeId);
+                        CourseEsDesignations::getInstance()->setEssentialStudiesAreas(
+                            $courseCode,
+                            $college,
+                            $areas
+                        );
+                    }
+                }
+                //
+            } else if (is_array($val)) {
                 $array = $course->$key;
                 foreach($array as $key2 => $row) {
                     unset($array[$key2]);
diff --git a/application/models/rows/CourseEsDesignation.php b/application/models/rows/CourseEsDesignation.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f96fea941c4e0a6394d74d369b9367c6e9e7ca1
--- /dev/null
+++ b/application/models/rows/CourseEsDesignation.php
@@ -0,0 +1,18 @@
+<?php
+
+class CourseEsDesignation extends Nmc_Db_Table_Row
+{
+    public function _init()
+    {
+        parent::_init();
+
+        $collegeRelation = new Nmc_Db_Table_Relation_HasOne(
+            Colleges::getInstance(),
+            $this,
+            'college',
+            'college',
+            true
+        );
+        $this->_registerRelation($collegeRelation);
+    }
+}
\ No newline at end of file
diff --git a/application/models/rows/CourseGeneration.php b/application/models/rows/CourseGeneration.php
index 3ccaa99628121bd042a278867b1a96ba79b87f76..740ad469118fa334ee0b40c37219037242209218 100644
--- a/application/models/rows/CourseGeneration.php
+++ b/application/models/rows/CourseGeneration.php
@@ -174,6 +174,22 @@ class CourseGeneration extends Asset
         return CourseEsDesignations::getInstance()->isCourseCodeEssentialStudies($courseCode, $college);
     }
 
+    public function getEssentialStudiesAreas(College $college = null)
+    {
+        $courseCode = CourseCodes::getInstance()->findBySubjectNumberAndLetter($this->subject,
+                                                                               $this->courseNumber,
+                                                                               $this->courseLetter);
+        if (is_null($courseCode)) {
+            if (is_null($college)) {
+                return array(array());
+            } else {
+                return array();
+            }
+        }
+
+        return CourseEsDesignations::getInstance()->getEssentialStudiesAreas($courseCode, $college);
+    }
+
     public function getHomeCollege()
     {
         $department = $this->getHomeDepartment();
diff --git a/application/models/tables/Colleges.php b/application/models/tables/Colleges.php
index bc252aa55aaf6d15fa4cd7dbae1911aef3bddab4..695e0347be59052d6a18a3ce31b3e09edd4c036e 100644
--- a/application/models/tables/Colleges.php
+++ b/application/models/tables/Colleges.php
@@ -24,4 +24,10 @@ class Colleges extends Nmc_Db_Table
         }
         return self::$_instance;
     }
+
+    public function fetchWithName($name) {
+        $db = $this->getAdapter();
+        $where = $db->quoteInto('name = ?', $name);
+        return $this->fetchRow($where);
+    }
 }
\ No newline at end of file
diff --git a/application/models/tables/CourseEsDesignations.php b/application/models/tables/CourseEsDesignations.php
index 0e064c3cda0ca748ea64200ca668f74ecb4ab594..c50bbf4fd18e468740e54333cfc281b2cff68157 100644
--- a/application/models/tables/CourseEsDesignations.php
+++ b/application/models/tables/CourseEsDesignations.php
@@ -3,6 +3,7 @@
 class CourseEsDesignations extends Nmc_Db_Table
 {
     protected $_primary = 'courseEsDesignationId';
+    protected $_rowClass = 'CourseEsDesignation';
 
     /**
      * The one true instance
@@ -50,4 +51,66 @@ class CourseEsDesignations extends Nmc_Db_Table
             return false;
         }
     }
+
+    public function getEssentialStudiesAreas(CourseCode $course, College $college = null)
+    {
+        $db = $this->getAdapter();
+        $where   = array();
+        $where[] = $db->quoteInto('courseCode = ?', $course->getPrimaryKey());
+        if ($college) {
+            $where[] = $db->quoteInto('college = ?', $college->getPrimaryKey());
+        }
+        $where = implode(' AND ', $where);
+
+        $results = $this->fetchAll($where);
+        $areaCodes = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H');
+        $colleges = Colleges::getInstance()->fetchAll();
+
+        $areas = array();
+        if ($college) {
+            foreach ($areaCodes as $areaCode) {
+                $areas[$areaCode] = false;
+            }
+        } else {
+            foreach ($colleges as $collegeRow) {
+                $areas[$collegeRow->name] = array();
+                foreach ($areaCodes as $areaCode) {
+                    $areas[$collegeRow->name][$areaCode] = false;
+                }
+            }
+        }
+
+        foreach ($results as $row) {
+            if ($college) {
+                $areas[$row->area] = true;
+            } else {
+                $areas[$row->college->name][$row->area] = true;
+            }
+        }
+
+        return $areas;
+    }
+
+    public function setEssentialStudiesAreas(CourseCode $course, College $college, $areas)
+    {
+        $db = $this->getAdapter();
+
+        foreach ($areas as $areaName => $areaValue) {
+            $where   = array();
+            $where[] = $db->quoteInto('courseCode = ?', $course->getPrimaryKey());
+            $where[] = $db->quoteInto('college = ?',    $college->getPrimaryKey());
+            $where[] = $db->quoteInto('area = ?',    $areaName);
+            $where   = implode(' AND ', $where);
+            $row = $this->fetchRow($where);
+            if ($row && $areaValue == 'no') {
+                $row->delete();
+            } else if (!$row && $areaValue == 'yes') {
+                $row = $this->fetchNew();
+                $row->courseCode = $course->getPrimaryKey();
+                $row->college = $college;
+                $row->area = $areaName;
+                $row->save();
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/application/views/edit_course.xhtml b/application/views/edit_course.xhtml
index cc750426532d5247693f9ce803f4aee56cfa7891..11cffbfd36f2aa076bc5c413e04fc45e50e6bf77 100644
--- a/application/views/edit_course.xhtml
+++ b/application/views/edit_course.xhtml
@@ -162,7 +162,8 @@
         <div class="clear"></div>
     </fieldset>
 
-    <fieldset>
+    <fieldset class="three_column">
+        <div class="column">
         <label>
             Integrated Studies
             <input type="hidden" name="integratedStudies" value="no" />
@@ -174,6 +175,40 @@
                    <?php } ?>
             />
         </label>
+        </div>
+
+        <div class="column">
+        <label>
+            Essential Studies<br />
+
+            <table>
+                <tr>
+                    <th>&nbsp;</th>
+                    <th>A</th>
+                    <th>B</th>
+                    <th>C</th>
+                    <th>D</th>
+                    <th>E</th>
+                    <th>F</th>
+                    <th>G</th>
+                    <th>H</th>
+                </tr>
+                <?php foreach ($this->essentialStudiesAreas as $college => $areas) { ?>
+                <tr>
+                    <th><?php echo $college; ?></th>
+                    <?php foreach ($areas as $areaName => $areaValue) { ?>
+                    <td><?php echo $this->formCheckbox(
+                        'essentialStudies[' . $college . '][' . $areaName . ']',
+                        ($areaValue ? 'yes' : 'no'),
+                        null,
+                        array('yes', 'no')
+                    ); ?></td>
+                    <?php } ?>
+                </tr>
+                <?php } ?>
+            </table>
+        </label>
+        </div>
 
         <div class="clear"></div>
     </fieldset>
@@ -189,7 +224,7 @@
 <h2>Crosslistings</h2>
 
     <fieldset class="three_column">
-        <table>
+        <table class="multirow">
             <?php $hasTieIn = false;
             foreach($this->course->crosslistings as $key => $crosslist) {
                 if($crosslist->type == 'grad tie-in') { $hasTieIn = true; }
@@ -390,7 +425,7 @@
 
     <fieldset class="two_of_three_column" id="activities">
         <h3>Activity</h3>
-        <table>
+        <table class="multirow">
             <?php foreach($this->course->activities as $key => $activity) { ?>
             <tr>
                 <th> Type </th>
diff --git a/document_root/css/edit_course.css b/document_root/css/edit_course.css
index b52580c883e2354f0b02244ec4aac602fa23eb09..fdc811e7d8f4d2834de48aacfa89253ea8c00c07 100644
--- a/document_root/css/edit_course.css
+++ b/document_root/css/edit_course.css
@@ -118,7 +118,7 @@ fieldset#activities {
     clear: none;
 }
 
-div.main_section tr:first-child th {
+div.main_section table.multirow tr:first-child th {
     color: #a00;
     font-weight: normal;
     padding-right: 10px;
@@ -126,14 +126,14 @@ div.main_section tr:first-child th {
     font-size: 100%;
     text-indent: 0px;
 }
-div.main_section tr th {
+div.main_section table.multirow tr th {
     overflow: hidden;
     text-indent: -1000px;
 }
-div.main_section td {
+div.main_section table.multirow td {
     padding-right: 15px;
 }
-div.main_section td input[type=text] {
+div.main_section table.multirow td input[type=text] {
     width: 75px;
 }