diff --git a/block_course_overview_uwmoodle.php b/block_course_overview_uwmoodle.php
index 346bd92f2db5ecc7041e383c5c3fb86f92df45bb..59281182db7af5383f8c026a1c2a976319324bcd 100644
--- a/block_course_overview_uwmoodle.php
+++ b/block_course_overview_uwmoodle.php
@@ -18,8 +18,7 @@
 /**
  * Course overview block for UW Moodle
  *
- * This block improves on the course_summary block by presenting courses sorted by term.
- * It also allows showing/hiding of terms and course news summaries.
+ * This block improves on the default course_summary block by filtering courses by term.
  *
  * 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.
@@ -28,6 +27,7 @@
  */
 
 require_once($CFG->dirroot.'/blocks/course_overview_uwmoodle/locallib.php');
+require_once($CFG->dirroot.'/user/profile/lib.php');
 
 class block_course_overview_uwmoodle extends block_base {
     /**
@@ -55,13 +55,11 @@ class block_course_overview_uwmoodle extends block_base {
 
         $this->content = new stdClass();
         $this->content->text = '';
-        $this->content->footer = "<a href=\"$CFG->wwwroot/course/index.php\">".get_string("fulllistofcourses")."</a> ...";;
-
-        $content = array();$this->content->text .=
 
         profile_load_custom_fields($USER);
-        $courses = block_course_overview_uwmoodle_get_sorted_courses();
 
+        // Get user's courses and sort by term
+        $courses = block_course_overview_uwmoodle_get_sorted_courses();
         $terms = block_course_overview_uwmoodle_group_courses_by_term($courses);
 
         $currentterm = block_course_overview_uwmoodle_get_current_term();
@@ -73,11 +71,15 @@ class block_course_overview_uwmoodle extends block_base {
         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);
 
         $renderer = $this->page->get_renderer('block_course_overview_uwmoodle');
@@ -88,11 +90,12 @@ class block_course_overview_uwmoodle extends block_base {
         }
 
         $this->content->text .= $renderer->course_header($terms, $selectedterm);
-        $this->content->text .= $renderer->course_overview($terms[$selectedterm], $overviews);
+        $this->content->text .= $renderer->course_block($selectedterm, $terms[$selectedterm], $overviews);
+
         if (!empty($terms[self::TERM_OTHER])) {
-            $this->content->text .= $renderer->other_header();
-            $this->content->text .= $renderer->course_overview($terms[self::TERM_OTHER], $overviews);
+            $this->content->text .= $renderer->other_course_block($terms[self::TERM_OTHER], $overviews);
         }
+        $this->content->footer = $renderer->footer();
         return $this->content;
     }
 
@@ -116,23 +119,15 @@ class block_course_overview_uwmoodle extends block_base {
             return false;
         }
 
-        if ($currentterm === $oldcurrentterm) {
-            // no change, so return
-            return true;
+        if ($currentterm && $currentterm != $oldcurrentterm) {
+            // store new term
+            mtrace('new current term: '.$currentterm);
+            set_config('currentterm', $currentterm, 'block_course_overview_uwmoodle');
         }
-        mtrace('new current term: '.$currentterm);
-
-        // New term, so clear user preferences for both current and previous term
-        if ($oldcurrentterm) {
-            $DB->delete_records('user_preferences', array('name'=> 'block_course_overview_uwmoodle-show-term-'.$oldcurrentterm));
-        }
-        $DB->delete_records('user_preferences', array('name'=> 'block_course_overview_uwmoodle-show-term-'.$currentterm));
-
-        set_config('currentterm', $currentterm, 'block_course_overview_uwmoodle');
         return true;
     }
 
-    /**
+    /**news
      * Fetch current term from CHUB.  Throw exception on CHUB error.
      *
      * @return string|false  term_code or false if none found.
@@ -170,7 +165,7 @@ class block_course_overview_uwmoodle extends block_base {
         return true;
     }
 
-    /**
+    /**news
      * locations where block can be displayed
      *
      * @return array
diff --git a/lang/en/block_course_overview_uwmoodle.php b/lang/en/block_course_overview_uwmoodle.php
index f594578f2cccdbe8995556f20668accbb61b0f82..b232fc4f56f1b4b2fd19df31da0aeb04f989ed8f 100644
--- a/lang/en/block_course_overview_uwmoodle.php
+++ b/lang/en/block_course_overview_uwmoodle.php
@@ -18,9 +18,11 @@
 defined('MOODLE_INTERNAL') || die();
 
 $string['pluginname'] = 'UW Moodle course overview';
-$string['mycoursesinterm'] = 'My courses in term:';
-$string['othercourses'] = 'Other courses';
-$string['nocourses'] = 'You are not enrolled in any courses for this term.';
+$string['mycoursesinterm'] = '{$a} courses';
+$string['nocourses'] = 'You are not enrolled in any courses for this term';
+$string['ongoingcourses'] = 'Ongoing courses';
+$string['selectterm'] = 'Select a term: ';
+
 
 $string['activityoverview'] = 'You have {$a}s that need attention';
 $string['alwaysshowall'] = 'Always Show All';
diff --git a/locallib.php b/locallib.php
index 97f25280717668a7f852fc7a1938363fd9b189ca..79fa93a87441dfe8f0499ef2c112331180f1689f 100644
--- a/locallib.php
+++ b/locallib.php
@@ -86,7 +86,7 @@ function block_course_overview_uwmoodle_get_child_shortnames($courseid) {
  * @return array list of sorted courses grouped by term.
  */
 function block_course_overview_uwmoodle_get_sorted_courses() {
-    global $USER, $DB;
+    global $USER;
 
     $courses = enrol_get_my_courses('id, shortname, fullname, modinfo, sectioncache', 'fullname', 0);
     $site = get_site();
@@ -103,7 +103,20 @@ function block_course_overview_uwmoodle_get_sorted_courses() {
         }
     }
 
-    // Find the termcode for each course
+    return $courses;
+}
+
+/**
+ * Organize courses into terms, maintaining existing sorting inside each term
+ *
+ * @param array $courses user courses
+ * @return array
+ */
+function block_course_overview_uwmoodle_group_courses_by_term($courses) {
+    global $DB;
+
+    // Find the termcodes for each course
+    $courseterms = array();
     if (!empty($courses)) {
         $courseids = array();
         foreach ($courses as $course) {
@@ -113,26 +126,17 @@ function block_course_overview_uwmoodle_get_sorted_courses() {
         $select = "enrol='wisc' AND courseid $insql";
         $enrols = $DB->get_records_select('enrol', $select, $inparams, '', 'id,courseid,customchar1');
         foreach ($enrols as $enrol) {
-            if (empty($courses[$enrol->courseid]->term) || $courses[$enrol->courseid]->term < $enrol->customchar1) {
-                $courses[$enrol->courseid]->term = $enrol->customchar1;
-            }
+            $courseterms[$enrol->courseid][$enrol->customchar1] = true;
         }
     }
-    return $courses;
-}
 
-/**
- * Group courses by term
- *
- * @param array $courses user courses
- * @return array
- */
-function block_course_overview_uwmoodle_group_courses_by_term($courses) {
-    // Organize courses into terms, maintaining existing sorting inside each term
+    // Sort the courses by termcode.  Note that one course can be in multiple terms.
     $terms = array();
     foreach ($courses as $course) {
-        if (!empty($course->term)) {
-            $terms[$course->term][$course->id] = $course;
+        if (!empty($courseterms[$course->id])) {
+            foreach ($courseterms[$course->id] as $termcode => $unused) {
+                $terms[$termcode][$course->id] = $course;
+            }
         } else {
             $terms[block_course_overview_uwmoodle::TERM_OTHER][$course->id] = $course;
         }
diff --git a/renderer.php b/renderer.php
index 5b2aa2e01a4d0d646dae5ffb4c6b1cb9016ee281..fb121fb3d92e0b56c9ebe82baa5f42fdf8f218ef 100644
--- a/renderer.php
+++ b/renderer.php
@@ -45,7 +45,7 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
         $html .= html_writer::start_tag('div', array('id' => 'course_list_uwmoodle'));
         if (empty($courses)) {
             $html .= $this->output->box_start('coursebox');
-            $html .= get_string('nocourses','block_course_overview_uwmoodle');
+            $html .= '<h2>'.get_string('nocourses','block_course_overview_uwmoodle').'</h2>';
             $html .= $this->output->box_end();
         } else {
             foreach ($courses as $key => $course) {
@@ -76,32 +76,110 @@ 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');
+        return $html;
+    }
+
+    public function end_course_block() {
+        $html  = '';
+        $html .= $this->output->box_end();
+        $html .= $this->output->box_end();
+        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);
+
+        $html  = $this->begin_course_block($title);
+        $html .= $this->course_overview($courses, $overviews);
+        $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 .= $this->end_course_block();
+        return $html;
+    }
+
+
+    /**
+     * Render term selection box above the list of courses
+     *
+     * @param array $terms
+     * @param string $selectedterm
+     * @return string html to be displayed in course_overview block
+     */
     public function course_header($terms, $selectedterm) {
-        $output = $this->output->box_start('notice');
+        $output = '';
+        $thisterm = block_course_overview_uwmoodle_get_term_name($selectedterm);
 
         $options = array();
+
+        $url = new moodle_url('/my/index.php');
+
+        $output .= $this->output->box_start('notice');
+        $output .= html_writer::start_tag('ul', array('class'=>'termlist'));
+        $output .= html_writer::start_tag('li');
+        $output .= get_string('selectterm', 'block_course_overview_uwmoodle');
+        $output .= html_writer::end_tag('li');
+        // sort by term date, ascending
+        ksort($terms, SORT_NUMERIC);
+        $firstitem = true;
         foreach ($terms as $termcode => $courses) {
             if ($termcode == block_course_overview_uwmoodle::TERM_OTHER) {
                 // non-term courses are shown regardless
                 continue;
             }
-            $options[$termcode] = block_course_overview_uwmoodle_get_term_name($termcode);
+            $termname = block_course_overview_uwmoodle_get_term_name($termcode);
+            $output .= html_writer::start_tag('li');
+            if (!$firstitem) {
+                $output .= ' | ';
+            } else {
+                $firstitem = false;
+            }
+            if ($termcode == $selectedterm) {
+                $output .= html_writer::tag('span', $this->rarrow().$termname, array('class'=>'selectedterm'));
+            } else {
+                $output .= html_writer::tag('a', $termname, array('href' => $url->out(false, array('term'=>$termcode))));
+            }
+            $output .= html_writer::end_tag('li');
+            //$options[$termcode] = block_course_overview_uwmoodle_get_term_name($termcode);
         }
-        ksort($options, SORT_NUMERIC);
 
-        $url = new moodle_url('/my/index.php');
-        $select = new single_select($url, 'term', $options, $selectedterm, array());
-        $select->set_label(get_string('mycoursesinterm', 'block_course_overview_uwmoodle'));
-        $output .= $this->output->render($select);
+        //ksort($options, SORT_NUMERIC);
 
+        $output .= html_writer::end_tag('ul');
+
+
+        //$output .= $this->output->heading(get_string('mycoursesinterm', 'block_course_overview_uwmoodle', $thisterm), 2, 'sectiontitle');
         $output .= $this->output->box_end();
+
+        //$url = new moodle_url('/my/index.php');
+        //$select = new single_select($url, 'term', $options, '', array('' => 'choosedots'));
+        //$select->set_label(get_string('selectterm', 'block_course_overview_uwmoodle'));
+        //$output .= $this->output->render($select);
         return $output;
     }
 
-    public function other_header() {
-        $output = $this->output->box_start('notice');
-        $output .= $this->output->heading(get_string('othercourses', 'block_course_overview_uwmoodle'), 2, 'sectiontitle');
-        $output .= $this->output->box_end();
+    /**
+     * Render block footer
+     *
+     * @return string html to be displayed in course_overview block
+     */
+    public function footer() {
+        global $CFG;
+        $output = html_writer::tag('a', get_string("fulllistofcourses"), array('href' => "$CFG->wwwroot/course/index.php"));
+        $output .= ' ...';
         return $output;
     }
 
diff --git a/styles.css b/styles.css
index a6494edd65c61d0653f02e610148251dbbdbe09b..ce393b43c2d3b8bfffe27571607101eb444b3358 100644
--- a/styles.css
+++ b/styles.css
@@ -10,9 +10,33 @@
     margin: 5px 0;
 }
 
+.block_course_overview_uwmoodle .block {
+    margin-bottom: 10px;
+}
+
 .block_course_overview_uwmoodle .coursebox {
-    padding: 15px;
+    padding: 5px 15px 5px 15px;
     width: auto;
+    margin: 15px 0;
+}
+
+.block_course_overview_uwmoodle .termlist {
+    list-style-type:none;
+    margin:20px 0 0 0;
+    padding:0;
+    font-size:120%;
+}
+
+.block_course_overview_uwmoodle .termlist li {
+    display:inline;
+}
+
+.block_course_overview_uwmoodle .termlist .selectedterm {
+    /*color: #0000aa;*/
+    font-weight: bold;
+    font-size:100%;
+    /*border: 1px solid #000000;*/
+    padding: 5px;
 }
 
 .block_course_overview_uwmoodle .profilepicture {
@@ -39,22 +63,22 @@
 
 .block_course_overview_uwmoodle .content h2.title {
     float: left;
-    margin: 0 0 .5em 0;
+    margin: 0;
     position: relative;
 }
+.block_course_overview_uwmoodle .activity_info {
+    margin: 0.5em 0 0 1em;
+}
 .block_course_overview_uwmoodle .content h2.sectiontitle {
-    color: #444444;
-    margin: 2em 0 0;
+    /*color: #444444;*/
+    /*margin: 2em 0 0;*/
 }
 .block_course_overview_uwmoodle .content label {
     color: #444444;
-    font-size: 120%;
-    font-weight: bold;
 }
 .collapsibleregioncaption {
     cursor: pointer;
 }
-font-size: 123.1%;
 .dir-rtl .block_course_overview_uwmoodle .content h2.title {
     float:right;
 }
@@ -93,30 +117,7 @@ font-size: 123.1%;
 .editing .block_course_overview_uwmoodle .movedownspacer {
     float: left;
     width: 14px;
-}.block_course_overview_uwmoodle_uwmoodle .treeitem {
-    background-position: 0 40%;
-    background-repeat: no-repeat;
-    padding-left: 18px;
-    text-align: left;
 }
-
-.block_course_overview_uwmoodle_uwmoodle .treeitem.term {background-image: url([[pix:t/expanded]]);}
-.block_course_overview_uwmoodle_uwmoodle li.collapsed .treeitem.term {background-image: url([[pix:t/collapsed]]);}
-.block_course_overview_uwmoodle_uwmoodle .treeitem.coursenews {background-image: url([[pix:t/switch_minus]]);}
-.block_course_overview_uwmoodle_uwmoodle li.collapsed .treeitem.coursenews {background-image: url([[pix:t/switch_plus]]);}
-.block_course_overview_uwmoodle_uwmoodle li.collapsed ul {display: none;}
-.block_course_overview_uwmoodle_uwmoodle li ul {margin: 0;padding-left:16px;}
-.block_course_overview_uwmoodle_uwmoodle .coursebox h3 {margin-left:10px;}
-.block_course_overview_uwmoodle_uwmoodle h3 {font-size:1.1em;}
-/*.block_course_overview_uwmoodle_uwmoodle .miscterm .term {font-weight:bold;}*/
-.block_course_overview_uwmoodle_uwmoodle .term {color:#000;font-weight:normal;}
-.block_course_overview_uwmoodle_uwmoodle .shownews {float:right;color:#333;font-weight:normal;margin-right:1em;font-size:91%;}
-.block_course_overview_uwmoodle_uwmoodle a:focus,
-.block_course_overview_uwmoodle_uwmoodle a:hover,
-.block_course_overview_uwmoodle_uwmoodle a:active {outline:none;}
-.block_course_overview_uwmoodle_uwmoodle ul.treelist {list-style:none outside none;}
-.block_course_overview_uwmoodle_uwmoodle .courselist {margin:0;padding:0;}
-.block_course_overview_uwmoodle_uwmoodle ul {margin:0 1em 0 0;}
 .dir-rtl.editing .block_course_overview_uwmoodle .movedownspacer {
     float:right;
 }