diff --git a/block_course_overview_uwmoodle.php b/block_course_overview_uwmoodle.php
index 59281182db7af5383f8c026a1c2a976319324bcd..c56bfbec608659acab53c25568fcb125bca53fd0 100644
--- a/block_course_overview_uwmoodle.php
+++ b/block_course_overview_uwmoodle.php
@@ -23,7 +23,7 @@
  * The block is dependent on the UW enrollment plugins and is largely coped from the existing course_overview block.
  * I've left copyright statements for the original authors on most files.
  *
- * @author Matt Petro
+ * @author 2013 Matt Petro
  */
 
 require_once($CFG->dirroot.'/blocks/course_overview_uwmoodle/locallib.php');
@@ -68,19 +68,13 @@ class block_course_overview_uwmoodle extends block_base {
         if (!isset($terms[$currentterm])) {
             $terms[$currentterm] = array();
         }
-        if (!isset($terms[self::TERM_OTHER])) {
-            $terms[self::TERM_OTHER] = array();
-        }
         // If selectedterm is not valid, select currentterm
         if (!isset($terms[$selectedterm])) {
             $selectedterm = $currentterm;
         }
 
-        // Always display non-term courses in addition to selected term.
-        $displayedcourses = $terms[self::TERM_OTHER] + $terms[$selectedterm];
-
         // Get course overviews
-        $overviews = block_course_overview_uwmoodle_get_overviews($displayedcourses);
+        $overviews = block_course_overview_uwmoodle_get_overviews($courses);
 
         $renderer = $this->page->get_renderer('block_course_overview_uwmoodle');
         if (!empty($config->showwelcomearea)) {
@@ -89,11 +83,23 @@ class block_course_overview_uwmoodle extends block_base {
             $this->content->text = $renderer->welcome_area($msgcount);
         }
 
-        $this->content->text .= $renderer->course_header($terms, $selectedterm);
-        $this->content->text .= $renderer->course_block($selectedterm, $terms[$selectedterm], $overviews);
+        // Sort the terms with newest first
+        block_course_overview_uwmoodle_sort_term_array($terms);
+
+        $displayedterms = $terms;
+        $othercourses = false;
+        if (empty($this->config->combineongoing)) {
+            unset($displayedterms[self::TERM_OTHER]);
+            if (!empty($terms[self::TERM_OTHER])) {
+                $othercourses = $terms[self::TERM_OTHER];
+            }
+        }
+
+        // Render the block
+        $this->content->text .= $renderer->course_block($displayedterms, $overviews, $selectedterm);
 
-        if (!empty($terms[self::TERM_OTHER])) {
-            $this->content->text .= $renderer->other_course_block($terms[self::TERM_OTHER], $overviews);
+        if (!empty($othercourses)) {
+            $this->content->text .= $renderer->other_course_block($othercourses, $overviews);
         }
         $this->content->footer = $renderer->footer();
         return $this->content;
diff --git a/edit_form.php b/edit_form.php
new file mode 100644
index 0000000000000000000000000000000000000000..05aae3c763fe8ed9000338d03557cf8c27a0b84f
--- /dev/null
+++ b/edit_form.php
@@ -0,0 +1,13 @@
+<?php
+
+class block_course_overview_uwmoodle_edit_form extends block_edit_form {
+
+    protected function specific_definition($mform) {
+
+        // Section header title according to language file.
+        $mform->addElement('header', 'configheader', get_string('blocksettings', 'block'));
+
+        $mform->addElement('advcheckbox', 'config_combineongoing', get_string('combineongoing', 'block_course_overview_uwmoodle'), null, null, array(0, 1));
+        $mform->setDefault('config_nontermseparate', 0);
+    }
+}
\ No newline at end of file
diff --git a/lang/en/block_course_overview_uwmoodle.php b/lang/en/block_course_overview_uwmoodle.php
index b232fc4f56f1b4b2fd19df31da0aeb04f989ed8f..92b541d9e7e9bbf02c18937550076cd6e51acd2c 100644
--- a/lang/en/block_course_overview_uwmoodle.php
+++ b/lang/en/block_course_overview_uwmoodle.php
@@ -18,9 +18,12 @@
 defined('MOODLE_INTERNAL') || die();
 
 $string['pluginname'] = 'UW Moodle course overview';
+$string['courses'] = 'My courses';
 $string['mycoursesinterm'] = '{$a} courses';
 $string['nocourses'] = 'You are not enrolled in any courses for this term';
-$string['ongoingcourses'] = 'Ongoing courses';
+$string['combineongoing'] = 'Show ongoing classes in term menu';
+$string['ongoingcourses'] = 'My ongoing courses';
+$string['ongoingcourses_help'] = 'This section lists courses which are not tied to a specific UW term.';
 $string['selectterm'] = 'Select a term: ';
 
 
diff --git a/locallib.php b/locallib.php
index 79fa93a87441dfe8f0499ef2c112331180f1689f..a4b85d29a756e300e26420015793bc0d7da7415a 100644
--- a/locallib.php
+++ b/locallib.php
@@ -145,6 +145,20 @@ function block_course_overview_uwmoodle_group_courses_by_term($courses) {
     return $terms;
 }
 
+function block_course_overview_uwmoodle_sort_term_array(&$terms) {
+
+    // Sort the terms with ongoing (code = 0) first, then in decreasing order
+    $cmp = function ($a, $b) {
+               if ($a == 0 || $b == 0) {
+                   return $a-$b;
+               } else {
+                   return $b-$a;
+            }
+    };
+
+    return uksort($terms, $cmp);
+}
+
 /**
  * Get the current term from our settings
  *
@@ -174,19 +188,19 @@ function block_course_overview_uwmoodle_get_term_name($termCode) {
     $semester = substr($termCode,3,1);
     switch($semester) {
         case 2:
-            $name = sprintf("Fall %d", $year-1);
+            $name = sprintf("<span class='semester'>Fall</span> <span class='year'>%d</span>", $year-1);
             break;
         case 3:
-            $name = sprintf("Winter %d", $year);
+            $name = sprintf("<span class='semester'>Winter</span> <span class='year'>%d</span>", $year);
             break;
         case 4:
-            $name = sprintf("Spring %d", $year);
+            $name = sprintf("<span class='semester'>Spring</span> <span class='year'>%d</span>", $year);
             break;
         case 6:
-            $name = sprintf("Summer %d", $year);
+            $name = sprintf("<span class='semester'>Summer</span> <span class='year'>%d</span>", $year);
             break;
         default:
-            $name = "Other";
+            $name = "Ongoing";
     }
     return $name;
 }
\ No newline at end of file
diff --git a/module.js b/module.js
index 820ae47246780618e56e9cf95de6da99c1021216..6afcf71f745d9764895f093a262291eb5ef6b404 100644
--- a/module.js
+++ b/module.js
@@ -108,3 +108,34 @@ M.block_course_overview_uwmoodle.CollapsibleRegion.prototype.div = null;
  */
 M.block_course_overview_uwmoodle.CollapsibleRegion.prototype.icon = null;
 
+M.block_course_overview_uwmoodle.TermSelector = function(Y) {
+
+    // Find the selector div in the document.
+    var selector = Y.one('#uwmm_terms');
+    
+    // Find all the content nodes.
+    var contentnodes = Y.all('#uwmm_terms_content div.courselist');
+    
+    var onClick = function(e) {
+        var content = Y.one('#'+e.currentTarget.get('id')+'_courses');
+        if (content) {   
+            selector.all('.active').each(function(e) {e.removeClass('active');});
+            e.currentTarget.addClass('active'); // e.currentTarget === li
+            
+            contentnodes.each(function(e) {e.addClass('hidden');});
+            content.removeClass('hidden');
+            
+            // Stop the event's default behavior
+            e.preventDefault();
+
+            // Stop the event from bubbling up the DOM tree
+            e.stopPropagation();
+        }
+    };
+
+    selector.delegate('click', onClick, 'li');
+};
+
+M.block_course_overview_uwmoodle.termselector = function(Y) {
+    new M.block_course_overview_uwmoodle.TermSelector(Y);
+};
diff --git a/pix/menu.gif b/pix/menu.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8e8c574b3eed607786ae85412716b62ae6d8f45e
Binary files /dev/null and b/pix/menu.gif differ
diff --git a/renderer.php b/renderer.php
index fb121fb3d92e0b56c9ebe82baa5f42fdf8f218ef..c8d7afd6209522d82e7246579a2dea6032f465f0 100644
--- a/renderer.php
+++ b/renderer.php
@@ -31,6 +31,7 @@ defined('MOODLE_INTERNAL') || die;
  */
 class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
 
+
     /**
      * Construct contents of course_overview block
      *
@@ -38,18 +39,43 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
      * @param array $overviews list of course overviews
      * @return string html to be displayed in course_overview block
      */
-    public function course_overview($courses, $overviews) {
+    public function course_overview_allterms($terms, $overviews, $selectedterm) {
         $html = '';
-        $config = get_config('block_course_overview_uwmoodle');
 
-        $html .= html_writer::start_tag('div', array('id' => 'course_list_uwmoodle'));
+        $html .= html_writer::start_tag('div', array('class' => 'courselistcontainer', 'id' => 'uwmm_terms_content'));
+        foreach ($terms as $termcode => $courses) {
+            if ($termcode != $selectedterm) {
+                $hidden = 'hidden';
+            } else {
+                $hidden = '';
+            }
+            $html .= html_writer::start_tag('div', array('class' => 'courselist '.$hidden, 'id' => 'uwmm_term_'.$termcode.'_courses'));
+
+            $termstr = block_course_overview_uwmoodle_get_term_name($termcode);
+            $title = get_string('mycoursesinterm', 'block_course_overview_uwmoodle', $termstr);
+            $html .= html_writer::start_tag('div', array('class' => 'title'));
+            $html .= $this->output->heading($title, 2, 'termname');
+            $html .= html_writer::end_tag('div');
+
+            $html .= $this->course_overview($courses, $overviews, $termcode);
+            $html .= html_writer::end_tag('div');
+        }
+        $html .= html_writer::end_tag('div');
+        $this->page->requires->js_init_call('M.block_course_overview_uwmoodle.termselector');
+
+        return $html;
+    }
+
+    public function course_overview($courses, $overviews, $termcode) {
+        $html = '';
+        $html .= html_writer::start_tag('div', array('class' => 'courselistcontainer'));
         if (empty($courses)) {
             $html .= $this->output->box_start('coursebox');
-            $html .= '<h2>'.get_string('nocourses','block_course_overview_uwmoodle').'</h2>';
+            $html .= $this->output->heading(get_string('nocourses','block_course_overview_uwmoodle'), 3);
             $html .= $this->output->box_end();
         } else {
             foreach ($courses as $key => $course) {
-                $html .= $this->output->box_start('coursebox', "course-{$course->id}");
+                $html .= $this->output->box_start('coursebox');
                 $html .= html_writer::start_tag('div', array('class' => 'course_title'));
 
                 // No need to pass title through s() here as it will be done automatically by html_writer.
@@ -60,15 +86,15 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
                 $courseurl = new moodle_url('/course/view.php', array('id' => $course->id));
                 $coursefullname = format_string($course->fullname, true, $course->id);
                 $link = html_writer::link($courseurl, $coursefullname, $attributes);
-                $html .= $this->output->heading($link, 2, 'title');
-                $html .= $this->output->box('', 'flush');
+                $html .= $this->output->heading($link, 3, 'title');
+                //$html .= $this->output->box('', 'flush');
                 $html .= html_writer::end_tag('div');
 
                 if (isset($overviews[$course->id])) {
-                    $html .= $this->activity_display($course->id, $overviews[$course->id]);
+                    $html .= $this->activity_display($course->id, $overviews[$course->id], $termcode);
                 }
 
-                $html .= $this->output->box('', 'flush');
+                //$html .= $this->output->box('', 'flush');
                 $html .= $this->output->box_end();
             }
         }
@@ -76,37 +102,69 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
         return $html;
     }
 
-    public function begin_course_block($title) {
-        $html  = $this->output->box_start('block');
-        $html .= $this->output->box_start('header');
-        $html .= $this->output->box_start('title');
-        $html .= $this->output->heading($title, 2, 'sectiontitle');
-        $html .= $this->output->box_end();
-        $html .= $this->output->box_end();
-        $html .= $this->output->box_start('content');
+    public function term_list($termcodes, $selectedterm) {
+        $thisurl = $this->page->url;
+        $html  = '';
+        $html .= html_writer::start_tag('div', array('class' => 'termscontainer'));
+        $html .= html_writer::start_tag('ul', array('class' => 'terms', 'id' => 'uwmm_terms'));
+        foreach ($termcodes as $termcode) {
+            $termname = block_course_overview_uwmoodle_get_term_name($termcode);
+            $attributes = array('id'=>'uwmm_term_'.$termcode);
+            if ($termcode == $selectedterm) {
+                $attributes['class'] = 'active';
+            }
+            $html .= html_writer::start_tag('li', $attributes);
+            $html .= html_writer::tag('a', $termname, array('href' => $thisurl->out(false, array('term'=>$termcode))));
+            $html .= html_writer::end_tag('li');
+        }
+        $html .= html_writer::end_tag('ul');
+        $html .= html_writer::end_tag('div');
         return $html;
     }
 
-    public function end_course_block() {
+    public function begin_course_block($title, $id='', $helpidentifier='') {
         $html  = '';
-        $html .= $this->output->box_end();
-        $html .= $this->output->box_end();
+        $attributes = array('class' => 'courseblock clearfix');
+        if (!empty($id)) {
+            $attributes['id'] = $id;
+        }
+        $html .= html_writer::start_tag('div', $attributes);
+        $html .= html_writer::start_tag('div', array('class' => 'cbheader'));
+        $help = '';
+        if ($helpidentifier) {
+            $help = $this->output->help_icon($helpidentifier, 'block_course_overview_uwmoodle');
+        }
+        $html .= $this->output->heading($title.$help, 2, 'sectiontitle help');
+        $html .= html_writer::end_tag('div');
+        $html .= html_writer::start_tag('div', array('class' => 'cbcontent'));
         return $html;
     }
 
-    public function course_block($selectedterm, $courses, $overviews) {
-        $termstr = block_course_overview_uwmoodle_get_term_name($selectedterm);
-        $title = get_string('mycoursesinterm', 'block_course_overview_uwmoodle', $termstr);
+    public function end_course_block() {
+        $html  = '';
+        $html .= html_writer::end_tag('div');
+        $html .= html_writer::end_tag('div');
+        return $html;
+    }
 
-        $html  = $this->begin_course_block($title);
-        $html .= $this->course_overview($courses, $overviews);
+    public function course_block($terms, $overviews, $selectedterm) {
+        $html  = '';
+        $html .= $this->begin_course_block(get_string('courses', 'block_course_overview_uwmoodle'), 'uwmm_mycourses_block');
+        $termcodes = array_keys($terms);
+        $html .= html_writer::start_tag('div', array('class' => 'lhs'));
+        $html .= $this->term_list($termcodes, $selectedterm);
+        $html .= html_writer::end_tag('div');
+        $html .= html_writer::start_tag('div', array('class' => 'rhs'));
+        $html .= $this->course_overview_allterms($terms, $overviews, $selectedterm);
+        $html .= html_writer::end_tag('div');
         $html .= $this->end_course_block();
         return $html;
     }
 
     public function other_course_block($courses, $overviews) {
-        $html  = $this->begin_course_block(get_string('ongoingcourses', 'block_course_overview_uwmoodle'));
-        $html .= $this->course_overview($courses, $overviews);
+        $html  = '';
+        $html .= $this->begin_course_block(get_string('ongoingcourses', 'block_course_overview_uwmoodle'), 'uwmm_othercourses_block', 'ongoingcourses');
+        $html .= $this->course_overview($courses, $overviews, block_course_overview_uwmoodle::TERM_OTHER);
         $html .= $this->end_course_block();
         return $html;
     }
@@ -190,7 +248,7 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
      * @param array $overview overview of activities in course
      * @return string html of activities overview
      */
-    protected function activity_display($cid, $overview) {
+    protected function activity_display($cid, $overview, $id) {
         $output = html_writer::start_tag('div', array('class' => 'activity_info'));
         foreach (array_keys($overview) as $module) {
             $output .= html_writer::start_tag('div', array('class' => 'activity_overview'));
@@ -204,7 +262,7 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
             }
 
             // Add collapsible region with overview text in it.
-            $output .= $this->collapsible_region($overview[$module], '', 'uwmm_region_'.$cid.'_'.$module, $icontext, '', true);
+            $output .= $this->collapsible_region($overview[$module], '', 'uwmm_region_'.$id.'_'.$cid.'_'.$module, $icontext, '', true);
 
             $output .= html_writer::end_tag('div');
         }
diff --git a/styles.css b/styles.css
index ce393b43c2d3b8bfffe27571607101eb444b3358..c4084fcb4ed464c5dd8a958cd493271feaae15ea 100644
--- a/styles.css
+++ b/styles.css
@@ -1,8 +1,3 @@
-.block_course_overview_uwmoodle .coursechildren {
-    font-weight: normal;
-    font-style: italic;
-}
-
 .block_course_overview_uwmoodle .content {
     margin: 0 20px;
 }
@@ -10,44 +5,145 @@
     margin: 5px 0;
 }
 
-.block_course_overview_uwmoodle .block {
+.block_course_overview_uwmoodle .courseblock {
     margin-bottom: 10px;
+    border: 1px solid #666666;
+    width: 100%;
+    clear: both;
+    position: relative;
 }
 
-.block_course_overview_uwmoodle .coursebox {
-    padding: 5px 15px 5px 15px;
-    width: auto;
-    margin: 15px 0;
+.block_course_overview_uwmoodle .cbheader {
+    /*border-bottom: 1px solid #666666;*/
+    /*padding: 5px;*/
+    background-color: #E3E3E3;
+    /*background-image: url("/theme/image.php?theme=big_red&component=theme&image=gradient_h");*/
+    /*background-repeat: repeat-x;*/
+    border-bottom: 1px solid #666666;
+    clear: both;
+}
+
+.block_course_overview_uwmoodle .cbheader h2 {
+    margin: 0;
+    padding: 0.2em 0 0 0.3em;
 }
 
-.block_course_overview_uwmoodle .termlist {
-    list-style-type:none;
-    margin:20px 0 0 0;
-    padding:0;
-    font-size:120%;
+.block_course_overview_uwmoodle .cbheader h2.help img {
+    vertical-align: middle;
 }
 
-.block_course_overview_uwmoodle .termlist li {
-    display:inline;
+.block_course_overview_uwmoodle .termscontainer {
+    width: 100%;
+    margin: 0;
+    padding: 0;
 }
 
-.block_course_overview_uwmoodle .termlist .selectedterm {
-    /*color: #0000aa;*/
-    font-weight: bold;
-    font-size:100%;
-    /*border: 1px solid #000000;*/
-    padding: 5px;
+.block_course_overview_uwmoodle a {
+    -moz-outline: none 0;
+    outline: none 0;
 }
 
-.block_course_overview_uwmoodle .profilepicture {
+.block_course_overview_uwmoodle .courselistcontainer {
+}
+
+.block_course_overview_uwmoodle .rhs .courselist {
+}
+
+.block_course_overview_uwmoodle .rhs {
+    padding: 5px 0 10px 0;
+}
+
+.block_course_overview_uwmoodle .lhs {
     float: left;
+    left:0;
+    top:0;
+    position:relative;
+    width: 10em;
+    background: #E3DFD4;
+    z-index: 1;
+}
+.block_course_overview_uwmoodle .rhs {
+    border-left: 10em solid #E3DFD4;
+}
+
+.block_course_overview_uwmoodle .courselistcontainer {
+    padding: 0 1em;
+}
+
+.block_course_overview_uwmoodle ul.terms {
+    list-style: none inside none;
+    margin: 0;
+    padding: 0;
+    border-top: 1px solid #ffffff;
+}
+.block_course_overview_uwmoodle .terms li {
+    margin: 0;
+    padding: 0;
+    text-align: right;
+}
+
+.block_course_overview_uwmoodle .terms .semester {
+    position: relative;
+    right: 4px;
+}
+
+.block_course_overview_uwmoodle .terms .year {
+}
+
+.block_course_overview_uwmoodle .terms li a {
+    font: bold 12px Verdana, Arial, Helvetica, sans-serif;
+    display: block;
+    background: #dddddd url([[pix:block_course_overview_uwmoodle|menu]]) 100% 0;
+    height: 22px; /*Set to height of bg image- padding within link (ie: 32px - 4px - 4px)*/
+    padding: 4px 0 4px 10px;
+    line-height: 24px; /*Set line-height of bg image- padding within link (ie: 32px - 4px - 4px)*/
+    text-decoration: none;
+    color: #000000;
+    padding-right: 2em;
+}
+
+.block_course_overview_uwmoodle .terms li.active a {
+    color: #ffffff;
+    background-color: #A00000;
+    background-position: 100% -60px;
+}
+
+.block_course_overview_uwmoodle .terms li:not(.active) a:hover {
+    color: #000000;
+    background-position: 100% -30px;
+}
+
+.block_course_overview_uwmoodle .hidden {
+    /*display: none;*/
+    visibility:hidden;
+    position: absolute;
+    left: -9999px;
+}
+
+#uwmm_mycourses_block .courselistcontainer {
+    min-height: 14.56em;
+}
+
+#uwmm_othercourses_block .courselistcontainer {
+    padding-bottom: 10px;
+}
+
+
+.block_course_overview_uwmoodle .coursebox {
+    padding: 5px 15px 5px 15px;
+    width: auto;
+    margin: 15px 0 0 0;
+}
+
+.block_course_overview_uwmoodle .profilepicture {
+    /*float: left;*/
 }
 .dir-rtl.block_course_overview_uwmoodle .profilepicture {
     float:right;
 }
 .block_course_overview_uwmoodle .welcome_area {
     width: 100%;
-    padding-bottom: 5px;
+    padding-bottom: 10px;
 }
 
 .block_course_overview_uwmoodle .welcome_message {
@@ -62,9 +158,8 @@
 }
 
 .block_course_overview_uwmoodle .content h2.title {
-    float: left;
     margin: 0;
-    position: relative;
+    text-align: left;
 }
 .block_course_overview_uwmoodle .activity_info {
     margin: 0.5em 0 0 1em;
@@ -79,9 +174,6 @@
 .collapsibleregioncaption {
     cursor: pointer;
 }
-.dir-rtl .block_course_overview_uwmoodle .content h2.title {
-    float:right;
-}
 
 .block_course_overview_uwmoodle .course_title {
     position: relative;
@@ -139,7 +231,6 @@
 }
 
 .block_course_overview_uwmoodle .activity_info {
-    clear: both;
 }
 .dir-rtl .block_course_overview_uwmoodle .activity_info {
     margin-right: 25px;