diff --git a/blocks/accessibility/accessibility.js b/blocks/accessibility/accessibility.js
index 0934fb5..4ec7ea1 100644
--- a/blocks/accessibility/accessibility.js
+++ b/blocks/accessibility/accessibility.js
@@ -22,8 +22,9 @@
  * -side, this just gets the necessary bits via AJAX.                  (2)
  *
  * @package   blocks-accessibility                                      (3)
- * @copyright 2009 Mark Johnson                                        (4)
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (5)
+ * @copyright Copyright &copy; 2009 Taunton's College                   (4)
+ * @author Mark Johnson(5)
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (6)
  */
 
 /**
@@ -46,7 +47,7 @@ function accessibility_show_message(msg) {
 function accessibility_savesize() {
     YAHOO.util.Connect.asyncRequest(
         'get',
-        webroot+'/blocks/accessibility/database.php?op=save',
+        webroot+'/blocks/accessibility/database.php?op=save&size=true&scheme=true',
         {
             success: function(o) {
             accessibility_show_message('Setting saved');
@@ -60,7 +61,7 @@ function accessibility_savesize() {
 }
 
 /**
- * Calls the database script on the server to clear the current setting from
+ * Calls the database script on the server to clear the current size setting from
  * the database. Displays a message on success, or an error on failure. 404 doesn't
  * count as a failure, as this just means there's no setting to be cleared
  *
@@ -71,7 +72,34 @@ function accessibility_savesize() {
 function accessibility_resetsize() {
     YAHOO.util.Connect.asyncRequest(
         'get',
-        webroot+'/blocks/accessibility/database.php?op=reset',
+        webroot+'/blocks/accessibility/database.php?op=reset&size=true',
+        {
+            success: function(o) {
+                accessibility_show_message('Setting reset');
+                setTimeout("accessibility_show_message('')", 5000);
+            },
+            failure: function(o) {
+                if (o.status != '404') {
+                    alert('Error resetting text size: '+o.status+' '+o.statusText);
+                }
+            }
+       }
+   );
+}
+
+/**
+ * Calls the database script on the server to clear the current colour scheme setting from
+ * the database. Displays a message on success, or an error on failure. 404 doesn't
+ * count as a failure, as this just means there's no setting to be cleared
+ *
+ * @requires accessibility_show_message
+ * @requires webroot
+ *
+ */
+function accessibility_resetscheme() {
+    YAHOO.util.Connect.asyncRequest(
+        'get',
+        webroot+'/blocks/accessibility/database.php?op=reset&scheme=true',
         {
             success: function(o) {
                 accessibility_show_message('Setting reset');
@@ -237,16 +265,85 @@ function accessibility_changesize(op) {
 }
 
 /**
+ * This handles clicks from the colour scheme buttons.
+ * We start by getting the scheme number from the theme button's ID.
+ * We then get the elements that need dynamically re-styling via their
+ * CSS selectors and loop through the arrays to style them appropriately.
+ *
+ * @requires accessibility_toggle_textsizer
+ * @requires accessibility_resetscheme
+ * @requires stylesheet
+ * @requires webroot
+ *
+ * @param {String} scheme - the colour scheme we're changing to, 1-4.
+ *
+ */
+
+function accessibility_changecolour(scheme) {
+    scheme = scheme.substring(6);
+    YAHOO.util.Connect.asyncRequest(
+        'get',
+        webroot+'/blocks/accessibility/changecolour.php?scheme='+scheme,
+        {
+            success: function (o) {
+            if (stylesheet !== undefined && !stylesheet.disabled) {
+                stylesheet.disabled = true;
+            }
+                elements = new Array();
+                elements = YAHOO.util.Selector.query('*');
+                a = YAHOO.util.Selector.query('a');
+
+                switch (scheme) {
+                    case '1':
+                        YAHOO.util.Dom.setStyle(elements, 'background-color', '');
+                        YAHOO.util.Dom.setStyle(elements, 'color', '');
+                        YAHOO.util.Dom.setStyle(elements, 'background-image', '');
+                        YAHOO.util.Dom.setStyle(a, 'color', '');
+                        accessibility_resetscheme();
+                        accessibility_toggle_textsizer('save', 'off');
+                        break;
+                    case '2':
+                    YAHOO.util.Dom.setStyle(elements, 'background-color', '#ffffcc');
+                        YAHOO.util.Dom.setStyle(elements, 'color', '');
+                        YAHOO.util.Dom.setStyle(elements, 'background-image', 'none');
+                        YAHOO.util.Dom.setStyle(a, 'color', '');
+                        accessibility_toggle_textsizer('save', 'on');
+                        break;
+                    case '3':
+                    YAHOO.util.Dom.setStyle(elements, 'background-color', '#99ccff');
+                        YAHOO.util.Dom.setStyle(elements, 'color', '');
+                        YAHOO.util.Dom.setStyle(elements, 'background-image', 'none');
+                        YAHOO.util.Dom.setStyle(a, 'color', '');
+                        accessibility_toggle_textsizer('save', 'on');
+                        break;
+                    case '4':
+                    YAHOO.util.Dom.setStyle(elements, 'background-color', '#000000');
+                        YAHOO.util.Dom.setStyle(elements, 'color', '#ffff00');
+                        YAHOO.util.Dom.setStyle(elements, 'background-image', 'none');
+                        YAHOO.util.Dom.setStyle(a, 'color', '#ff0000');
+                        accessibility_toggle_textsizer('save', 'on');
+                        break;
+                }
+            },
+
+            failure: function(o) {
+                alert('Error changing colour: '+o.status+' '+o.statusText);
+            }
+        }
+     );
+}
+
+/**
  * Handles click events inside the textsizer div. All clicks are handled by this function,
  * then if they're inside an element we're worried about (i.e. the buttons) it passes that
- * element'd id to accessibilty_changesize.
+ * element's id to accessibilty_changesize.
  *
  * @requires accessibility_changesize
  *
  * @param e the click event that fired the function
  *
  */
-function accessibility_clickhandler(e) {
+function accessibility_sizeclickhandler(e) {
     var elTarget = YAHOO.util.Event.getTarget(e); // Get the DOM node that the click came from
     while (elTarget.id != "textresize") { // If we're still inside the textresize div
         if(YAHOO.util.Dom.hasClass(elTarget.id, 'outer')) { // Check the clicks from an element we're after
@@ -263,6 +360,32 @@ function accessibility_clickhandler(e) {
 }
 
 /**
+ * Handles click events inside the colourchange div. All clicks are handled by this function,
+ * then if they're inside an element we're worried about (i.e. the buttons) it passes that
+ * element's id to accessibilty_changecolour.
+ *
+ * @requires accessibility_changecolour
+ *
+ * @param e the click event that fired the function
+ *
+ */
+function accessibility_schemeclickhandler(e) {
+    var elTarget = YAHOO.util.Event.getTarget(e); // Get the DOM node that the click came from
+    while (elTarget.id != "colourchange") { // If we're still inside the changecolour div
+        if(YAHOO.util.Dom.hasClass(elTarget.id, 'outer')) { // Check the clicks from an element we're after
+            if (!YAHOO.util.Dom.hasClass(elTarget.id, 'disabled')) {
+                // If it is, and the button's not disabled, pass it's id to the changecolour function
+                accessibility_changecolour(elTarget.id);
+            }
+            break;
+        } else {
+            // Otherwise, look at the node's parent to see if we're after that one.
+            elTarget = elTarget.parentNode
+        }
+    }
+}
+
+/**
  * The initialisation function for the block's javascript - run with body.onload
  * This gets a reference to the per-user stylesheet so we can disable it later,
  * attaches the clickhandler function to the textsizer div, removes the hrefs from
@@ -283,7 +406,8 @@ function accessibility_init() {
         }
     }
     // Attach the click handler
-    YAHOO.util.Event.on("textresize", "click", accessibility_clickhandler);
+    YAHOO.util.Event.on("textresize", "click", accessibility_sizeclickhandler);
+    YAHOO.util.Event.on("colourchange", "click", accessibility_schemeclickhandler);
     // Remove href attributes from anchors
     elements = YAHOO.util.Dom.getElementsByClassName('outer', 'a');
     for(i=0; i<elements.length; i++) {
diff --git a/blocks/accessibility/block_accessibility.php b/blocks/accessibility/block_accessibility.php
index 29a5991..bb1c8d8 100644
--- a/blocks/accessibility/block_accessibility.php
+++ b/blocks/accessibility/block_accessibility.php
@@ -30,8 +30,9 @@
  *                                                                     (2)
  *
  * @package   blocks-accessibility                                      (3)
- * @copyright 2009 Mark Johnson                                        (4)
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (5)
+ * @copyright Copyright &copy; 2009 Taunton's College                   (4)
+ * @author  Mark Johnson                                                (5)
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (6)
  */
 
 require_once($CFG->dirroot.'/blocks/accessibility/lib.php');
@@ -40,7 +41,7 @@ class block_accessibility extends block_base {
 
     function init() {
         $this->title = get_string('blockname', 'block_accessibility');
-        $this->version = 2009072100;
+        $this->version = 2009082600;
     }
 
     function get_content() {
@@ -60,31 +61,31 @@ class block_accessibility extends block_base {
                                             <div class="inner">'.get_string('char', 'block_accessibility').'-</div>
                                         </div>
                                     </a>
-                                    <a href="'.$CFG->wwwroot.'/blocks/accessibility/changesize.php?op=reset&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('resettext', 'block_accessibility').'" id="reset" class="outer">
+                                    <a href="'.$CFG->wwwroot.'/blocks/accessibility/changesize.php?op=reset&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('resettext', 'block_accessibility').'" id="reset" class="outer right">
                                         <div class="middle">
                                             <div class="inner">'.get_string('char', 'block_accessibility').'</div>
                                         </div>
                                     </a>';
         if(isset($USER->fontsize) && accessibility_getsize($USER->fontsize) == 26) {
             // Check if the increase button should be disabled, i.e. we can't increase any further
-            $this->content->text .= '<a title="'.get_string('inctext', 'block_accessibility').'" id="inc" class="outer disabled">';
+            $this->content->text .= '<a title="'.get_string('inctext', 'block_accessibility').'" id="inc" class="outer disabled right">';
         } else {
-            $this->content->text .= '<a href="'.$CFG->wwwroot.'/blocks/accessibility/changesize.php?op=inc&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('inctext', 'block_accessibility').'" id="inc" class="outer">';
+            $this->content->text .= '<a href="'.$CFG->wwwroot.'/blocks/accessibility/changesize.php?op=inc&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('inctext', 'block_accessibility').'" id="inc" class="outer right">';
         }
         $this->content->text .=     '   <div class="middle">
                                             <div class="inner">'.get_string('char', 'block_accessibility').'+</div>
                                         </div>
                                     </a>';
-        if(isset($USER->fontsize)) {
+        if(isset($USER->fontsize) || isset($USER->colourscheme)) {
             // Check if the save button should be disabled, i.e. there's no setting in $USER->fontsize that we can save
-            $this->content->text .= '<a id="save" href="'.$CFG->wwwroot.'/blocks/accessibility/database.php?op=save&amp;redirect='.$_SERVER['REQUEST_URI'].'" class="outer" title="'.get_string('save', 'block_accessibility').'">';
+            $this->content->text .= '<a id="save" href="'.$CFG->wwwroot.'/blocks/accessibility/database.php?op=save&amp;size=true&amp;scheme=true&amp;redirect='.$_SERVER['REQUEST_URI'].'" class="outer right" title="'.get_string('save', 'block_accessibility').'">';
         } else {
-            $this->content->text .= '<a id="save" class="outer disabled" title="'.get_string('save', 'block_accessibility').'">';
+            $this->content->text .= '<a id="save" class="outer disabled right" title="'.get_string('save', 'block_accessibility').'">';
         }
         $this->content->text .=     '   <div class="middle">
                                             <div class="inner">
                                                 <img id="saveicon" src="'.$CFG->wwwroot.'/blocks/accessibility/pix/document-save';
-        if(!isset($USER->fontsize)) {
+        if(!isset($USER->fontsize) && !isset($USER->colourscheme)) {
             $this->content->text .=            '-grey';
         }
         $this->content->text .=                 '.png" />
@@ -92,6 +93,28 @@ class block_accessibility extends block_base {
                                         </div>
                                     </a>
                                 </div>
+                                <div id="colourchange">
+                                    <a href="'.$CFG->wwwroot.'/blocks/accessibility/changecolour.php?scheme=1&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('col1text', 'block_accessibility').'" id="colour1" class="outer row">
+                                        <div class="middle">
+                                            <div class="inner">'.get_string('char', 'block_accessibility').'</div>
+                                        </div>
+                                    </a>
+                                    <a href="'.$CFG->wwwroot.'/blocks/accessibility/changecolour.php?scheme=2&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('col2text', 'block_accessibility').'" id="colour2" class="outer row right">
+                                        <div class="middle">
+                                            <div class="inner">'.get_string('char', 'block_accessibility').'</div>
+                                        </div>
+                                    </a>
+                                    <a href="'.$CFG->wwwroot.'/blocks/accessibility/changecolour.php?scheme=3&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('col3text', 'block_accessibility').'" id="colour3" class="outer row right">
+                                        <div class="middle">
+                                            <div class="inner">'.get_string('char', 'block_accessibility').'</div>
+                                        </div>
+                                    </a>
+                                    <a href="'.$CFG->wwwroot.'/blocks/accessibility/changecolour.php?scheme=4&amp;redirect='.$_SERVER['REQUEST_URI'].'" title="'.get_string('col4text', 'block_accessibility').'" id="colour4" class="outer row right">
+                                        <div class="middle">
+                                            <div class="inner">'.get_string('char', 'block_accessibility').'</div>
+                                        </div>
+                                    </a>
+                                </div>
                                 <div style="clear:both;"></div>';
 
         require_js(array(
@@ -99,6 +122,7 @@ class block_accessibility extends block_base {
             'yui_event',
             'yui_dom',
             'yui_connection',
+            'yui_selector',
             $CFG->wwwroot.'/blocks/accessibility/accessibility.js'));
 
         // setup a couple of global javascript variables, and set the javascript's init function to run with body.onload
diff --git a/blocks/accessibility/changecolour.php b/blocks/accessibility/changecolour.php
new file mode 100644
index 0000000..cbad639
--- /dev/null
+++ b/blocks/accessibility/changecolour.php
@@ -0,0 +1,72 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+
+/**
+ * Sets the session variable for custom colour schemes                  (1)
+ *
+ * This page accepts the required colour scheme as an argument, and
+ * sets a session variable accordingly. If the colour scheme is 1 (the
+ * theme default) the variable is unset.
+ * If the page is being requested via AJAX, we just return HTTP 200, or
+ * 400 if the parameter was invalid. If requesting normally, we redirect
+ * to reset the saved setting, or to the page we came from as required. (2)
+ *
+ * @package   blocks-accessibility                                      (3)
+ * @copyright Copyright &copy; 2009 Taunton's College                   (4)
+ * @author  Mark Johnson                                               (5)
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (6)
+ * @param int scheme - The number of the colour scheme, 1-4             (7)
+ */
+
+require_once('../../config.php');
+require_once($CFG->dirroot.'/blocks/accessibility/lib.php');
+
+$scheme = required_param('scheme', PARAM_INT);
+if (!accessibility_is_ajax()) {
+    $redirect = required_param('redirect', PARAM_TEXT);
+}
+
+switch($scheme) {
+	case 1:
+        unset($USER->colourscheme);
+        if (!accessibility_is_ajax()) {
+            redirect($CFG->wwwroot.'/blocks/accessibility/database.php?op=reset&scheme=true&userid='.$USER->id.'&amp;redirect='.$redirect);
+        }
+        break;
+
+    case 2:
+        $USER->colourscheme = 2;
+        break;
+
+    case 3:
+        $USER->colourscheme = 3;
+        break;
+
+    case 4:
+        $USER->colourscheme = 4;
+        break;
+
+    default:
+        header("HTTP/1.0 400 Bad Request");
+        break;
+}
+
+if (!accessibility_is_ajax()) {
+    redirect($CFG->wwwroot.$redirect);
+}
+
+?>
diff --git a/blocks/accessibility/changesize.php b/blocks/accessibility/changesize.php
index bb781a0..3fb2e3e 100644
--- a/blocks/accessibility/changesize.php
+++ b/blocks/accessibility/changesize.php
@@ -106,7 +106,7 @@ switch($op) {
             exit();
         } else {
             // Otherwise, redirect the user
-            redirect($CFG->wwwroot.'/blocks/accessibility/database.php?op=reset&userid='.$USER->id.'&amp;redirect='.$redirect);
+            redirect($CFG->wwwroot.'/blocks/accessibility/database.php?op=reset&size=true&userid='.$USER->id.'&amp;redirect='.$redirect);
         }
         break;
     default:
diff --git a/blocks/accessibility/database.php b/blocks/accessibility/database.php
index 84879b7..19e2e89 100644
--- a/blocks/accessibility/database.php
+++ b/blocks/accessibility/database.php
@@ -26,7 +26,8 @@
  * display, and redirects the user back to where they came from.       (2)
  *
  * @package   blocks-accessibility                                      (3)
- * @copyright 2009 Mark Johnson                                        (4)
+ * @copyright 2009 &copy; Taunton's College                            (4)
+ * @author Mark Johnson
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (5)
  */
 
@@ -34,20 +35,34 @@ require_once('../../config.php');
 require_once($CFG->dirroot.'/blocks/accessibility/lib.php');
 
 $op = required_param('op', PARAM_TEXT);
+$size = optional_param('size', false, PARAM_BOOL);
+$scheme = optional_param('scheme', false, PARAM_BOOL);
 
 if(!accessibility_is_ajax()) {
     $redirect = required_param('redirect', PARAM_TEXT);
 }
+
 switch($op) {
     case 'save':
-        $setting = new stdClass;
+
         if ($setting = get_record('accessibility', 'userid', $USER->id)) {
             // Check if the user's already got a saved setting. If they have, just update it.
-            $setting->fontsize = $USER->fontsize;
+            if ($size && isset($USER->fontsize)) {
+                $setting->fontsize = $USER->fontsize;
+            }
+            if ($scheme && isset($USER->colourscheme)) {
+                $setting->colourscheme = $USER->colourscheme;
+            }
             update_record('accessibility', $setting);
         } else {
+            $setting = new stdClass;
             // Otherwise, create a new record for them.
-            $setting->fontsize = $USER->fontsize;
+            if ($size && isset($USER->fontsize)) {
+                $setting->fontsize = $USER->fontsize;
+            }
+            if ($scheme && isset($USER->colourscheme)) {
+                $setting->colourscheme = $USER->colourscheme;
+            }
             $setting->userid = $USER->id;
             insert_record('accessibility', $setting);
         }
@@ -59,9 +74,24 @@ switch($op) {
         break;
 
     case 'reset':
-        if (record_exists('accessibility', 'userid', $USER->id)) {
+        if ($setting = get_record('accessibility', 'userid', $USER->id)) {
             // if they've got a record, delete it and redirect the user if appropriate.
-            delete_records('accessibility', 'userid', $USER->id);
+            if ($size) {
+                $setting->fontsize = null;
+            } else if (!empty($USER->fontsize)) {
+                $setting->fontsize = $USER->fontsize;
+            }
+            if ($scheme) {
+                $setting->colourscheme = null;
+            } else if (!empty($USER->colourscheme)) {
+                $setting->colourscheme = $USER->colourscheme;
+            }
+
+            if (empty($setting->fontsize) && empty($setting->colourscheme)) {
+                delete_records('accessibility', 'userid', $USER->id);
+            } else {
+                update_record('accessibility', $setting);
+            }
             if(!accessibility_is_ajax()) {
                 $USER->accessabilitymsg = get_string('reset', 'block_accessibility');
             }
@@ -73,8 +103,10 @@ switch($op) {
         }
         break;
 
-    default:
-        header("HTTP/1.0 400 Bad Request");
-
+default:
+    header("HTTP/1.0 400 Bad Request");
 }
+
+
+
 ?>
diff --git a/blocks/accessibility/db/upgrade.php b/blocks/accessibility/db/upgrade.php
index da7610d..79ff521 100644
--- a/blocks/accessibility/db/upgrade.php
+++ b/blocks/accessibility/db/upgrade.php
@@ -27,7 +27,18 @@ function xmldb_block_accessibility_upgrade($oldversion=0) {
 /// this comment lines once this file start handling proper
 /// upgrade code.
 
-if ($result && $oldversion < 2009071000) {
+    if ($result && $oldversion < 2009082500) {
+
+    /// Define field colourscheme to be added to accessibility
+        $table = new XMLDBTable('accessibility');
+        $field = new XMLDBField('colourscheme');
+        $field->setAttributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, null, null, null, 'fontsize');
+
+    /// Launch add field colourscheme
+        $result = $result && add_field($table, $field);
+    }
+
+    if ($result && $oldversion < 2009071000) {
 
     /// Changing type of field fontsize on table accessibility to number
         $table = new XMLDBTable('accessibility');
@@ -39,6 +50,7 @@ if ($result && $oldversion < 2009071000) {
     }
 
     return $result;
+
 }
 
 ?>
\ No newline at end of file
diff --git a/blocks/accessibility/lang/en_utf8/block_accessibility.php b/blocks/accessibility/lang/en_utf8/block_accessibility.php
index f241b61..b4eef77 100644
--- a/blocks/accessibility/lang/en_utf8/block_accessibility.php
+++ b/blocks/accessibility/lang/en_utf8/block_accessibility.php
@@ -9,6 +9,9 @@ $string['resettext'] = 'Reset Text Size (Clears Saved Setting)';
 $string['reset'] = 'Setting Cleared';
 $string['save'] = 'Save Setting';
 $string['saved'] = 'Setting Saved';
-
+$string['col1text'] = 'Deafult Colour Scheme (Clears Saved Setting)';
+$string['col2text'] = 'Lowered Contrast 1';
+$string['col3text'] = 'Lowered Contrast 2';
+$string['col4text'] = 'High Contrast';
 
 ?>
\ No newline at end of file
diff --git a/blocks/accessibility/lib.php b/blocks/accessibility/lib.php
index e67990f..9dfcd9a 100644
--- a/blocks/accessibility/lib.php
+++ b/blocks/accessibility/lib.php
@@ -24,8 +24,9 @@
  * to an AJAX request.                                                 (2)
  *
  * @package   blocks-accessibility                                      (3)
- * @copyright 2009 Mark Johnson                                        (4)
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (5)
+ * @copyright Copyright &copy; 2009 Taunton's College                   (4)
+ * @author  Mark Johnson                                               (5)
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (6)
  */
 
 /**
diff --git a/blocks/accessibility/styles.php b/blocks/accessibility/styles.php
index a5828b3..e4f4ff9 100644
--- a/blocks/accessibility/styles.php
+++ b/blocks/accessibility/styles.php
@@ -23,8 +23,9 @@
  * work as expected.                                                   (2)
  *
  * @package   blocks-accessibility                                      (3)
- * @copyright 2009 Mark Johnson                                        (4)
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (5)
+ * @copyright Copyright &copy; 2009 Taunton's College                   (4)
+ * @author   Mark Johnson                                                (5)
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (6)
  */
 
 
@@ -33,13 +34,13 @@ require_once($CFG->dirroot.'/lib/yui/fonts/fonts-min.css');
 
 ?>
 
-#textresize {
+#textresize,  #colourchange {
 	margin-left:auto;
     margin-right:auto;
     width: 151px;
 }
 
-#textresize .outer {
+#textresize .outer,  #colourchange .outer {
     width: 32px;
     height: 32px;
     border: 1px solid black;
@@ -53,34 +54,39 @@ require_once($CFG->dirroot.'/lib/yui/fonts/fonts-min.css');
     position: relative;
 }
 
+#textresize .outer *,  #colourchange .outer * {
+    background-color: #fcfcfc !important;
+    color: #000 !important;
+}
+
 /* Verticaly centering text achieved using Vertical Center Solution From
 http://www.jakpsatweb.cz/css/css-vertical-center-solution.html
 Still needs some work in IE 6/7 */
 
-#textresize .outer[id] {
+#textresize .outer[id], #colourchange .outer[id] {
     display: table;
     position: static;
     list-style: none;
 }
 
-#textresize div.middle{
+#textresize div.middle, #colourchange div.middle {
     position: absolute;
 }
 
-#textresize div.middle[class] {
+#textresize div.middle[class], #colourchange div.middle[class] {
     display: table-cell;
     vertical-align: middle;
     position: static;
 }
 
-#textresize div.inner{
+#textresize div.inner, #colourchange div.inner{
 	position: relative;
     top: 25%;
     text-align:center;
 }
 
 #textresize .outer:hover {
-    background-color: #9cf;
+    background-color: #9cf !important;
     text-decoration:none;
 }
 
@@ -90,7 +96,7 @@ Still needs some work in IE 6/7 */
 }
 
 #textresize .outer.disabled:hover {
-    background-color: transparent;
+    background-color: #fcfcfc !important;
 }
 
 
@@ -106,8 +112,33 @@ Still needs some work in IE 6/7 */
     font-size: 20px;
 
 }
-#textresize .outer#reset, #textresize .outer#inc, #textresize .outer#save {
+#textresize .right, #colourchange .right {
 	margin-left: 5px;
 }
 
+#colourchange .row {
+    margin-top: 5px;
+}
+
+#colourchange .outer {
+	font-size: 16px;
+}
+
+#colourchange .outer:hover {
+    font-weight: bold;
+}
+
+#colourchange #colour2 * {
+    background-color: #FFFFCC !important;
+}
+
+#colourchange #colour3 * {
+    background-color: #99CCFF !important;
+}
+
+#colourchange #colour4 * {
+    background-color: #000000 !important;
+    color: #ffff00 !important;
+}
+
 ?>
\ No newline at end of file
diff --git a/blocks/accessibility/userstyles.php b/blocks/accessibility/userstyles.php
index f28c071..bd27262 100644
--- a/blocks/accessibility/userstyles.php
+++ b/blocks/accessibility/userstyles.php
@@ -19,34 +19,74 @@
  * Sets per-user styles                                                (1)
  *
  * This file is the cornerstone of the block - when the page loads, it
- * checks if the user has a custom setting for the font size (either in
- * the session or the database) and creates a stylesheet to override
- * the standard styles with this setting. This requires a <link> tag to
- * be added to the header.html of any theme that this block needs to
+ * checks if the user has a custom settings for the font size and colour
+ * scheme (either in the session or the database) and creates a stylesheet
+ * to override the standard styles with this setting. This requires a <link>
+ * tag to be added to the header.html of any theme that this block needs to
  * work with.                                                           (2)
  *
  * @see block_accessibility.php                                        (3)
  * @package   blocks-accessibility                                      (4)
- * @copyright 2009 Mark Johnson                                        (5)
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (6)
+ * @copyright Copyright &copy; 2009 Taunton's College                   (5)
+ * @author Mark Johnson                                                 (6)
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (7)
  */
 
 require_once('../../config.php');
 require_once($CFG->dirroot.'/blocks/accessibility/lib.php');
 header('Content-Type: text/css');
 // First, check the session to see if the user's overridden the default/saved setting
+$options = get_record('accessibility', 'userid', $USER->id);
+
 if(!empty($USER->fontsize)) {
 
-    // Echo out CSS for the body element. Use !important to override any other external
-    // stylesheets.
-    echo 'body {font-size: '.$USER->fontsize.'% !important;}';
+    $fontsize = $USER->fontsize;
+
+} else if (!empty($options->fontsize)) {
+    $fontsize = $options->fontsize;
+}
+if(!empty($USER->colourscheme)) {
 
-} else {
-    // If there's no override for the current session, see if they've got a saved setting.
-    if($options = get_record('accessibility', 'userid', $USER->id)) {
-        // If they've got a saved setting, use it
-        echo 'body {font-size: '.$options->fontsize.'% !important;}';
+    $colourscheme = $USER->colourscheme;
+
+} else if (!empty($options->colourscheme)) {
+
+     $colourscheme = $options->colourscheme;
+
+}
+
+if (!empty($fontsize) || !empty($colourscheme)) {
+// Echo out CSS for the body element. Use !important to override any other external
+    // stylesheets.
+    if (!empty($fontsize)) {
+        echo 'body {font-size: '.$fontsize.'% !important;}';
     }
+    if (!empty($colourscheme)) {
+        switch ($colourscheme) {
+            case 2:
+                echo '* {background-color: #FFFFCC !important;};
+                    forumpost .topic {background-image: none !important;}
+                    * {background-image: none !important;}';
+                break;
+
+            case 3:
+                echo '* {background-color: #99CCFF !important;}
+                    forumpost .topic {background-image: none !important;}
+                    * {background-image: none !important;}';
+                break;
+
+            case 4:
+                echo '* {color: #ffff00 !important;}
+                    * {background-color: #000000 !important;}
+                    * {background-image: none !important;}
+                    #content a, .tabrow0 span {color: #ff0000 !important;}
+                    .tabrow0 span:hover {text-decoration: underline;}
+                    #textresize .outer,  #colourchange .outer {border-color:#fff !important;}';
+                break;
 
+        }
+
+    }
 }
+
 ?>
