From 78946b9bdb1299a21f00b88d81c73ad8700c951e Mon Sep 17 00:00:00 2001
From: Petr Skoda <skodak@moodle.org>
Date: Wed, 16 Dec 2009 18:00:58 +0000
Subject: [PATCH] MDL-20204 first batch of major theme changes, some
 regressions are still there, expect more changes and improvements soon; see
 tracker for details and list of subtasks

---
 admin/bloglevelupgrade.php                    |    2 +-
 admin/cli/install.php                         |    2 -
 admin/generator.php                           |    2 +-
 admin/index.php                               |    4 +-
 admin/roles/assign.php                        |    1 -
 admin/settings/appearance.php                 |   12 +
 admin/settings/development.php                |    1 -
 admin/settings/plugins.php                    |   14 +-
 admin/upgradesettings.php                     |    2 +-
 admin/webservice/service_users.php            |    2 -
 auth/shibboleth/login.php                     |    4 +-
 backup/restorelib.php                         |    7 +-
 .../block_global_navigation_tree.php          |    1 +
 blocks/moodleblock.class.php                  |    2 +-
 blocks/rss_client/editfeed.php                |    2 +-
 blocks/rss_client/managefeeds.php             |    2 +-
 blocks/rss_client/viewfeed.php                |    2 +-
 .../block_settings_navigation_tree.php        |    1 +
 blocks/upgrade.txt                            |    3 +
 calendar/lib.php                              |    2 +-
 course/edit.php                               |    2 +-
 course/importstudents.html                    |    1 -
 course/lib.php                                |   16 +-
 course/modedit.php                            |    2 +-
 course/report/log/live.php                    |    2 +-
 course/resources.php                          |    2 +-
 course/view.php                               |    4 +-
 enrol/manual/enrol.php                        |    4 +-
 grade/edit/outcome/course.php                 |    1 -
 grade/edit/tree/index.php                     |    1 -
 grade/lib.php                                 |   10 +-
 grade/report/grader/index.php                 |    1 -
 grade/report/grader/lib.php                   |    4 +-
 grade/report/styles.css                       |    4 -
 group/assign.php                              |    1 -
 group/members.php                             |    1 -
 help.php                                      |    2 +-
 index.php                                     |    9 +-
 install.php                                   |    3 -
 iplookup/index.php                            |    2 +-
 lang/en_utf8/admin.php                        |    4 +
 lang/en_utf8/theme_standard.php               |    4 +-
 lib/adminlib.php                              |    8 +-
 lib/ajax/ajaxlib.php                          |  169 +-
 lib/ajax/simpletest/testajaxlib.php           |   20 +-
 lib/blocklib.php                              |   14 +-
 lib/configonlylib.php                         |   55 +
 lib/db/install.php                            |    4 +-
 lib/db/upgrade.php                            |    2 +-
 lib/deprecatedlib.php                         |   63 +-
 lib/editor/tinymce/editor_styles.css          |    0
 lib/editor/tinymce/lib.php                    |    4 +-
 lib/filelib.php                               |    5 +-
 lib/installlib.php                            |    4 +-
 lib/javascript-navigation.js                  |    6 +-
 lib/javascript-static.js                      |   14 +
 lib/moodlelib.php                             |  137 +-
 lib/navigationlib.php                         |    2 +-
 lib/outputcomponents.php                      |    4 +-
 lib/outputfactories.php                       |  179 +-
 lib/outputlib.php                             | 1486 ++++++-----
 lib/outputrenderers.php                       |  429 +---
 lib/pagelib.php                               |   64 +-
 lib/session-test.php                          |    2 +-
 lib/setup.php                                 |   16 +-
 .../admin_index.php_get_string.log.php        |    2 -
 .../admin_index.php_old_get_string.log.php    |    2 -
 lib/simpletest/testoutputlib.php              |  424 +---
 lib/simpletest/testpagelib_moodlepage.php     |   14 +-
 lib/upgradelib.php                            |    2 +-
 lib/weblib.php                                |   68 +-
 lib/yui/readme_moodle.txt                     |    4 +-
 .../reset-fonts-grids/reset-fonts-grids.css   |  412 +--
 login/index.php                               |    1 +
 message/discussion.php                        |    6 +-
 message/index.php                             |    4 +-
 message/messages.php                          |    2 +-
 message/refresh.php                           |    2 +-
 message/send.php                              |    2 +-
 message/user.php                              |    2 +-
 mod/assignment/pix/icon.gif                   |  Bin 0 -> 132 bytes
 mod/assignment/type/online/file.php           |    2 +-
 mod/chat/chat.css                             |   44 -
 mod/chat/gui_ajax/index.php                   |    5 +-
 mod/chat/gui_basic/index.php                  |    3 +-
 mod/chat/gui_header_js/chatinput.php          |    2 +-
 mod/chat/gui_header_js/jsupdate.php           |    5 +-
 mod/chat/gui_header_js/jsupdated.php          |    5 +-
 mod/chat/gui_header_js/users.php              |    2 +-
 mod/chat/pix/icon.gif                         |  Bin 0 -> 99 bytes
 mod/choice/{ => pix}/icon.gif                 |  Bin
 mod/choice/styles.php                         |    9 -
 mod/data/lib.php                              |    2 +-
 mod/data/pix/icon.gif                         |  Bin 0 -> 256 bytes
 mod/feedback/lib.php                          |   10 +-
 mod/feedback/pix/icon.gif                     |  Bin 0 -> 107 bytes
 mod/folder/locallib.php                       |   10 +-
 mod/folder/{ => pix}/icon.gif                 |  Bin
 mod/forum/forum.css                           |   26 -
 mod/forum/lib.php                             |   12 +-
 mod/forum/pix/icon.gif                        |  Bin 0 -> 132 bytes
 mod/forum/subscribers.php                     |    1 -
 mod/glossary/lib.php                          |    8 +-
 mod/glossary/pix/asc.gif                      |  Bin 0 -> 63 bytes
 mod/glossary/pix/comment.gif                  |  Bin 0 -> 78 bytes
 mod/glossary/pix/desc.gif                     |  Bin 0 -> 61 bytes
 mod/glossary/pix/export.gif                   |  Bin 0 -> 90 bytes
 mod/glossary/pix/icon.gif                     |  Bin 0 -> 172 bytes
 mod/glossary/pix/minus.gif                    |  Bin 0 -> 67 bytes
 mod/glossary/pix/print.gif                    |  Bin 0 -> 125 bytes
 mod/glossary/view.php                         |    2 +-
 mod/hotpot/lib.php                            |    2 +-
 mod/hotpot/pix/icon.gif                       |  Bin 0 -> 415 bytes
 mod/imscp/{ => pix}/icon.gif                  |  Bin
 mod/imscp/view.php                            |    5 +-
 mod/label/{ => pix}/icon.gif                  |  Bin
 mod/lesson/pix/icon.gif                       |  Bin 0 -> 106 bytes
 mod/lesson/renderer.php                       |    1 -
 mod/page/{ => pix}/icon.gif                   |  Bin
 mod/page/view.php                             |    2 +-
 mod/quiz/edit.php                             |    2 +-
 mod/quiz/editlib.php                          |    1 -
 mod/quiz/lib.php                              |    2 +-
 mod/quiz/pix/icon.gif                         |  Bin 0 -> 101 bytes
 mod/quiz/report/responses/report.php          |    1 -
 mod/resource/locallib.php                     |    2 +-
 mod/resource/pix/icon.gif                     |  Bin 0 -> 892 bytes
 mod/scorm/datamodels/aicclib.php              |   14 +-
 mod/scorm/datamodels/scorm_12lib.php          |   14 +-
 mod/scorm/datamodels/scorm_13lib.php          |   14 +-
 mod/scorm/lib.php                             |    8 +-
 mod/scorm/loadSCO.php                         |    2 +-
 mod/scorm/pix/icon.gif                        |  Bin 0 -> 378 bytes
 mod/scorm/report.php                          |    4 +-
 mod/survey/{ => pix}/icon.gif                 |  Bin
 mod/upgrade.txt                               |    4 +
 mod/url/locallib.php                          |    2 +-
 mod/url/pix/icon.gif                          |  Bin 0 -> 371 bytes
 mod/wiki/{ => pix}/icon.gif                   |  Bin
 my/index.php                                  |    1 +
 pix/smartpix.php                              |  280 ---
 question/edit.php                             |    2 -
 question/preview.php                          |    2 +-
 question/type/questiontype.php                |    7 -
 repository/filepicker.php                     |    2 +-
 repository/lib.php                            |    5 +-
 repository/local/repository.class.php         |    2 +-
 repository/repository.css                     |   78 -
 search/query.php                              |    4 +-
 tag/edit.php                                  |    2 +-
 theme/anomaly/styles.php                      |    3 +-
 theme/base/config.php                         |  123 +
 .../layout/embedded.php}                      |   10 +-
 theme/base/layout/general.php                 |   77 +
 theme/base/layout/home.php                    |   73 +
 theme/{standard => base/pix}/favicon.ico      |  Bin
 theme/base/pix/screenshot.jpg                 |  Bin 0 -> 156176 bytes
 theme/base/style/block_calendar_month.css     |   29 +
 theme/base/style/blocks.css                   |  134 +
 theme/base/style/core.css                     |  136 +
 theme/base/style/pagelayout.css               |  162 ++
 theme/chameleon/styles.php                    |    3 +-
 theme/colors/styles.php                       |    3 +-
 theme/cornflower/styles.php                   |    3 +-
 theme/custom_corners/lib.php                  |   26 +
 theme/custom_corners/styles.php               |    3 +-
 theme/formal_white/styles.php                 |    3 +-
 theme/image.php                               |  175 ++
 theme/index.php                               |   84 +-
 theme/lines/styles.php                        |    3 +-
 theme/metal/styles.php                        |    3 +-
 theme/oceanblue/styles.php                    |    3 +-
 theme/orangewhite/styles.php                  |    3 +-
 theme/orangewhitepda/styles.php               |    3 +-
 theme/preview.php                             |   50 -
 theme/standard/README.html                    |   15 -
 theme/standard/config.php                     |  135 +-
 theme/standard/footer.html                    |   39 -
 theme/standard/gradient.jpg                   |  Bin 354 -> 0 bytes
 theme/standard/header.html                    |   45 -
 .../{layout-popup.php => layout/embedded.php} |    5 +-
 .../frametop.php}                             |    5 +-
 .../{layout-home.php => layout/home.php}      |    9 +-
 theme/standard/layout/minimal.php             |   33 +
 .../{layout.php => layout/normal.php}         |    4 +-
 theme/standard/meta.php                       |    6 -
 .../pix}/favicon.ico                          |  Bin
 .../standard/{ => pix}/gradient_vertical.jpg  |  Bin
 theme/standard/{ => pix}/screenshot.jpg       |  Bin
 theme/standard/{ => pix}/shadow_corners.png   |  Bin
 .../standard/{ => pix}/shadow_left_right.png  |  Bin
 .../standard/{ => pix}/shadow_top_bottom.png  |  Bin
 theme/standard/rtl.css                        |  643 -----
 .../standard/style/block_blog_tags.css        |    0
 theme/standard/style/block_calendar_month.css |   23 +
 .../style/block_calendar_upcoming.css         |    0
 theme/standard/style/block_course_summary.css |    7 +
 .../standard/style/block_login.css            |    0
 .../standard/style/block_news_items.css       |    0
 .../standard/style/block_quiz_results.css     |    2 +-
 theme/standard/style/block_rss_client.css     |   54 +
 .../standard/style/block_search_forums.css    |    0
 theme/standard/style/block_tags.css           |  116 +
 theme/standard/style/blog_tags.css            |   68 +
 .../standard/style/gradebook.css              |   24 +-
 theme/standard/style/mod_assignment.css       |  202 ++
 theme/standard/style/mod_chat.css             |  164 ++
 theme/standard/style/mod_choice.css           |   56 +
 theme/standard/style/mod_data.css             |   63 +
 theme/standard/style/mod_feedback.css         |    9 +
 theme/standard/style/mod_folder.css           |   10 +
 theme/standard/style/mod_forum.css            |  361 +++
 theme/standard/style/mod_glossary.css         |  262 ++
 .../standard/style/mod_lesson.css             |   14 +
 theme/standard/style/mod_page.css             |    8 +
 theme/standard/style/mod_quiz.css             | 1206 +++++++++
 theme/standard/style/mod_resource.css         |   52 +
 theme/standard/style/mod_scorm.css            |  160 ++
 theme/standard/style/mod_survey.css           |   96 +
 theme/standard/style/mod_wiki.css             |   35 +
 theme/standard/{ => style}/styles_color.css   |  402 +--
 theme/standard/{ => style}/styles_fonts.css   |  285 ---
 theme/standard/{ => style}/styles_layout.css  | 2202 +++--------------
 theme/standard/{ => style}/styles_moz.css     |    0
 theme/standard/style/styles_tinymce.css       |    5 +
 theme/standard/styles.php                     |   29 -
 theme/standard/styles_ie6.css                 |  102 -
 theme/standard/styles_ie7.css                 |   64 -
 theme/standardblue/config.php                 |  105 -
 theme/standardblue/footer.html                |   19 -
 theme/standardblue/gradient.jpg               |  Bin 377 -> 0 bytes
 theme/standardblue/gradients.css              |   19 -
 theme/standardblue/header.html                |   45 -
 theme/standardblue/styles.php                 |   29 -
 theme/standardgreen/config.php                |  105 -
 theme/standardgreen/favicon.ico               |  Bin 894 -> 0 bytes
 theme/standardgreen/footer.html               |   19 -
 theme/standardgreen/gradient.jpg              |  Bin 398 -> 0 bytes
 theme/standardgreen/gradients.css             |   19 -
 theme/standardgreen/header.html               |   45 -
 theme/standardgreen/styles.php                |   29 -
 theme/standardlogo/README.html                |   13 -
 theme/standardlogo/config.php                 |  105 -
 theme/standardlogo/favicon.ico                |  Bin 894 -> 0 bytes
 theme/standardlogo/footer.html                |   19 -
 theme/standardlogo/gradient.jpg               |  Bin 379 -> 0 bytes
 theme/standardlogo/header.html                |   59 -
 theme/standardlogo/logo.gif                   |  Bin 6457 -> 0 bytes
 theme/standardlogo/styles.php                 |   29 -
 theme/standardred/config.php                  |  105 -
 theme/standardred/favicon.ico                 |  Bin 894 -> 0 bytes
 theme/standardred/footer.html                 |   19 -
 theme/standardred/gradient.jpg                |  Bin 360 -> 0 bytes
 theme/standardred/gradients.css               |   19 -
 theme/standardred/header.html                 |   45 -
 theme/standardred/styles.php                  |   29 -
 theme/standardwhite/config.php                |  112 -
 theme/standardwhite/favicon.ico               |  Bin 894 -> 0 bytes
 theme/standardwhite/footer.html               |   32 -
 theme/standardwhite/gradient.jpg              |  Bin 354 -> 0 bytes
 theme/standardwhite/gradients.css             |   23 -
 theme/standardwhite/header.html               |   45 -
 theme/standardwhite/styles.php                |   29 -
 theme/styles.php                              |  246 +-
 theme/styles_debug.php                        |   96 +
 theme/wood/styles.php                         |    3 +-
 user/editadvanced.php                         |    2 +-
 webservice/wsdoc.php                          |    4 +-
 268 files changed, 5966 insertions(+), 8029 deletions(-)
 delete mode 100644 grade/report/styles.css
 create mode 100644 lib/configonlylib.php
 create mode 100644 lib/editor/tinymce/editor_styles.css
 create mode 100755 mod/assignment/pix/icon.gif
 delete mode 100644 mod/chat/chat.css
 create mode 100755 mod/chat/pix/icon.gif
 rename mod/choice/{ => pix}/icon.gif (100%)
 delete mode 100644 mod/choice/styles.php
 create mode 100755 mod/data/pix/icon.gif
 create mode 100644 mod/feedback/pix/icon.gif
 rename mod/folder/{ => pix}/icon.gif (100%)
 delete mode 100644 mod/forum/forum.css
 create mode 100755 mod/forum/pix/icon.gif
 create mode 100644 mod/glossary/pix/asc.gif
 create mode 100644 mod/glossary/pix/comment.gif
 create mode 100644 mod/glossary/pix/desc.gif
 create mode 100644 mod/glossary/pix/export.gif
 create mode 100644 mod/glossary/pix/icon.gif
 create mode 100644 mod/glossary/pix/minus.gif
 create mode 100644 mod/glossary/pix/print.gif
 create mode 100644 mod/hotpot/pix/icon.gif
 rename mod/imscp/{ => pix}/icon.gif (100%)
 rename mod/label/{ => pix}/icon.gif (100%)
 create mode 100755 mod/lesson/pix/icon.gif
 rename mod/page/{ => pix}/icon.gif (100%)
 create mode 100755 mod/quiz/pix/icon.gif
 create mode 100644 mod/resource/pix/icon.gif
 create mode 100755 mod/scorm/pix/icon.gif
 rename mod/survey/{ => pix}/icon.gif (100%)
 create mode 100644 mod/url/pix/icon.gif
 rename mod/wiki/{ => pix}/icon.gif (100%)
 delete mode 100644 pix/smartpix.php
 delete mode 100644 repository/repository.css
 create mode 100644 theme/base/config.php
 rename theme/{standard/layout-embedded.php => base/layout/embedded.php} (72%)
 create mode 100644 theme/base/layout/general.php
 create mode 100644 theme/base/layout/home.php
 rename theme/{standard => base/pix}/favicon.ico (100%)
 create mode 100755 theme/base/pix/screenshot.jpg
 create mode 100644 theme/base/style/block_calendar_month.css
 create mode 100644 theme/base/style/blocks.css
 create mode 100644 theme/base/style/core.css
 create mode 100644 theme/base/style/pagelayout.css
 create mode 100644 theme/custom_corners/lib.php
 create mode 100644 theme/image.php
 delete mode 100644 theme/preview.php
 delete mode 100644 theme/standard/README.html
 delete mode 100644 theme/standard/footer.html
 delete mode 100755 theme/standard/gradient.jpg
 delete mode 100644 theme/standard/header.html
 rename theme/standard/{layout-popup.php => layout/embedded.php} (85%)
 rename theme/standard/{layout-topframe.php => layout/frametop.php} (85%)
 rename theme/standard/{layout-home.php => layout/home.php} (90%)
 create mode 100644 theme/standard/layout/minimal.php
 rename theme/standard/{layout.php => layout/normal.php} (93%)
 delete mode 100644 theme/standard/meta.php
 rename theme/{standardblue => standard/pix}/favicon.ico (100%)
 rename theme/standard/{ => pix}/gradient_vertical.jpg (100%)
 rename theme/standard/{ => pix}/screenshot.jpg (100%)
 rename theme/standard/{ => pix}/shadow_corners.png (100%)
 rename theme/standard/{ => pix}/shadow_left_right.png (100%)
 rename theme/standard/{ => pix}/shadow_top_bottom.png (100%)
 delete mode 100755 theme/standard/rtl.css
 rename blocks/blog_tags/styles.php => theme/standard/style/block_blog_tags.css (100%)
 create mode 100644 theme/standard/style/block_calendar_month.css
 rename blocks/calendar_upcoming/styles.php => theme/standard/style/block_calendar_upcoming.css (100%)
 create mode 100644 theme/standard/style/block_course_summary.css
 rename blocks/login/styles.php => theme/standard/style/block_login.css (100%)
 rename blocks/news_items/styles.php => theme/standard/style/block_news_items.css (100%)
 rename blocks/quiz_results/styles.php => theme/standard/style/block_quiz_results.css (99%)
 create mode 100644 theme/standard/style/block_rss_client.css
 rename blocks/search_forums/styles.php => theme/standard/style/block_search_forums.css (100%)
 create mode 100644 theme/standard/style/block_tags.css
 create mode 100644 theme/standard/style/blog_tags.css
 rename grade/edit/tree/tree.css => theme/standard/style/gradebook.css (85%)
 create mode 100644 theme/standard/style/mod_assignment.css
 create mode 100644 theme/standard/style/mod_chat.css
 create mode 100644 theme/standard/style/mod_choice.css
 create mode 100644 theme/standard/style/mod_data.css
 create mode 100644 theme/standard/style/mod_feedback.css
 create mode 100644 theme/standard/style/mod_folder.css
 create mode 100644 theme/standard/style/mod_forum.css
 create mode 100644 theme/standard/style/mod_glossary.css
 rename mod/lesson/lesson.css => theme/standard/style/mod_lesson.css (91%)
 create mode 100644 theme/standard/style/mod_page.css
 create mode 100644 theme/standard/style/mod_quiz.css
 create mode 100644 theme/standard/style/mod_resource.css
 create mode 100644 theme/standard/style/mod_scorm.css
 create mode 100644 theme/standard/style/mod_survey.css
 create mode 100644 theme/standard/style/mod_wiki.css
 rename theme/standard/{ => style}/styles_color.css (67%)
 rename theme/standard/{ => style}/styles_fonts.css (72%)
 rename theme/standard/{ => style}/styles_layout.css (67%)
 rename theme/standard/{ => style}/styles_moz.css (100%)
 create mode 100644 theme/standard/style/styles_tinymce.css
 delete mode 100644 theme/standard/styles.php
 delete mode 100755 theme/standard/styles_ie6.css
 delete mode 100755 theme/standard/styles_ie7.css
 delete mode 100644 theme/standardblue/config.php
 delete mode 100644 theme/standardblue/footer.html
 delete mode 100755 theme/standardblue/gradient.jpg
 delete mode 100644 theme/standardblue/gradients.css
 delete mode 100644 theme/standardblue/header.html
 delete mode 100644 theme/standardblue/styles.php
 delete mode 100644 theme/standardgreen/config.php
 delete mode 100644 theme/standardgreen/favicon.ico
 delete mode 100644 theme/standardgreen/footer.html
 delete mode 100755 theme/standardgreen/gradient.jpg
 delete mode 100644 theme/standardgreen/gradients.css
 delete mode 100644 theme/standardgreen/header.html
 delete mode 100644 theme/standardgreen/styles.php
 delete mode 100644 theme/standardlogo/README.html
 delete mode 100644 theme/standardlogo/config.php
 delete mode 100644 theme/standardlogo/favicon.ico
 delete mode 100644 theme/standardlogo/footer.html
 delete mode 100755 theme/standardlogo/gradient.jpg
 delete mode 100644 theme/standardlogo/header.html
 delete mode 100644 theme/standardlogo/logo.gif
 delete mode 100644 theme/standardlogo/styles.php
 delete mode 100644 theme/standardred/config.php
 delete mode 100644 theme/standardred/favicon.ico
 delete mode 100644 theme/standardred/footer.html
 delete mode 100755 theme/standardred/gradient.jpg
 delete mode 100644 theme/standardred/gradients.css
 delete mode 100644 theme/standardred/header.html
 delete mode 100644 theme/standardred/styles.php
 delete mode 100644 theme/standardwhite/config.php
 delete mode 100644 theme/standardwhite/favicon.ico
 delete mode 100644 theme/standardwhite/footer.html
 delete mode 100755 theme/standardwhite/gradient.jpg
 delete mode 100644 theme/standardwhite/gradients.css
 delete mode 100644 theme/standardwhite/header.html
 delete mode 100644 theme/standardwhite/styles.php
 create mode 100644 theme/styles_debug.php

diff --git a/admin/bloglevelupgrade.php b/admin/bloglevelupgrade.php
index 7d2c9e4864..5b38998936 100644
--- a/admin/bloglevelupgrade.php
+++ b/admin/bloglevelupgrade.php
@@ -8,7 +8,7 @@ require_once($CFG->dirroot.'/mod/forum/lib.php');
 require_once($CFG->libdir.'/adminlib.php');
 
 admin_externalpage_setup('bloglevelupgrade');
-$PAGE->set_generaltype('maintenance');
+$PAGE->set_pagelayout('maintenance');
 
 $go = optional_param('go', 0, PARAM_BOOL);
 
diff --git a/admin/cli/install.php b/admin/cli/install.php
index c4b8e5eb7e..eb04b8b596 100644
--- a/admin/cli/install.php
+++ b/admin/cli/install.php
@@ -110,7 +110,6 @@ $CFG->dirroot              = str_replace('\\', '/', dirname(dirname(dirname(__FI
 $CFG->libdir               = "$CFG->dirroot/lib";
 $CFG->wwwroot              = "http://localhost";
 $CFG->httpswwwroot         = $CFG->wwwroot;
-$CFG->httpsthemewww        = $CFG->wwwroot;
 $CFG->dataroot             = str_replace('\\', '/', dirname(dirname(dirname(__FILE__))).'/moodledata');
 $CFG->docroot              = 'http://docs.moodle.org';
 $CFG->directorypermissions = 00777;
@@ -262,7 +261,6 @@ if ($interactive) {
 }
 $CFG->wwwroot       = $wwwroot;
 $CFG->httpswwwroot  = $CFG->wwwroot;
-$CFG->httpsthemewww = $CFG->wwwroot;
 
 
 //We need dataroot before lang download
diff --git a/admin/generator.php b/admin/generator.php
index d743cd295e..63f48c5b6f 100755
--- a/admin/generator.php
+++ b/admin/generator.php
@@ -1334,7 +1334,7 @@ if (isset($argv) && isset($argc)) {
     require_capability('moodle/site:config', $systemcontext);
 
     $PAGE->set_url($CFG->wwwroot.'/admin/generator.php');
-    $PAGE->set_generaltype('form');
+    $PAGE->set_pagelayout('form');
     $generator = new generator_web();
     $generator->setup();
     $generator->display();
diff --git a/admin/index.php b/admin/index.php
index 909bfe3d69..46c4bd4ab7 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -107,7 +107,7 @@ $origxmlstrictheaders = !empty($CFG->xmlstrictheaders);
 $CFG->xmlstrictheaders = false;
 
 if (!core_tables_exist()) {
-    $PAGE->set_generaltype('maintenance');
+    $PAGE->set_pagelayout('maintenance');
 
     // fake some settings
     $CFG->docroot = 'http://docs.moodle.org';
@@ -188,7 +188,7 @@ if (empty($CFG->version)) {
 }
 
 if ($version > $CFG->version) {  // upgrade
-    $PAGE->set_generaltype('maintenance');
+    $PAGE->set_pagelayout('maintenance');
 
     $a->oldversion = "$CFG->release ($CFG->version)";
     $a->newversion = "$release ($version)";
diff --git a/admin/roles/assign.php b/admin/roles/assign.php
index c9fbbc1a22..744cee1860 100755
--- a/admin/roles/assign.php
+++ b/admin/roles/assign.php
@@ -310,7 +310,6 @@
         }
 
     /// Print the form.
-        check_theme_arrows();
 ?>
 <form id="assignform" method="post" action="<?php echo $baseurl . '&amp;roleid=' . $roleid ?>"><div>
   <input type="hidden" name="sesskey" value="<?php echo sesskey() ?>" />
diff --git a/admin/settings/appearance.php b/admin/settings/appearance.php
index 9675963461..180c98dc02 100644
--- a/admin/settings/appearance.php
+++ b/admin/settings/appearance.php
@@ -8,6 +8,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     // "themesettings" settingpage
     $temp = new admin_settingpage('themesettings', get_string('themesettings', 'admin'));
     $temp->add(new admin_setting_configtext('themelist', get_string('themelist', 'admin'), get_string('configthemelist','admin'), '', PARAM_NOTAGS));
+    $setting = new admin_setting_configcheckbox('themedesignermode', get_string('themedesignermode', 'admin'), get_string('configthemedesignermode', 'admin'), 0);
+    $setting->set_updatedcallback('theme_reset_all_caches');
+    $temp->add($setting);
     $temp->add(new admin_setting_configcheckbox('allowuserthemes', get_string('allowuserthemes', 'admin'), get_string('configallowuserthemes', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('allowcoursethemes', get_string('allowcoursethemes', 'admin'), get_string('configallowcoursethemes', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('allowcategorythemes',  get_string('allowcategorythemes', 'admin'), get_string('configallowcategorythemes', 'admin'), 0));
@@ -23,6 +26,14 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $ADMIN->add('themes', $temp);
     $ADMIN->add('themes', new admin_externalpage('themeselector', get_string('themeselector','admin'), $CFG->wwwroot . '/theme/index.php'));
 
+    // settings for each theme
+    foreach (get_plugin_list('theme') as $theme => $themedir) {
+        $settings_path = "$themedir/settings.php";
+        if (file_exists($settings_path)) {
+            include($settings_path);
+        }
+    }
+
     // calendar
     $temp = new admin_settingpage('calendar', get_string('calendarsettings','admin'));
     $temp->add(new admin_setting_special_adminseesall());
@@ -132,3 +143,4 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $ADMIN->add('appearance', new admin_externalpage('managetags', get_string('managetags', 'tag'), "$CFG->wwwroot/tag/manage.php"));
 
 } // end of speedup
+
diff --git a/admin/settings/development.php b/admin/settings/development.php
index 6fb46f29f3..70ad9c9ec3 100644
--- a/admin/settings/development.php
+++ b/admin/settings/development.php
@@ -9,7 +9,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
 
     $temp = new admin_settingpage('experimentalsettings', get_string('experimentalsettings', 'admin'));
     $temp->add(new admin_setting_configcheckbox('enableglobalsearch', get_string('enableglobalsearch', 'admin'), get_string('configenableglobalsearch', 'admin'), 0));
-    $temp->add(new admin_setting_configcheckbox('smartpix', get_string('smartpix', 'admin'), get_string('configsmartpix', 'admin'), 0));
     $item = new admin_setting_configcheckbox('enablehtmlpurifier', get_string('enablehtmlpurifier', 'admin'), get_string('configenablehtmlpurifier', 'admin'), 0);
     $item->set_updatedcallback('reset_text_filters_cache');
     $temp->add($item);
diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php
index 852f80aaab..f5d6f09a60 100644
--- a/admin/settings/plugins.php
+++ b/admin/settings/plugins.php
@@ -4,10 +4,7 @@
  * Please note that is file is always loaded last - it means that you can inject entries into other categories too.
  */
 
-if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) {
-
-    require_once($CFG->libdir. '/portfoliolib.php');
-
+if ($hassiteconfig) {
     $ADMIN->add('modules', new admin_category('modsettings', get_string('activitymodules')));
     $ADMIN->add('modsettings', new admin_page_managemods());
     if ($modules = $DB->get_records('modules')) {
@@ -136,6 +133,9 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
         }
     }
 
+
+    //== Portfolio settings ==
+    require_once($CFG->libdir. '/portfoliolib.php');
     $catname = get_string('portfolios', 'portfolio');
     $manage = get_string('manageportfolios', 'portfolio');
     $url = "$CFG->wwwroot/$CFG->admin/portfolio.php";
@@ -222,9 +222,7 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
     $ADMIN->add('repositorysettings', new admin_externalpage('repositoryinstanceedit',
         get_string('editrepositoryinstance', 'repository'), $url, 'moodle/site:config', true),
         '', $url);
-    foreach (repository::get_types()
-        as $repositorytype)
-    {
+    foreach (repository::get_types() as $repositorytype) {
       //display setup page for plugins with: general options or multiple instances (e.g. has instance config)
       $typeoptionnames = repository::static_function($repositorytype->get_typename(), 'get_type_option_names');
       $instanceoptionnames = repository::static_function($repositorytype->get_typename(), 'get_instance_option_names');
@@ -236,6 +234,7 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
                         'moodle/site:config');
         }
     }
+}
 
     // Web services
     $ADMIN->add('modules', new admin_category('webservicesettings', get_string('webservices', 'webservice')));
@@ -264,6 +263,7 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
         }
     }
 
+if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) {
     // Question type settings.
     $ADMIN->add('modules', new admin_category('qtypesettings', get_string('questiontypes', 'admin')));
     $ADMIN->add('qtypesettings', new admin_page_manageqtypes());
diff --git a/admin/upgradesettings.php b/admin/upgradesettings.php
index 4a800a4851..da9b3bf2b9 100644
--- a/admin/upgradesettings.php
+++ b/admin/upgradesettings.php
@@ -13,7 +13,7 @@ require_login(0, false);
 
 $adminroot = admin_get_root(); // need all settings
 admin_externalpage_setup('upgradesettings'); // now hidden page
-$PAGE->set_generaltype('maintenance');
+$PAGE->set_pagelayout('maintenance');
 
 // now we'll deal with the case that the admin has submitted the form with new settings
 if ($data = data_submitted() and confirm_sesskey()) {
diff --git a/admin/webservice/service_users.php b/admin/webservice/service_users.php
index 4e79e3b1db..0b022d858e 100644
--- a/admin/webservice/service_users.php
+++ b/admin/webservice/service_users.php
@@ -73,8 +73,6 @@ $alloweduserselector = new service_user_selector('removeselect', array('servicei
                 }
         }
 /// Print the form.
-    check_theme_arrows();
-
 /// display the UI
 ?>
 <form id="assignform" method="post" action="service_users.php?id=<?php echo $id ?>"><div>
diff --git a/auth/shibboleth/login.php b/auth/shibboleth/login.php
index 58c7882873..b37d1f9558 100644
--- a/auth/shibboleth/login.php
+++ b/auth/shibboleth/login.php
@@ -29,7 +29,7 @@ httpsrequired();
         $select = html_select::make_popup_form("$CFG->httpswwwroot/login/index.php", 'lang', $langs, 'chooselang', $currlang);
         $select->nothinglabel = false;
         $select->set_label(get_accesshide(get_string('language')));
-        $langmenu = $OUTPUT->select($select);
+        $langmenu = '<div class="langmenu">'.$OUTPUT->select($select).'</div>';
     }
 
     $loginsite = get_string("loginsite");
@@ -82,7 +82,7 @@ httpsrequired();
     $PAGE->set_title("$site->fullname: $loginsite");
     $PAGE->set_heading($site->fullname);
     $PAGE->set_focuscontrol('idp');
-    $PAGE->set_headingmenu('<div class="langmenu">'.$langmenu.'</div>');
+    $PAGE->set_headingmenu($langmenu);
 
     echo $OUTPUT->header();
     include("index_form.html");
diff --git a/backup/restorelib.php b/backup/restorelib.php
index 585b88b529..2f29bb9b8b 100644
--- a/backup/restorelib.php
+++ b/backup/restorelib.php
@@ -9288,9 +9288,10 @@ WHERE
         $restorelog_file = fopen("$dest_dir/restorelog.html","a");
         //Add the stylesheet
         $stylesheetshtml = '';
-        foreach ($CFG->stylesheets as $stylesheet) {
+/*        foreach ($CFG->stylesheets as $stylesheet) {
+            //TODO: MDL-21120
             $stylesheetshtml .= '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'" />'."\n";
-        }
+        }*/
         ///Accessibility: added the 'lang' attribute to $direction, used in theme <html> tag.
         $languagehtml = get_html_lang($dir=true);
 
@@ -9299,7 +9300,7 @@ WHERE
         fwrite ($restorelog_file," \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">  ");
         fwrite ($restorelog_file,"<html dir=\"ltr\".$languagehtml.");
         fwrite ($restorelog_file,"<head>");
-        fwrite ($restorelog_file,$stylesheetshtml);
+//        fwrite ($restorelog_file,$stylesheetshtml);
         fwrite ($restorelog_file,"<title>".$course_header->course_shortname." Restored </title>");
         fwrite ($restorelog_file,"</head><body><br/><h1>The following changes were made during the Restoration of this Course.</h1><br/><br/>");
         fwrite ($restorelog_file,"The Course ShortName is now - ".$course_header->course_shortname." The FullName is now - ".$course_header->course_fullname."<br/><br/>");
diff --git a/blocks/global_navigation_tree/block_global_navigation_tree.php b/blocks/global_navigation_tree/block_global_navigation_tree.php
index e4a0d2b5a3..9586b8e1cd 100644
--- a/blocks/global_navigation_tree/block_global_navigation_tree.php
+++ b/blocks/global_navigation_tree/block_global_navigation_tree.php
@@ -88,6 +88,7 @@ class block_global_navigation_tree extends block_tree {
         if ($this->contentgenerated === true) {
             return true;
         }
+        $this->page->requires->yui_lib('dom');
         $this->page->requires->js('lib/javascript-navigation.js');
         // Navcount is used to allow us to have multiple trees although I dont' know why
         // you would want to trees the same
diff --git a/blocks/moodleblock.class.php b/blocks/moodleblock.class.php
index b43f7c1b07..03db833cd2 100644
--- a/blocks/moodleblock.class.php
+++ b/blocks/moodleblock.class.php
@@ -815,7 +815,7 @@ class block_tree extends block_list {
      *
      * Also adds the required javascript call to the page output.
      *
-     * @param moodle_core_renderer $output
+     * @param core_renderer $output
      * @return string HTML
      */
     protected function formatted_contents($output) {
diff --git a/blocks/rss_client/editfeed.php b/blocks/rss_client/editfeed.php
index a67da8965e..e451e3509c 100644
--- a/blocks/rss_client/editfeed.php
+++ b/blocks/rss_client/editfeed.php
@@ -175,7 +175,7 @@ if ($returnurl) {
 $managefeeds = new moodle_url($CFG->wwwroot . '/blocks/rss_client/managefeeds.php', $urlparams);
 
 $PAGE->set_url('blocks/rss_client/editfeed.php', $urlparams);
-$PAGE->set_generaltype('form');
+$PAGE->set_pagelayout('form');
 
 if ($rssid) {
     $isadding = false;
diff --git a/blocks/rss_client/managefeeds.php b/blocks/rss_client/managefeeds.php
index 66482e35aa..8181c9b9e6 100644
--- a/blocks/rss_client/managefeeds.php
+++ b/blocks/rss_client/managefeeds.php
@@ -78,7 +78,7 @@ $feeds = $DB->get_records_select('block_rss_client', $select, null, $DB->sql_ord
 
 $strmanage = get_string('managefeeds', 'block_rss_client');
 
-$PAGE->set_generaltype('form');
+$PAGE->set_pagelayout('form');
 $PAGE->set_title($strmanage);
 $PAGE->set_heading($strmanage);
 
diff --git a/blocks/rss_client/viewfeed.php b/blocks/rss_client/viewfeed.php
index 5da40c8fd9..fa7ce070fb 100644
--- a/blocks/rss_client/viewfeed.php
+++ b/blocks/rss_client/viewfeed.php
@@ -55,7 +55,7 @@ if ($returnurl) {
     $urlparams['returnurl'] = $returnurl;
 }
 $PAGE->set_url('blocks/rss_client/viewfeed.php', $urlparams);
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 
 $rssrecord = $DB->get_record('block_rss_client', array('id' => $rssid), '*', MUST_EXIST);
 
diff --git a/blocks/settings_navigation_tree/block_settings_navigation_tree.php b/blocks/settings_navigation_tree/block_settings_navigation_tree.php
index 704eeb37f6..881f54ed49 100644
--- a/blocks/settings_navigation_tree/block_settings_navigation_tree.php
+++ b/blocks/settings_navigation_tree/block_settings_navigation_tree.php
@@ -87,6 +87,7 @@ class block_settings_navigation_tree extends block_tree {
         if ($this->contentgenerated === true) {
             return true;
         }
+        $this->page->requires->yui_lib('dom');
         $this->page->requires->js('lib/javascript-navigation.js');
         block_settings_navigation_tree::$navcount++;
 
diff --git a/blocks/upgrade.txt b/blocks/upgrade.txt
index 256cc2532a..f7239e1c06 100644
--- a/blocks/upgrade.txt
+++ b/blocks/upgrade.txt
@@ -11,6 +11,9 @@ required changes in code:
 * move post instalation code from install() method into db/install.php
 * completely rewrite file handling
 * rewrite backup/restore
+* theme changes: move plugin styles into blocks/xxx/styles.css and use new css markers for images,
+                 move all images into new blocks/xxx/pix/ directory and use new outputlib api
+
 
 optional - no changes needed in older code:
 *
diff --git a/calendar/lib.php b/calendar/lib.php
index 5ca172f525..e40a87b58a 100644
--- a/calendar/lib.php
+++ b/calendar/lib.php
@@ -719,7 +719,7 @@ function calendar_get_events($tstart, $tend, $users, $groups, $courses, $withdur
 }
 
 function calendar_top_controls($type, $data) {
-    global $CFG, $CALENDARDAYS, $THEME;
+    global $CFG, $CALENDARDAYS;
     $content = '';
     if(!isset($data['d'])) {
         $data['d'] = 1;
diff --git a/course/edit.php b/course/edit.php
index c02dcde6df..be7f4f603c 100644
--- a/course/edit.php
+++ b/course/edit.php
@@ -9,7 +9,7 @@
     $id         = optional_param('id', 0, PARAM_INT);       // course id
     $categoryid = optional_param('category', 0, PARAM_INT); // course category - can be changed in edit form
 
-    $PAGE->set_generaltype('form');
+    $PAGE->set_pagelayout('form');
 
 /// basic access control checks
     if ($id) { // editing course
diff --git a/course/importstudents.html b/course/importstudents.html
index 403c344746..2828982e2e 100644
--- a/course/importstudents.html
+++ b/course/importstudents.html
@@ -19,7 +19,6 @@
           ?>
           </select></td>
       <td valign="top">
-        <?php check_theme_arrows(); ?>
         <p class="arrow_button">
             <input name="add" id="add" type="submit" value="<?php echo '&nbsp;'.$THEME->larrow.' &nbsp; &nbsp; '.get_string('add'); ?>" title="<?php print_string('add'); ?>" />
             <br />
diff --git a/course/lib.php b/course/lib.php
index dbf7f90e49..cd0a31411e 100644
--- a/course/lib.php
+++ b/course/lib.php
@@ -1383,12 +1383,12 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false,
                 if (!empty($customicon)) {
                     if (substr($customicon, 0, 4) === 'mod/') {
                         list($modname, $iconname) = explode('/', substr($customicon, 4), 2);
-                        $icon = $OUTPUT->mod_icon_url(str_replace(array('.gif', '.png'), '', $customicon), $modname);
+                        $icon = $OUTPUT->old_icon_url(str_replace(array('.gif', '.png'), '', $customicon), $modname);
                     } else {
                         $icon = $OUTPUT->old_icon_url(str_replace(array('.gif', '.png'), '', $customicon));
                     }
                 } else {
-                    $icon = $OUTPUT->mod_icon_url('icon', $mod->modname);
+                    $icon = $OUTPUT->old_icon_url('icon', $mod->modname);
                 }
 
                 //Accessibility: for files get description via icon, this is very ugly hack!
@@ -2924,12 +2924,12 @@ function make_editing_buttons($mod, $absolute=false, $moveselect=true, $indent=-
     $leftright = '';
     if (has_capability('moodle/course:update', get_context_instance(CONTEXT_COURSE, $mod->course))) {
 
-	    if (right_to_left()) {   // Exchange arrows on RTL
-		    $rightarrow = 't/left';
-		    $leftarrow  = 't/right';
-	    } else {
-	        $rightarrow = 't/right';
-	        $leftarrow  = 't/left';
+        if (right_to_left()) {   // Exchange arrows on RTL
+            $rightarrow = 't/left';
+            $leftarrow  = 't/right';
+        } else {
+            $rightarrow = 't/right';
+            $leftarrow  = 't/left';
         }
 
         if ($indent > 0) {
diff --git a/course/modedit.php b/course/modedit.php
index d6d898f083..b464229c2b 100644
--- a/course/modedit.php
+++ b/course/modedit.php
@@ -35,7 +35,7 @@
     $return = optional_param('return', 0, PARAM_BOOL);    //return to course/view.php if false or mod/modname/view.php if true
     $type   = optional_param('type', '', PARAM_ALPHANUM); //TODO: hopefully will be removed in 2.0
 
-    $PAGE->set_generaltype('form');
+    $PAGE->set_pagelayout('form');
 
     $url = new moodle_url($CFG->wwwroot.'/course/modedit.php');
     if (!empty($add)) {
diff --git a/course/report/log/live.php b/course/report/log/live.php
index f59b1a69b3..828c8aeb4e 100644
--- a/course/report/log/live.php
+++ b/course/report/log/live.php
@@ -30,7 +30,7 @@
     $strupdatesevery = get_string("updatesevery", "moodle", COURSE_LIVELOG_REFRESH);
 
     $PAGE->set_url('/course/report/log/live.php', Array('id'=>$course->id));
-    $PAGE->set_generaltype('popup');
+    $PAGE->set_pagelayout('popup');
     $PAGE->set_title("$strlivelogs ($strupdatesevery)");
     $PAGE->set_periodic_refresh_delay(COURSE_LIVELOG_REFRESH);
     $PAGE->set_heading($strlivelogs);
diff --git a/course/resources.php b/course/resources.php
index b740707fde..6ed85aec7d 100644
--- a/course/resources.php
+++ b/course/resources.php
@@ -127,7 +127,7 @@ foreach ($cms as $cm) {
     if (!empty($cm->icon)) {
         $icon = '<img src="'.$OUTPUT->old_icon_url($cm->icon).'" class="activityicon" alt="" /> ';
     } else {
-        $icon = '<img src="'.$OUTPUT->mod_icon_url('icon', $cm->modname).'" class="activityicon" alt="" /> ';
+        $icon = '<img src="'.$OUTPUT->old_icon_url('icon', $cm->modname).'" class="activityicon" alt="" /> ';
     }
 
     $class = $cm->visible ? '' : 'class="dimmed"'; // hidden modules are dimmed
diff --git a/course/view.php b/course/view.php
index 7855be202e..6bae6db916 100644
--- a/course/view.php
+++ b/course/view.php
@@ -90,6 +90,7 @@
     }
 
     $PAGE->set_url('course/view.php', array('id' => $course->id));
+    $PAGE->set_pagelayout('course');
     $PAGE->set_pagetype('course-view-' . $course->format);
     $PAGE->set_other_editing_capability('moodle/course:manageactivities');
 
@@ -197,7 +198,8 @@
     $PAGE->set_title(get_string('course') . ': ' . $course->fullname);
     $PAGE->set_heading($course->fullname);
     $PAGE->set_button($buttons);
-    $PAGE->set_headingmenu(user_login_string($course, $USER));
+    //TODO: MDL-21123 this should be done in course page layout, not here with this ugly hack!
+    //$PAGE->set_headingmenu(user_login_string($course, $USER));
     echo $OUTPUT->header();
 
     if ($completion->is_enabled() && ajaxenabled()) {
diff --git a/enrol/manual/enrol.php b/enrol/manual/enrol.php
index 4f665e1a41..a41cfe123e 100644
--- a/enrol/manual/enrol.php
+++ b/enrol/manual/enrol.php
@@ -48,7 +48,7 @@ var $errormsg;
 * @param    course  current course object
 */
 function print_entry($course) {
-    global $CFG, $USER, $SESSION, $THEME, $OUTPUT, $PAGE;
+    global $CFG, $USER, $SESSION, $OUTPUT, $PAGE;
 
     $strloginto = get_string('loginto', '', $course->shortname);
     $strcourses = get_string('courses');
@@ -134,7 +134,7 @@ function print_entry($course) {
 * @param    course  the current course, as an object
 */
 function check_entry($form, $course) {
-    global $CFG, $USER, $SESSION, $THEME;
+    global $CFG, $USER, $SESSION;
 
     if (empty($form->password)) {
         $form->password = '';
diff --git a/grade/edit/outcome/course.php b/grade/edit/outcome/course.php
index a4a625160f..baf1ede4ed 100644
--- a/grade/edit/outcome/course.php
+++ b/grade/edit/outcome/course.php
@@ -129,7 +129,6 @@ if ($data = data_submitted() and confirm_sesskey()) {
 /// Print header
 print_grade_page_head($COURSE->id, 'outcome', 'course');
 
-check_theme_arrows();
 require('course_form.html');
 
 echo $OUTPUT->footer();
diff --git a/grade/edit/tree/index.php b/grade/edit/tree/index.php
index 53fbd9d2ff..b85059638a 100644
--- a/grade/edit/tree/index.php
+++ b/grade/edit/tree/index.php
@@ -36,7 +36,6 @@ $PAGE->requires->yui_lib('element');
 $PAGE->requires->yui_lib('container');
 $PAGE->requires->yui_lib('animation');
 $PAGE->requires->js('grade/edit/tree/functions.js');
-$PAGE->requires->css('/grade/edit/tree/tree.css');
 
 $courseid        = required_param('id', PARAM_INT);
 $action          = optional_param('action', 0, PARAM_ALPHA);
diff --git a/grade/lib.php b/grade/lib.php
index 41f91128f8..45077255c7 100644
--- a/grade/lib.php
+++ b/grade/lib.php
@@ -803,13 +803,12 @@ class grade_plugin_info {
  * @param boolean $return Whether to return (true) or echo (false) the HTML generated by this function
  * @param string  $bodytags Additional attributes that will be added to the <body> tag
  * @param string  $buttons Additional buttons to display on the page
- * @param array   $extracss An array of additional stylesheets to load (relative paths)
  *
  * @return string HTML code or nothing if $return == false
  */
 function print_grade_page_head($courseid, $active_type, $active_plugin=null,
                                $heading = false, $return=false,
-                               $buttons=false, $extracss=array()) {
+                               $buttons=false) {
     global $CFG, $COURSE, $OUTPUT, $PAGE;
     $strgrades = get_string('grades');
     $plugin_info = grade_get_plugin_info($courseid, $active_type, $active_plugin);
@@ -826,13 +825,6 @@ function print_grade_page_head($courseid, $active_type, $active_plugin=null,
         $first_link = $CFG->wwwroot.'/grade/index.php?id='.$COURSE->id;
     }
 
-    if ($active_type == 'preferences') {
-        $CFG->stylesheets[] = $CFG->wwwroot . '/grade/report/styles.css';
-    }
-
-    foreach ($extracss as $css_url) {
-        $CFG->stylesheets[] = $css_url;
-    }
 
     $PAGE->navbar->add($strgrades, $first_link);
 
diff --git a/grade/report/grader/index.php b/grade/report/grader/index.php
index 6ad521dd7c..3a4213e6a7 100644
--- a/grade/report/grader/index.php
+++ b/grade/report/grader/index.php
@@ -35,7 +35,6 @@ $toggle        = optional_param('toggle', NULL, PARAM_INT);
 $toggle_type   = optional_param('toggle_type', 0, PARAM_ALPHANUM);
 
 $PAGE->set_url('grade/report/grader/index.php', compact('courseid', 'page', 'perpageurl', 'edit', 'sortitemid'));
-$PAGE->requires->css('lib/yui/container/assets/skins/sam/container.css');
 
 /// basic access checks
 if (!$course = $DB->get_record('course', array('id' => $courseid))) {
diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php
index 80d7c07c73..4919e84462 100644
--- a/grade/report/grader/lib.php
+++ b/grade/report/grader/lib.php
@@ -217,8 +217,8 @@ class grade_report_grader extends grade_report {
                     if ($bounded > $finalgrade) {
                     $errorstr = 'lessthanmin';
                     } else if ($bounded < $finalgrade) {
-                    	$errorstr = 'morethanmax';
-                	}
+                        $errorstr = 'morethanmax';
+                    }
                 }
                 if ($errorstr) {
                     $user = $DB->get_record('user', array('id' => $userid), 'id, firstname, lastname');
diff --git a/grade/report/styles.css b/grade/report/styles.css
deleted file mode 100644
index d179694d5b..0000000000
--- a/grade/report/styles.css
+++ /dev/null
@@ -1,4 +0,0 @@
-#content #siteconfiglink {
- text-align: right;
-}
-
diff --git a/group/assign.php b/group/assign.php
index f2a3d0247e..32381ea2fb 100644
--- a/group/assign.php
+++ b/group/assign.php
@@ -147,7 +147,6 @@ echo $OUTPUT->header();
           </select></td>
       <td valign="top">
 
-        <?php check_theme_arrows(); ?>
         <p class="arrow_button">
             <input name="add" id="add" type="submit" value="<?php echo '&nbsp;'.$THEME->larrow.' &nbsp; &nbsp; '.get_string('add'); ?>" title="<?php print_string('add'); ?>" />
             <br />
diff --git a/group/members.php b/group/members.php
index 476acc3166..1564460aab 100644
--- a/group/members.php
+++ b/group/members.php
@@ -87,7 +87,6 @@ $PAGE->set_title("$course->shortname: $strgroups");
 $PAGE->set_heading($course->fullname);
 $PAGE->set_headingmenu(user_login_string($course, $USER));
 echo $OUTPUT->header();
-check_theme_arrows();
 ?>
 
 <div id="addmembersform">
diff --git a/help.php b/help.php
index bc0b6b3967..cc4eba7f1c 100644
--- a/help.php
+++ b/help.php
@@ -113,7 +113,7 @@ if(preg_match('~(##emoticons_html##)~', $output, $matches)) {
 }
 
 // Do the main output.
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 $PAGE->set_title($title);
 echo $OUTPUT->header();
 echo $OUTPUT->box_start();
diff --git a/index.php b/index.php
index 1caf8bef33..68a167c12d 100644
--- a/index.php
+++ b/index.php
@@ -78,17 +78,18 @@
         $select = html_select::make_popup_form($CFG->wwwroot .'/index.php', 'lang', $langs, 'chooselang', $currlang);
         $select->nothinglabel = false;
         $select->set_label(get_accesshide(get_string('language')));
-        $langmenu = $OUTPUT->select($select);
+        //TODO: MDL-21123
+        $langmenu = '<div class="langmenu">'.$OUTPUT->select($select).'</div>';
     }
     $PAGE->set_other_editing_capability('moodle/course:manageactivities');
     $PAGE->set_url('');
     $PAGE->set_docs_path('');
-    $PAGE->set_generaltype('home');
+    $PAGE->set_pagelayout('home');
     $editing = $PAGE->user_is_editing();
     $PAGE->set_title($SITE->fullname);
     $PAGE->set_heading($SITE->fullname);
-    $PAGE->set_headingmenu(user_login_string($SITE) . $langmenu);
-    echo $OUTPUT->header();
+    $PAGE->set_headingmenu($langmenu);
+    echo $OUTPUT->header($langmenu);
 
 /// Print Section
     if ($SITE->numsections > 0) {
diff --git a/install.php b/install.php
index ea5c18f4a2..86882c45d3 100644
--- a/install.php
+++ b/install.php
@@ -139,10 +139,7 @@ $CFG->lang                 = $config->lang;
 $CFG->dirroot              = str_replace('\\', '/', dirname(__FILE__)); // Fix for win32
 $CFG->libdir               = "$CFG->dirroot/lib";
 $CFG->wwwroot              = install_guess_wwwroot(); // can not be changed - ppl must use the real address when installing
-$CFG->themedir = $CFG->dirroot.'/theme';
-$CFG->themewww = $CFG->wwwroot.'/theme';
 $CFG->httpswwwroot         = $CFG->wwwroot;
-$CFG->httpsthemewww        = $CFG->wwwroot;
 $CFG->dataroot             = $config->dataroot;
 $CFG->admin                = $config->admin;
 $CFG->docroot              = 'http://docs.moodle.org';
diff --git a/iplookup/index.php b/iplookup/index.php
index 1cc15aed11..5db39aed51 100644
--- a/iplookup/index.php
+++ b/iplookup/index.php
@@ -39,7 +39,7 @@ if (isset($CFG->iplookup)) {
 }
 
 $PAGE->set_url('iplookup/index.php', array('id'=>$ip, 'user'=>$user));
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 
 $info = array($ip);
 $note = array();
diff --git a/lang/en_utf8/admin.php b/lang/en_utf8/admin.php
index 40e7d6521a..a31d5e3a8a 100644
--- a/lang/en_utf8/admin.php
+++ b/lang/en_utf8/admin.php
@@ -304,6 +304,8 @@ $string['configsupportemail'] = 'This email address will be published to users o
 $string['configsupportname'] = 'This is the name of a person or other entity offering general help via the support email or web address.';
 $string['configsupportpage'] = 'This web address will be published to users of this site as the one to go to when they need general help (for example, when new users create their own accounts).  If this address is left blank then no link will be supplied.';
 $string['configteacherassignteachers'] = 'Should ordinary teachers be allowed to assign other teachers within courses they teach?  If \'No\', then only course creators and admins can assign teachers.';
+$string['configthemedesignermode'] = 'All theme images and CSS are cached in browsers and in server for a very long time. Turn on this setting if you are developing or tweaking themes. This setting is also suitable for developers.
+You can invalidate all theme caches manually from the theme selection page too. WARNING: enabling of theme designer mode affects the server performance severly!';
 $string['configthemelist'] = 'Leave this blank to allow any valid theme to be used.  If you want to shorten the theme menu, you can specify a comma-separated list of names here (Don\'t use spaces!).
 For example:  standard,orangewhite.';
 $string['configtimezone'] = 'You can set the default timezone here.  This is the only the DEFAULT timezone for displaying dates - each user can override this by setting their own in their profile. \"Server time\" here will make Moodle default to the server\'s operating system setting, but \"Server time\" in the user profile will make the user default to this timezone setting.  Cronjobs that depend on a time of day to run will use this timezone.';
@@ -851,7 +853,9 @@ $string['tablenosave'] = 'Changes in table above are saved automatically.';
 $string['tablesnosave'] = 'Changes in tables above are saved automatically.';
 $string['tabselectedtofront'] = 'On tables with tabs, should the row with the currently selected tab be placed at the front';
 $string['tabselectedtofronttext'] = 'Bring selected tab row to front';
+$string['themedesignermode'] = 'Theme designer mode';
 $string['themelist'] = 'Theme list';
+$string['themeresetcaches'] = 'Invalidate theme caches';
 $string['themeselector'] = 'Theme Selector';
 $string['themesettings'] = 'Theme settings';
 $string['therewereerrors'] = 'There were errors in your data';
diff --git a/lang/en_utf8/theme_standard.php b/lang/en_utf8/theme_standard.php
index 5ffdae2bf9..cfaf9c980d 100644
--- a/lang/en_utf8/theme_standard.php
+++ b/lang/en_utf8/theme_standard.php
@@ -1,5 +1,5 @@
-<?php // $Id$ 
-      // theme_standard.php - created with Moodle 2.0 dev
+<?php
 
+$string['pluginname'] = "Standard";
 $string['region-side-pre'] = 'Left';
 $string['region-side-post'] = 'Right';
diff --git a/lib/adminlib.php b/lib/adminlib.php
index e9bb4a4167..08cad4d3aa 100644
--- a/lib/adminlib.php
+++ b/lib/adminlib.php
@@ -5185,6 +5185,12 @@ function admin_externalpage_setup($section, $extrabutton = '',
     $adminroot = admin_get_root(false, false); // settings not required for external pages
     $extpage = $adminroot->locate($section);
 
+    if ($section === 'upgradesettings') {
+        $PAGE->set_pagelayout('maintenance');
+    } else {
+        $PAGE->set_pagelayout('admin');
+    }
+
     $PAGE->set_context(get_context_instance(CONTEXT_SYSTEM));
     // $PAGE->set_extra_button($extrabutton); TODO
 
@@ -5222,7 +5228,7 @@ function admin_externalpage_setup($section, $extrabutton = '',
  * @param string $focus focus element
  */
 function admin_externalpage_print_header($focus='') {
-    global $CFG, $PAGE, $SITE, $THEME, $OUTPUT;
+    global $CFG, $PAGE, $SITE, $OUTPUT;
 
     if (!is_string($focus)) {
         $focus = ''; // BC compatibility, there used to be adminroot parameter
diff --git a/lib/ajax/ajaxlib.php b/lib/ajax/ajaxlib.php
index b4fe79c5ec..86bf646ace 100644
--- a/lib/ajax/ajaxlib.php
+++ b/lib/ajax/ajaxlib.php
@@ -32,7 +32,7 @@
  * @param page_requirements_manager $requires The page_requirements_manager to initialise.
  */
 function setup_core_javascript(page_requirements_manager $requires) {
-    global $CFG, $OUTPUT;
+    global $CFG, $OUTPUT, $PAGE;
 
     // JavaScript should always work with $CFG->httpswwwroot rather than $CFG->wwwroot.
     // Otherwise, in some situations, users will get warnings about insecure content
@@ -41,7 +41,9 @@ function setup_core_javascript(page_requirements_manager $requires) {
     $config = array(
         'wwwroot' => $CFG->httpswwwroot, // Yes, really. See above.
         'sesskey' => sesskey(),
-        'loadingicon' => $OUTPUT->old_icon_url('i/loading_small')
+        'loadingicon' => $OUTPUT->old_icon_url('i/loading_small', 'moodle', false),
+        'themerev' => theme_get_revision(),
+        'theme' => $PAGE->theme->name,
     );
     if (debugging('', DEBUG_DEVELOPER)) {
         $config['developerdebug'] = true;
@@ -74,7 +76,7 @@ function setup_core_javascript(page_requirements_manager $requires) {
  *
  * Typical useage would be
  * <pre>
- *     $PAGE->requires->css('mod/mymod/styles.css');
+ *     $PAGE->requires->css('mod/mymod/userstyles.php?id='.$id); // not overriddable via themes!
  *     $PAGE->requires->js('mod/mymod/script.js');
  *     $PAGE->requires->js('mod/mymod/small_but_urgent.js')->in_head();
  *     $PAGE->requires->js_function_call('init_mymod', array($data))->on_dom_ready();
@@ -148,11 +150,6 @@ class page_requirements_manager {
      * performance. Optional dependencies are not loaded automatically - if you want
      * them you will need to load them first with other calls to this method.
      *
-     * If the YUI library you ask for requires one or more CSS files, and if
-     * <head> has already been printed, then an exception will be thrown.
-     * Therefore, you are strongly advised to request all the YUI libraries you
-     * will need before output is started.
-     *
      * Even if a particular library is requested more than once (perhaps as a dependancy
      * of other libraries) it will only be linked to once.
      *
@@ -696,10 +693,7 @@ class required_js extends linked_requirement {
  *
  * This class (with the help of {@link ajax_resolve_yui_lib()}) knows about the
  * dependancies between the different YUI libraries, and will include all the
- * other libraries required by the one you ask for. It also knows which YUI
- * libraries require css files. If the library you ask for requires CSS files,
- * then you should ask for it before <head> is output, or an exception will
- * be thrown.
+ * other libraries required by the one you ask for.
  *
  * By default JavaScript files are included at the end of the HTML.
  * This is recommended practice because it means that the web browser will only
@@ -726,15 +720,10 @@ class required_yui_lib extends linked_requirement {
         parent::__construct($manager, '');
         $this->when = page_requirements_manager::WHEN_AT_END;
 
-        list($jsurls, $cssurls) = ajax_resolve_yui_lib($libname);
+        $jsurls = ajax_resolve_yui_lib($libname);
         foreach ($jsurls as $jsurl) {
             $this->jss[] = $manager->js($jsurl, true);
         }
-        foreach ($cssurls as $cssurl) {
-            // this might be a bit problematic because it requires yui to be
-            // requested before print_header() - this was not required in 1.9.x
-            $manager->css($cssurl, true);
-        }
     }
 
     public function get_html() {
@@ -1150,8 +1139,7 @@ function ajax_generate_script_tag($js) {
 
 
 /**
- * Given the name of a YUI library, return a list of the .js and .css files that
- * it requries.
+ * Given the name of a YUI library, return a list of the .js that it requries.
  *
  * This method takes note of the $CFG->useexternalyui setting.
  *
@@ -1159,10 +1147,8 @@ function ajax_generate_script_tag($js) {
  * the -debug version of the YUI files, otherwise it will return links to the -min versions.
  *
  * @param string $libname the name of a YUI library, for example 'autocomplete'.
- * @return array with two elementes. The first is an array of the JavaScript URLs
- *      that must be loaded to make this library work, in the order they should be
- *      loaded. The second element is a (possibly empty) list of CSS files that
- *      need to be loaded.
+ * @return an array of the JavaScript URLs that must be loaded to make this library work,
+ *      in the order they should be loaded.
  */
 function ajax_resolve_yui_lib($libname) {
     global $CFG;
@@ -1171,99 +1157,53 @@ function ajax_resolve_yui_lib($libname) {
     // because another part of the code may later ask for other bits. It is easier, and
     // not very inefficient, just to always use (and get browsers to cache) the combined file.
     static $translatelist = array(
-        'yahoo' => 'yahoo-dom-event',
-        'animation' => array('yahoo-dom-event', 'animation'),
-        'autocomplete' => array(
-                'js' => array('yahoo-dom-event', 'datasource', 'autocomplete'),
-                'css' => array('autocomplete/assets/skins/sam/autocomplete.css')),
-        'button' => array(
-                'js' => array('yahoo-dom-event', 'element', 'button'),
-                'css' => array('button/assets/skins/sam/button.css')),
-        'calendar' => array(
-                'js' => array('yahoo-dom-event', 'calendar'),
-                'css' => array('calendar/assets/skins/sam/calendar.css')),
-        'carousel' => array(
-                'js' => array('yahoo-dom-event', 'element', 'carousel'),
-                'css' => array('carousel/assets/skins/sam/carousel.css')),
-        'charts' => array('yahoo-dom-event', 'element', 'datasource', 'json', 'charts'),
-        'colorpicker' => array(
-                'js' => array('utilities', 'slider', 'colorpicker'),
-                'css' => array('colorpicker/assets/skins/sam/colorpicker.css')),
-        'connection' => array('yahoo-dom-event', 'connection'),
-        'container' => array(
-                'js' => array('yahoo-dom-event', 'container'),
-                'css' => array('container/assets/skins/sam/container.css')),
-        'cookie' => array('yahoo-dom-event', 'cookie'),
-        'datasource' => array('yahoo-dom-event', 'datasource'),
-        'datatable' => array(
-                'js' => array('yahoo-dom-event', 'element', 'datasource', 'datatable'),
-                'css' => array('datatable/assets/skins/sam/datatable.css')),
-        'dom' => 'yahoo-dom-event',
-        'dom-event' => 'yahoo-dom-event',
-        'dragdrop' => array('yahoo-dom-event', 'dragdrop'),
-        'editor' => array(
-                'js' => array('yahoo-dom-event', 'element', 'container', 'menu', 'button', 'editor'),
-                'css' => array('assets/skins/sam/skin.css')),
-        'element' => array('yahoo-dom-event', 'element'),
-        'event' => 'yahoo-dom-event',
-        'get' => array('yahoo-dom-event', 'get'),
-        'history' => array('yahoo-dom-event', 'history'),
-        'imagecropper' => array(
-                'js' => array('yahoo-dom-event', 'dragdrop', 'element', 'resize', 'imagecropper'),
-                'css' => array('assets/skins/sam/resize.css', 'assets/skins/sam/imagecropper.css')),
-        'imageloader' => array('yahoo-dom-event', 'imageloader'),
-        'json' => array('yahoo-dom-event', 'json'),
-        'layout' => array(
-                'js' => array('yahoo-dom-event', 'dragdrop', 'element', 'layout'),
-                'css' => array('reset-fonts-grids/reset-fonts-grids.css', 'assets/skins/sam/layout.css')),
-        'logger' => array(
-                'js' => array('yahoo-dom-event', 'logger'),
-                'css' => array('logger/assets/skins/sam/logger.css')),
-        'menu' => array(
-                'js' => array('yahoo-dom-event', 'container', 'menu'),
-                'css' => array('menu/assets/skins/sam/menu.css')),
-        'paginator' => array(
-                'js' => array('yahoo-dom-event', 'element', 'paginator'),
-                'css' => array('paginator/assets/skins/sam/paginator.css')),
-        'profiler' => array('yahoo-dom-event', 'profiler'),
+        'yahoo'          => array('yahoo-dom-event'),
+        'animation'      => array('yahoo-dom-event', 'animation'),
+        'autocomplete'   => array('yahoo-dom-event', 'datasource', 'autocomplete'),
+        'button'         => array('yahoo-dom-event', 'element', 'button'),
+        'calendar'       => array('yahoo-dom-event', 'calendar'),
+        'carousel'       => array('yahoo-dom-event', 'element', 'carousel'),
+        'charts'         => array('yahoo-dom-event', 'element', 'datasource', 'json', 'charts'),
+        'colorpicker'    => array('utilities', 'slider', 'colorpicker'),
+        'connection'     => array('yahoo-dom-event', 'connection'),
+        'container'      => array('yahoo-dom-event', 'container'),
+        'cookie'         => array('yahoo-dom-event', 'cookie'),
+        'datasource'     => array('yahoo-dom-event', 'datasource'),
+        'datatable'      => array('yahoo-dom-event', 'element', 'datasource', 'datatable'),
+        'dom'            => array('yahoo-dom-event'),
+        'dom-event'      => array('yahoo-dom-event'),
+        'dragdrop'       => array('yahoo-dom-event', 'dragdrop'),
+        'editor'         => array('yahoo-dom-event', 'element', 'container', 'menu', 'button', 'editor'),
+        'element'        => array('yahoo-dom-event', 'element'),
+        'event'          => array('yahoo-dom-event'),
+        'get'            => array('yahoo-dom-event', 'get'),
+        'history'        => array('yahoo-dom-event', 'history'),
+        'imagecropper'   => array('yahoo-dom-event', 'dragdrop', 'element', 'resize', 'imagecropper'),
+        'imageloader'    => array('yahoo-dom-event', 'imageloader'),
+        'json'           => array('yahoo-dom-event', 'json'),
+        'layout'         => array('yahoo-dom-event', 'dragdrop', 'element', 'layout'),
+        'logger'         => array('yahoo-dom-event', 'logger'),
+        'menu'           => array('yahoo-dom-event', 'container', 'menu'),
+        'paginator'      => array('yahoo-dom-event', 'element', 'paginator'),
+        'profiler'       => array('yahoo-dom-event', 'profiler'),
         'profilerviewer' => array('yuiloader-dom-event', 'element', 'profiler', 'profilerviewer'),
-        'resize' => array(
-                'js' => array('yahoo-dom-event', 'dragdrop', 'element', 'resize'),
-                'css' => array('assets/skins/sam/resize.css')),
-        'selector' => array('yahoo-dom-event', 'selector'),
-        'simpleeditor' => array(
-                'js' => array('yahoo-dom-event', 'element', 'container', 'simpleeditor'),
-                'css' => array('assets/skins/sam/skin.css')),
-        'slider' => array('yahoo-dom-event', 'gragdrop', 'slider'),
-        'stylesheet' => array('yahoo-dom-event', 'stylesheet'),
-        'tabview' => array(
-                'js' => array('yahoo-dom-event', 'element', 'tabview'),
-                'css' => array('assets/skins/sam/skin.css')),
-        'treeview' => array(
-                'js' => array('yahoo-dom-event', 'treeview'),
-                'css' => array('treeview/assets/skins/sam/treeview.css')),
-        'uploader' => array('yahoo-dom-event', 'element', 'uploader'),
-        'utilities' => array('yahoo-dom-event', 'connection', 'animation', 'dragdrop', 'element', 'get'),
-        'yuiloader' => 'yuiloader',
-        'yuitest' => array(
-                'js' => array('yahoo-dom-event', 'logger', 'yuitest'),
-                'css' => array('logger/assets/logger.css', 'yuitest/assets/testlogger.css')),
+        'resize'         => array('yahoo-dom-event', 'dragdrop', 'element', 'resize'),
+        'selector'       => array('yahoo-dom-event', 'selector'),
+        'simpleeditor'   => array('yahoo-dom-event', 'element', 'container', 'simpleeditor'),
+        'slider'         => array('yahoo-dom-event', 'gragdrop', 'slider'),
+        'stylesheet'     => array('yahoo-dom-event', 'stylesheet'),
+        'tabview'        => array('yahoo-dom-event', 'element', 'tabview'),
+        'treeview'       => array('yahoo-dom-event', 'treeview'),
+        'uploader'       => array('yahoo-dom-event', 'element', 'uploader'),
+        'utilities'      => array('yahoo-dom-event', 'connection', 'animation', 'dragdrop', 'element', 'get'),
+        'yuiloader'      => array('yuiloader'),
+        'yuitest'        => array('yahoo-dom-event', 'logger', 'yuitest'),
     );
     if (!isset($translatelist[$libname])) {
         throw new coding_exception('Unknown YUI library ' . $libname);
     }
 
-    $data = $translatelist[$libname];
-    if (!is_array($data)) {
-        $jsnames = array($data);
-        $cssfiles = array();
-    } else if (isset($data['js']) && isset($data['css'])) {
-        $jsnames = $data['js'];
-        $cssfiles = $data['css'];
-    } else {
-        $jsnames = $data;
-        $cssfiles = array();
-    }
+    $jsnames = $translatelist[$libname];
 
     $debugging = debugging('', DEBUG_DEVELOPER);
     if ($debugging) {
@@ -1294,12 +1234,7 @@ function ajax_resolve_yui_lib($libname) {
         }
     }
 
-    $cssurls = array();
-    foreach ($cssfiles as $css) {
-        $cssurls[] = $libpath . $css;
-    }
-
-    return array($jsurls, $cssurls);
+    return $jsurls;
 }
 
 /**
diff --git a/lib/ajax/simpletest/testajaxlib.php b/lib/ajax/simpletest/testajaxlib.php
index d235f5a5c3..0d7d8dc50d 100644
--- a/lib/ajax/simpletest/testajaxlib.php
+++ b/lib/ajax/simpletest/testajaxlib.php
@@ -296,22 +296,6 @@ class page_requirements_manager_test extends ajaxlib_unit_test_base {
         $this->assertTrue($this->requires->is_top_of_body_done());
     }
 
-    public function test_requiring_css() {
-        global $CFG;
-        $cssfile = 'theme/standard/styles_layout.css'; // Just needs to be a CSS file that exists.
-        $this->requires->css($cssfile);
-
-        $html = $this->requires->get_head_code();
-        $this->assertContains($html, $CFG->httpswwwroot . '/' . $cssfile);
-    }
-
-    public function test_nonexistant_css_throws_exception() {
-        $cssfile = 'css/file/that/does/not/exist.css';
-
-        $this->expectException();
-        $this->requires->css($cssfile);
-    }
-
     public function test_requiring_js() {
         global $CFG;
         $jsfile = 'lib/javascript-static.js'; // Just needs to be a JS file that exists.
@@ -331,10 +315,10 @@ class page_requirements_manager_test extends ajaxlib_unit_test_base {
     }
 
     public function test_nonexistant_js_throws_exception() {
-        $cssfile = 'js/file/that/does/not/exist.js';
+        $jsfile = 'js/file/that/does/not/exist.js';
 
         $this->expectException();
-        $this->requires->js($cssfile);
+        $this->requires->js($jsfile);
     }
 
     public function test_requiring_skip_link() {
diff --git a/lib/blocklib.php b/lib/blocklib.php
index b6e6489aa5..7bb4d615ea 100644
--- a/lib/blocklib.php
+++ b/lib/blocklib.php
@@ -167,9 +167,9 @@ class block_manager {
      * @return array the internal names of the regions on this page where block may appear.
      */
     public function get_regions() {
-    	if (is_null($this->defaultregion)) {
+        if (is_null($this->defaultregion)) {
             $this->page->initialise_theme_and_output();
-    	}
+        }
         return array_keys($this->regions);
     }
 
@@ -303,7 +303,7 @@ class block_manager {
      * output the blocks anyway, so we are not doing wasted effort.)
      *
      * @param string $region a block region that exists on this page.
-     * @param object $output a moodle_core_renderer. normally the global $OUTPUT.
+     * @param object $output a core_renderer. normally the global $OUTPUT.
      * @return boolean Whether there is anything in this region.
      */
     public function region_has_content($region, $output) {
@@ -781,7 +781,7 @@ class block_manager {
      * Return an array of content objects from a set of block instances
      *
      * @param array $instances An array of block instances
-     * @param moodle_renderer_base The renderer to use.
+     * @param renderer_base The renderer to use.
      * @param string $region the region name.
      * @return array An array of block_content (and possibly block_move_target) objects.
      */
@@ -1056,7 +1056,7 @@ class block_manager {
         }
 
         $editpage = new moodle_page();
-        $editpage->set_generaltype('form');
+        $editpage->set_pagelayout('form');
         $editpage->set_course($this->page->course);
         $editpage->set_context($block->context);
         $editurlbase = str_replace($CFG->wwwroot . '/', '', $this->page->url->out(true));
@@ -1455,11 +1455,11 @@ function blocks_remove_inappropriate($course) {
     return;
     $blockmanager = blocks_get_by_page($page);
 
-    if(empty($blockmanager)) {
+    if (empty($blockmanager)) {
         return;
     }
 
-    if(($pageformat = $page->pagetype) == NULL) {
+    if (($pageformat = $page->pagetype) == NULL) {
         return;
     }
 
diff --git a/lib/configonlylib.php b/lib/configonlylib.php
new file mode 100644
index 0000000000..39132321ad
--- /dev/null
+++ b/lib/configonlylib.php
@@ -0,0 +1,55 @@
+<?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/>.
+
+/**
+ * Minimalistic library, usable even when no other moodle libs are loaded.
+ *
+ * The only library that gets loaded if you define ABORT_AFTER_CONFIG
+ * before including main config.php. You can resume normal script operation
+ * if you define ABORT_AFTER_CONFIG_CANCEL and require the setup.php
+ *
+ * @package   moodlecore
+ * @copyright 2009 petr Skoda (skodak)
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+/**
+ * Minimalistic parameter validation function.
+ * Can not use optional param because moodlelib.php is not loaded yet
+ * @param string $name
+ * @param mixed $default
+ * @param string $type
+ * @return mixed
+ */
+function min_optional_param($name, $default, $type) {
+    $value = $default;
+    if (isset($_GET[$name])) {
+        $value = $_GET[$name];
+
+    } else if (isset($_GET['amp;'.$name])) {
+        // very, very, very ugly hack, unforunately $OUTPUT->old_icon_url() is not used properly in javascript code :-(
+        $value = $_GET['amp;'.$name];
+    }
+    switch($type) {
+        case 'INT':      $value = (int)$value; break;
+        case 'SAFEDIR':  $value = preg_replace('/[^a-zA-Z0-9_-]/', '', $value); break;
+        case 'SAFEPATH': $value = preg_replace('/[^a-zA-Z0-9\/_-]/', '', $value); break;
+        default:         die("Coding error: incorrent parameter type specified ($type).");
+    }
+    return $value;
+}
+
diff --git a/lib/db/install.php b/lib/db/install.php
index 2f210f0c9d..f0e2a73e5d 100644
--- a/lib/db/install.php
+++ b/lib/db/install.php
@@ -49,7 +49,7 @@ function xmldb_main_install() {
         'enrol_plugins_enabled' => 'manual',
         'style'                 => 'default',
         'template'              => 'default',
-        'theme'                 => 'standardwhite',
+        'theme'                 => 'standard', //TODO: MDL-20204 replace with some new default theme when implemented
         'filter_multilang_converted' => 1,
         'siteidentifier'        => random_string(32).get_host_from_url($CFG->wwwroot),
         'backup_version'        => 2008111700,
@@ -216,4 +216,6 @@ function xmldb_main_install() {
     set_role_contextlevels($guestrole,          get_default_contextlevels('guest'));
     set_role_contextlevels($userrole,           get_default_contextlevels('user'));
 
+    // init themes
+    set_config('themerev', 1);
 }
diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php
index 9e4d532cc6..6e013c4929 100644
--- a/lib/db/upgrade.php
+++ b/lib/db/upgrade.php
@@ -20,7 +20,7 @@
 // before any action that may take longer time to finish.
 
 function xmldb_main_upgrade($oldversion) {
-    global $CFG, $THEME, $USER, $DB, $OUTPUT;
+    global $CFG, $USER, $DB, $OUTPUT;
 
     require_once($CFG->libdir.'/db/upgradelib.php'); // Core Upgrade-related functions
 
diff --git a/lib/deprecatedlib.php b/lib/deprecatedlib.php
index 05bd527da6..3be437d27a 100644
--- a/lib/deprecatedlib.php
+++ b/lib/deprecatedlib.php
@@ -585,7 +585,7 @@ function get_current_group($courseid, $full = false) {
  * @return void, always throws moodle_exception
  */
 function error($message, $link='') {
-	throw new moodle_exception('notlocalisederrormessage', 'error', $link, $message, 'error() is a deprecated function, please call print_error() instead of error()');
+    throw new moodle_exception('notlocalisederrormessage', 'error', $link, $message, 'error() is a deprecated function, please call print_error() instead of error()');
 }
 
 
@@ -1720,33 +1720,6 @@ function make_mod_upload_directory($courseid) {
     return make_upload_directory($courseid .'/'. $CFG->moddata);
 }
 
-
-/**
- * This is a slight variatoin on the standard_renderer_factory that uses
- * custom_corners_core_renderer instead of moodle_core_renderer.
- *
- * This generates the slightly different HTML that the custom_corners theme expects.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @deprecated Required to make the old $THEME->customcorners setting work.
- */
-class custom_corners_renderer_factory extends standard_renderer_factory {
-    public function __construct($theme) {
-        parent::__construct($theme);
-        global $CFG;
-        require_once($CFG->themedir . '/custom_corners/renderers.php');
-    }
-    /* Implement the subclass method. */
-    public function get_renderer($module, $page, $subtype=null) {
-        if ($module == 'core') {
-            return new custom_corners_core_renderer($page);
-        }
-        return parent::get_renderer($module, $page, $subtype);
-    }
-}
-
-
 /**
  * Used to be used for setting up the theme. No longer used by core code, and
  * should not have been used elsewhere.
@@ -1777,25 +1750,6 @@ function current_theme() {
     return $PAGE->theme->name;
 }
 
-/**
- * This used to be the thing that theme styles.php files used to do all the work.
- * This is now handled differently. You should copy theme/standard/styes.php
- * into your theme.
- *
- * @deprecated
- * @param int $lastmodified Always gets set to now
- * @param int $lifetime The max-age header setting (seconds) defaults to 300
- * @param string $themename The name of the theme to use (optional) defaults to current theme
- * @param string $forceconfig Force a particular theme config (optional)
- * @param string $lang Load styles for the specified language (optional)
- */
-function style_sheet_setup($lastmodified=0, $lifetime=300, $themename='', $forceconfig='', $lang='') {
-    global $CFG, $PAGE, $THEME, $showdeprecatedstylesheetsetupwarning;
-    $showdeprecatedstylesheetsetupwarning = true;
-    include($CFG->dirroot . '/theme/styles.php');
-    exit;
-}
-
 /**
  * @todo Remove this deprecated function when no longer used
  * @deprecated since Moodle 2.0 - use $PAGE->pagetype instead of the .
@@ -1895,7 +1849,7 @@ function print_heading($text, $deprecated = '', $size = 2, $class = 'main', $ret
 function print_heading_block($heading, $class='', $return=false) {
     global $OUTPUT;
     debugging('print_heading_with_block() has been deprecated. Please change your code to use $OUTPUT->heading().');
-    $output = $OUTPUT->heading($heading, 2, 'headingblock header ' . moodle_renderer_base::prepare_classes($class));
+    $output = $OUTPUT->heading($heading, 2, 'headingblock header ' . renderer_base::prepare_classes($class));
     if ($return) {
         return $output;
     } else {
@@ -2012,6 +1966,13 @@ function print_container_start($clearfix=false, $classes='', $idbase='', $return
     }
 }
 
+/**
+ * Deprecated, now handled automatically in themes
+ */
+function check_theme_arrows() {
+    debugging('check_theme_arrows() has been deprecated, do not use it anymore, it is now automatic.');
+}
+
 /**
  * Simple function to end a container (see above)
  *
@@ -2193,7 +2154,7 @@ function print_footer($course = NULL, $usercourse = NULL, $return = false) {
     // TODO check arguments.
     if (is_string($course)) {
         debugging("Magic values like 'home', 'empty' passed to print_footer no longer have any effect. " .
-                'To achieve a similar effect, call $PAGE->set_generaltype before you call print_header.', DEBUG_DEVELOPER);
+                'To achieve a similar effect, call $PAGE->set_pagelayout before you call print_header.', DEBUG_DEVELOPER);
     } else if (!empty($course->id) && $course->id != $PAGE->course->id) {
         throw new coding_exception('The $course object you passed to print_footer does not match $PAGE->course.');
     }
@@ -3702,8 +3663,6 @@ function build_navigation($extranavlinks, $cm = null) {
  * @return string
  */
 function navmenu($course, $cm=NULL, $targetwindow='self') {
-    global $CFG, $THEME, $USER, $DB, $OUTPUT;
-
     // This function has been deprecated with the creation of the global nav in
     // moodle 2.0
 
@@ -3776,7 +3735,7 @@ function delete_event($id) {
 /**
  * Call this function to hide an event in the calendar table
  * the event will be identified by the id field of the $event object.
- * 
+ *
  * @param object $event An object representing an event from the calendar table. The event will be identified by the id field.
  * @return true
  */
diff --git a/lib/editor/tinymce/editor_styles.css b/lib/editor/tinymce/editor_styles.css
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/lib/editor/tinymce/lib.php b/lib/editor/tinymce/lib.php
index a55ec42ec3..0b93e7996c 100644
--- a/lib/editor/tinymce/lib.php
+++ b/lib/editor/tinymce/lib.php
@@ -74,8 +74,8 @@ class tinymce_texteditor extends texteditor {
         $directionality = get_string('thisdirection');
         $strtime        = get_string('strftimetime');
         $strdate        = get_string('strftimedaydate');
-        $lang           = str_replace('_utf8', '', current_language());     // use more standard language codes
-        $contentcss     = $CFG->themewww.'/'.current_theme().'/styles.php'; // should be customizable
+        $lang           = str_replace('_utf8', '', current_language()); // use more standard language codes
+        $contentcss     = $PAGE->theme->editor_css_url()->out(false, array(), false);
 
         $context = empty($options['context']) ? get_context_instance(CONTEXT_SYSTEM) : $options['context'];
         if (!empty($options['legacy'])) {
diff --git a/lib/filelib.php b/lib/filelib.php
index f650b69265..3e699678bd 100644
--- a/lib/filelib.php
+++ b/lib/filelib.php
@@ -2068,9 +2068,10 @@ function file_modify_html_header($text) {
     global $CFG;
 
     $stylesheetshtml = '';
-    foreach ($CFG->stylesheets as $stylesheet) {
+/*    foreach ($CFG->stylesheets as $stylesheet) {
+        //TODO: MDL-21120
         $stylesheetshtml .= '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'" />'."\n";
-    }
+    }*/
 
     $ufo = '';
     if (filter_is_enabled('filter/mediaplugin')) {
diff --git a/lib/installlib.php b/lib/installlib.php
index 5af8c22bc9..bd4f3b6378 100644
--- a/lib/installlib.php
+++ b/lib/installlib.php
@@ -233,7 +233,7 @@ function install_print_help_page($help) {
     echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
     echo '<html dir="'.(right_to_left() ? 'rtl' : 'ltr').'">
           <head>
-          <link rel="shortcut icon" href="theme/standard/favicon.ico" />
+          <link rel="shortcut icon" href="theme/standard/pix/favicon.ico" />
           <link rel="stylesheet" type="text/css" href="'.$CFG->wwwroot.'/install.php?css=1" />
           <title>'.get_string('installation','install').'</title>
           <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
@@ -279,7 +279,7 @@ function install_print_header($config, $stagename, $heading, $stagetext) {
     echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
     echo '<html dir="'.(right_to_left() ? 'rtl' : 'ltr').'">
           <head>
-          <link rel="shortcut icon" href="theme/standard/favicon.ico" />';
+          <link rel="shortcut icon" href="theme/standard/pix/favicon.ico" />';
 
     $sheets = array('styles_layout', 'styles_fonts', 'styles_color', 'styles_moz');
     $csss = array();
diff --git a/lib/javascript-navigation.js b/lib/javascript-navigation.js
index 1328185c20..be4183b20d 100644
--- a/lib/javascript-navigation.js
+++ b/lib/javascript-navigation.js
@@ -321,7 +321,7 @@ navigation_tree.prototype.move_to_sidebar_popout = function(e) {
             var moveicon = moveto[i].getElementsByTagName('img');
             if (moveicon.length>0) {
                 for (var j=0;j<moveicon.length;j++) {
-                    moveicon[j].src = moveicon[j].src.replace(/movetosidetab/, 'movetoblock');
+                    moveicon[j].src = get_image_url('t/movetoblock', 'moodle');
                     moveicon[j].setAttribute('alt', this.toggleblockdisplay);
                     moveicon[j].setAttribute('title', this.toggleblockdisplay);
                 }
@@ -406,7 +406,7 @@ navigation_tree.prototype.move_to_block_position = function(e) {
             var moveicon = moveto[i].getElementsByTagName('img');
             if (moveicon.length>0) {
                 for (var j=0;j<moveicon.length;j++) {
-                    moveicon[j].src = moveicon[j].src.replace(/movetoblock/, 'movetosidetab');
+                    moveicon[j].src = get_image_url('t/movetosidetab', 'moodle');
                     moveicon[j].setAttribute('alt', this.togglesidetabdisplay);
                     moveicon[j].setAttribute('title', this.togglesidetabdisplay);
                 }
@@ -471,7 +471,7 @@ navigation_tab_panel.prototype.create_tab_panel = function () {
     var navbarcontrol = document.createElement('div');
     YAHOO.util.Dom.addClass(navbarcontrol, 'controls');
     var removeall = document.createElement('img');
-    removeall.setAttribute('src', moodle_cfg.wwwroot+'/pix/t/movetoblock.png');
+    removeall.setAttribute('src', get_image_url('t/movetoblock', 'moodle'));
     removeall.setAttribute('title', mstr.moodle.moveallsidetabstoblock);
     removeall.setAttribute('alt', mstr.moodle.moveallsidetabstoblock);
     navbarcontrol.appendChild(removeall);
diff --git a/lib/javascript-static.js b/lib/javascript-static.js
index c64271a640..a24683f40b 100644
--- a/lib/javascript-static.js
+++ b/lib/javascript-static.js
@@ -1385,3 +1385,17 @@ function update_progress_bar (id, width, pt, msg, es){
 function frame_breakout(e, properties) {
     this.setAttribute('target', properties.framename);
 }
+
+function get_image_url(imagename, component) {
+    var url = moodle_cfg.wwwroot + '/theme/image.php?theme=' + moodle_cfg.theme + '&image=' + imagename;
+
+    if (moodle_cfg.themerev > 0) {
+        url = url + '&rev=' + moodle_cfg.themerev;
+    }
+
+    if (component != '' && component != 'moodle' && component != 'core') {
+        url = url + '&component=' + component;
+    }
+
+    return url;
+}
\ No newline at end of file
diff --git a/lib/moodlelib.php b/lib/moodlelib.php
index e11b6f51b2..44e7a3b77c 100644
--- a/lib/moodlelib.php
+++ b/lib/moodlelib.php
@@ -6439,16 +6439,9 @@ function get_list_of_themes() {
         $themelist = array_keys(get_plugin_list("theme"));
     }
 
-    foreach ($themelist as $key => $theme) {
-        if (!file_exists("$CFG->themedir/$theme/config.php")) {   // bad folder
-            continue;
-        }
-        $THEME = new object();    // Note this is not the global one!!  :-)
-        include("$CFG->themedir/$theme/config.php");
-        if (!isset($THEME->sheets)) {   // Not a valid 1.5 theme
-            continue;
-        }
-        $themes[$theme] = $theme;
+    foreach ($themelist as $key => $themename) {
+        $theme = theme_config::load($themename);
+        $themes[$themename] = $theme;
     }
     asort($themes);
 
@@ -6709,7 +6702,12 @@ function get_component_directory($component, $fullpaths=true) {
     if ($component == 'moodle') {
         $path = ($fullpaths ? $CFG->libdir : 'lib');
     } else {
-        list($type, $plugin) = explode('_', $component, 2);
+        if (strpos($component, '_') === false) {
+            $type   = 'mod';
+            $plugin = $component;
+        } else {
+            list($type, $plugin) = explode('_', $component, 2);
+        }
         $path = get_plugin_directory($type, $plugin, $fullpaths);
     }
 
@@ -6747,7 +6745,8 @@ function get_plugin_types($fullpaths=true) {
                       'repository'    => 'repository',
                       'portfolio'     => 'portfolio',
                       'qtype'         => 'question/type',
-                      'qformat'       => 'question/format');
+                      'qformat'       => 'question/format',
+                      'theme'         => 'theme'); // this is a bit hacky, themes may be in dataroot too
 
         $mods = get_plugin_list('mod');
         foreach ($mods as $mod => $moddir) {
@@ -6759,19 +6758,13 @@ function get_plugin_types($fullpaths=true) {
             }
         }
 
-        // do not include themes if in non-standard location
-        if (empty($CFG->themedir) or $CFG->themedir === $CFG->dirroot.'/theme') {
-            $info['theme'] = 'theme';
-        }
-
-        // local is always last
+        // local is always last!
         $info['local'] = 'local';
 
         $fullinfo = array();
         foreach ($info as $type => $dir) {
             $fullinfo[$type] = $CFG->dirroot.'/'.$dir;
         }
-        $fullinfo['theme'] = $CFG->themedir;
     }
 
     return ($fullpaths ? $fullinfo : $info);
@@ -6780,10 +6773,9 @@ function get_plugin_types($fullpaths=true) {
 /**
  * Simplified version of get_list_of_plugins()
  * @param string $plugintype type of plugin
- * @param bool $fullpaths false means relative paths from dirroot
  * @return array name=>fulllocation pairs of plugins of given type
  */
-function get_plugin_list($plugintype, $fullpaths=true) {
+function get_plugin_list($plugintype) {
     global $CFG;
 
     $ignored = array('CVS', '_vti_cnf', 'simpletest', 'db');
@@ -6799,40 +6791,53 @@ function get_plugin_list($plugintype, $fullpaths=true) {
         $plugintype = 'mod';
     }
 
+    $fulldirs = array();
+
     if ($plugintype === 'mod') {
         // mod is an exception because we have to call this function from get_plugin_types()
-        $fulldir = $CFG->dirroot.'/mod';
-        $dir = $fullpaths ? $fulldir : 'mod';
+        $fulldirs[] = $CFG->dirroot.'/mod';
+
+    } else if ($plugintype === 'theme') {
+        // themes are an exception because they may be stored also in dataroot
+        $fulldirs[] = $CFG->dirroot.'/theme';
 
     } else {
-        $fulltypes = get_plugin_types(true);
-        $types     = get_plugin_types($fullpaths);
+        $types = get_plugin_types(true);
         if (!array_key_exists($plugintype, $types)) {
             return array();
         }
-        $fulldir = $fulltypes[$plugintype];
-        $dir     = $types[$plugintype];
+        $fulldir = $types[$plugintype];
         if (!file_exists($fulldir)) {
             return array();
         }
+        $fulldirs[] = $fulldir;
     }
 
     $result = array();
 
-    $items = new DirectoryIterator($fulldir);
-    foreach ($items as $item) {
-        if ($item->isDot() or !$item->isDir()) {
-            continue;
-        }
-        $pluginname = $item->getFilename();
-        if (in_array($pluginname, $ignored)) {
+    //TODO: MDL-20799 add themedir support
+
+    foreach ($fulldirs as $fulldir) {
+        if (!is_dir($fulldir)) {
             continue;
         }
-        if ($pluginname !== clean_param($pluginname, PARAM_SAFEDIR)) {
-            // better ignore plugins with problematic names here
-            continue;
+        $items = new DirectoryIterator($fulldir);
+        foreach ($items as $item) {
+            if ($item->isDot() or !$item->isDir()) {
+                continue;
+            }
+            $pluginname = $item->getFilename();
+            if (in_array($pluginname, $ignored)) {
+                continue;
+            }
+            if ($pluginname !== clean_param($pluginname, PARAM_SAFEDIR)) {
+                // better ignore plugins with problematic names here
+                continue;
+            }
+            $result[$pluginname] = $fulldir.'/'.$pluginname;
+            unset($item);
         }
-        $result[$pluginname] = $dir.'/'.$pluginname;
+        unset($items);
     }
 
     ksort($result);
@@ -6858,14 +6863,8 @@ function get_list_of_plugins($directory='mod', $exclude='', $basedir='') {
     $plugins = array();
 
     if (empty($basedir)) {
-        // This switch allows us to use the appropiate theme directory - and potentialy alternatives for other plugins
-        switch ($directory) {
-            case "theme":
-                $basedir = $CFG->themedir;
-                break;
-            default:
-                $basedir = $CFG->dirroot .'/'. $directory;
-        }
+        // TODO: MDL-20799 megre theme with themedir if defined
+        $basedir = $CFG->dirroot .'/'. $directory;
 
     } else {
         $basedir = $basedir .'/'. $directory;
@@ -6966,37 +6965,37 @@ function plugin_supports($type, $name, $feature, $default=null) {
     $name = clean_param($name, PARAM_SAFEDIR); //bit of extra security
 
     if ($type === 'mod') {
-    	// we need this special case because we support subplugins in modules,
-    	// otherwise it would end up in infinite loop
-    	if ($name === 'NEWMODULE') {
-    		//somebody forgot to rename the module template
-    		return false;
-    	}
-    	include_once("$CFG->dirroot/mod/$name/lib.php");
-    	
+        // we need this special case because we support subplugins in modules,
+        // otherwise it would end up in infinite loop
+        if ($name === 'NEWMODULE') {
+            //somebody forgot to rename the module template
+            return false;
+        }
+        include_once("$CFG->dirroot/mod/$name/lib.php");
+        
         $function = $name.'_supports';
 
     } else {
-    	if ($feature == FEATURE_MOD_SUBPLUGINS) {
-    		//sorry only modules
-    		return false;
-    	}
-	    if (!$dir = get_plugin_directory($type, $name)) {
-	        throw new coding_exception("Unsupported plugin type or name ($type/$name)");
-	    }
-	
-	    $libfile = $dir.'/lib.php';
-	    if (file_exists($libfile)) {
-	    	include_once($libfile);
-	    }
-	
-	    $function = $type.'_'.$name.'_supports';
+        if ($feature == FEATURE_MOD_SUBPLUGINS) {
+            //sorry only modules
+            return false;
+        }
+        if (!$dir = get_plugin_directory($type, $name)) {
+            throw new coding_exception("Unsupported plugin type or name ($type/$name)");
+        }
+    
+        $libfile = $dir.'/lib.php';
+        if (file_exists($libfile)) {
+            include_once($libfile);
+        }
+    
+        $function = $type.'_'.$name.'_supports';
     }
 
     if (function_exists($function)) {
         $supports = $function($feature);
         if (is_null($supports)) {
-        	// plugin does not know - use default
+            // plugin does not know - use default
             return $default;
         } else {
             return $supports;
diff --git a/lib/navigationlib.php b/lib/navigationlib.php
index a803792b3e..38473f7f92 100644
--- a/lib/navigationlib.php
+++ b/lib/navigationlib.php
@@ -433,7 +433,7 @@ class navigation_node {
                 $link->add_class('dimmed');
             }
 
-            if (!empty($CFG->framename) && ($PAGE->generaltype=='topframe' || $CFG->framename!='_top')) {
+            if (!empty($CFG->framename) && ($PAGE->pagelayout=='topframe' || $CFG->framename!='_top')) {
                 $breakoutaction = new breakout_of_frame_action();
                 $link->add_action($breakoutaction);
             }
diff --git a/lib/outputcomponents.php b/lib/outputcomponents.php
index f9faada944..0ea7661795 100644
--- a/lib/outputcomponents.php
+++ b/lib/outputcomponents.php
@@ -283,7 +283,7 @@ class html_label extends moodle_html_component {
 
 /**
  * This class hold all the information required to describe a <select> menu that
- * will be printed by {@link moodle_core_renderer::select()}. (Or by an overridden
+ * will be printed by {@link core_renderer::select()}. (Or by an overridden
  * version of that method in a subclass.)
  *
  * This component can also hold enough metadata to be used as a popup form. It just
@@ -915,7 +915,7 @@ class html_field extends labelled_html_component {
 
 /**
  * Holds all the information required to render a <table> by
- * {@see moodle_core_renderer::table()} or by an overridden version of that
+ * {@see core_renderer::table()} or by an overridden version of that
  * method in a subclass.
  *
  * Example of usage:
diff --git a/lib/outputfactories.php b/lib/outputfactories.php
index 66540cfe97..3fa552887e 100644
--- a/lib/outputfactories.php
+++ b/lib/outputfactories.php
@@ -45,26 +45,21 @@ interface renderer_factory {
     /**
      * Return the renderer for a particular part of Moodle.
      *
-     * The renderer interfaces are defined by classes called moodle_{plugin}_renderer
+     * The renderer interfaces are defined by classes called {plugin}_renderer
      * where {plugin} is the name of the component. The renderers for core Moodle are
      * defined in lib/renderer.php. For plugins, they will be defined in a file
      * called renderer.php inside the plugin.
      *
-     * Renderers will normally want to subclass the moodle_renderer_base class.
+     * Renderers will normally want to subclass the renderer_base class.
      * (However, if you really know what you are doing, you don't have to do that.)
      *
      * There is no separate interface definition for renderers. The default
-     * moodle_{plugin}_renderer implementation also serves to define the API for
+     * {plugin}_renderer implementation also serves to define the API for
      * other implementations of the interface, whether or not they subclass it.
-     * For example, {@link custom_corners_core_renderer} does subclass
-     * {@link moodle_core_renderer}. On the other hand, if you are using
-     * {@link template_renderer_factory} then you always get back an instance
-     * of the {@link template_renderer} class, whatever type of renderer you ask
-     * for. This uses the fact that PHP is a dynamic language.
      *
      * A particular plugin can define multiple renderers if it wishes, using the
-     * $subtype parameter. For example moodle_mod_workshop_renderer,
-     * moodle_mod_workshop_allocation_manual_renderer etc.
+     * $subtype parameter. For example workshop_renderer,
+     * workshop_allocation_manual_renderer etc.
      *
      * @param string $component name such as 'core', 'mod_forum' or 'qtype_multichoice'.
      * @param moodle_page $page the page the renderer is outputting content for.
@@ -74,6 +69,7 @@ interface renderer_factory {
     public function get_renderer($component, $page, $subtype=null);
 }
 
+
 /**
  * This is a base class to help you implement the renderer_factory interface.
  *
@@ -95,9 +91,10 @@ abstract class renderer_factory_base implements renderer_factory {
      * Constructor.
      * @param theme_config $theme the theme we belong to.
      */
-    public function __construct($theme) {
+    public function __construct(theme_config $theme) {
         $this->theme = $theme;
     }
+
     /**
      * For a given module name, return the name of the standard renderer class
      * that defines the renderer interface for that module.
@@ -109,17 +106,24 @@ abstract class renderer_factory_base implements renderer_factory {
      * @param string $subtype optional subtype such as 'news' resulting to 'mod_forum_news'
      * @return string the name of the standard renderer class for that module.
      */
-    protected function standard_renderer_class_for_module($component, $subtype=null) {
-        if ($component != 'core') {
-            $pluginrenderer = get_component_directory($component) . '/renderer.php';
-            if (file_exists($pluginrenderer)) {
-                include_once($pluginrenderer);
+    protected function standard_renderer_class_for_plugin($component, $subtype=null) {
+        global $CFG; // needed in incldued files
+
+        if ($component !== 'core') {
+            // renderers are stored in lib.php files like the rest of standard functions and classes
+            $libfile = get_component_directory($component) . '/renderer.php';
+            if (file_exists($libfile)) {
+                include_once($libfile);
             }
         }
+
+        if (strpos($component, 'mod_') === 0) {
+            $component = substr($component, 4);
+        }
         if (is_null($subtype)) {
-            $class = 'moodle_' . $component . '_renderer';
+            $class = $component . '_renderer';
         } else {
-            $class = 'moodle_' . $component . '_' . $subtype . '_renderer';
+            $class = $component . '_' . $subtype . '_renderer';
         }
         if (!class_exists($class)) {
             throw new coding_exception('Request for an unknown renderer class ' . $class);
@@ -140,16 +144,16 @@ abstract class renderer_factory_base implements renderer_factory {
 class standard_renderer_factory extends renderer_factory_base {
     /**
      * Implement the subclass method
-     * @param string $module name such as 'core', 'mod_forum' or 'qtype_multichoice'.
+     * @param string $component name such as 'core', 'mod_forum' or 'qtype_multichoice'.
      * @param moodle_page $page the page the renderer is outputting content for.
      * @param string $subtype optional subtype such as 'news' resulting to 'mod_forum_news'
      * @return object an object implementing the requested renderer interface.
      */
-    public function get_renderer($module, $page, $subtype=null) {
-        if ($module == 'core') {
-            return new moodle_core_renderer($page);
+    public function get_renderer($component, $page, $subtype=null) {
+        if ($component === 'core') {
+            return new core_renderer($page);
         } else {
-            $class = $this->standard_renderer_class_for_module($module, $subtype);
+            $class = $this->standard_renderer_class_for_plugin($component, $subtype);
             return new $class($page, $this->get_renderer('core', $page));
         }
     }
@@ -166,16 +170,16 @@ class standard_renderer_factory extends renderer_factory_base {
 class cli_renderer_factory extends standard_renderer_factory {
     /**
      * Implement the subclass method
-     * @param string $module name such as 'core', 'mod_forum' or 'qtype_multichoice'.
+     * @param string $component name such as 'core', 'mod_forum' or 'qtype_multichoice'.
      * @param moodle_page $page the page the renderer is outputting content for.
      * @param string $subtype optional subtype such as 'news' resulting to 'mod_forum_news'
      * @return object an object implementing the requested renderer interface.
      */
-    public function get_renderer($module, $page, $subtype=null) {
-        if ($module == 'core') {
+    public function get_renderer($component, $page, $subtype=null) {
+        if ($component === 'core') {
             return new cli_core_renderer($page);
         } else {
-            parent::get_renderer($module, $page, $subtype);
+            parent::get_renderer($component, $page, $subtype);
         }
     }
 }
@@ -188,11 +192,9 @@ class cli_renderer_factory extends standard_renderer_factory {
  * It will load any code from theme/mytheme/renderers.php and
  * theme/parenttheme/renderers.php, if then exist. Then whenever you ask for
  * a renderer for 'component', it will create a mytheme_component_renderer or a
- * parenttheme_component_renderer, instead of a moodle_component_renderer,
+ * parenttheme_component_renderer, instead of a component_renderer,
  * if either of those classes exist.
  *
- * This generates the slightly different HTML that the custom_corners theme expects.
- *
  * @copyright 2009 Tim Hunt
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  * @since     Moodle 2.0
@@ -204,129 +206,40 @@ class theme_overridden_renderer_factory extends standard_renderer_factory {
      * Constructor.
      * @param object $theme the theme we are rendering for.
      */
-    public function __construct($theme) {
-        global $CFG;
+    public function __construct(theme_config $theme) {
         parent::__construct($theme);
-
         // Initialise $this->prefixes.
-        $renderersfile = $theme->dir . '/renderers.php';
-        if (is_readable($renderersfile)) {
-            include_once($renderersfile);
-            $this->prefixes[] = $theme->name . '_';
-        }
-        if (!empty($theme->parent)) {
-            $renderersfile = $CFG->themedir .'/'. $theme->parent . '/renderers.php';
-            if (is_readable($renderersfile)) {
-                include_once($renderersfile);
-                $this->prefixes[] = $theme->parent . '_';
-            }
-        }
+        $this->prefixes = $theme->renderer_prefixes();
     }
 
     /**
      * Implement the subclass method
-     * @param string $module name such as 'core', 'mod_forum' or 'qtype_multichoice'.
+     * @param string $component name such as 'core', 'mod_forum' or 'qtype_multichoice'.
      * @param moodle_page $page the page the renderer is outputting content for.
      * @param string $subtype optional subtype such as 'news' resulting to 'mod_forum_news'
      * @return object an object implementing the requested renderer interface.
      */
-    public function get_renderer($module, $page, $subtype=null) {
+    public function get_renderer($component, $page, $subtype=null) {
+        if (strpos($component, 'mod_') === 0) {
+            $component = substr($component, 4);
+        }
+
         foreach ($this->prefixes as $prefix) {
+            // theme lib.php files are loaded automatically
             if (is_null($subtype)) {
-                $classname = $prefix . $module . '_renderer';
+                $classname = $prefix . '_' . $component . '_renderer';
             } else {
-                $classname = $prefix . $module . '_' . $subtype . '_renderer';
+                $classname = $prefix . '_' . $component . '_' . $subtype . '_renderer';
             }
             if (class_exists($classname)) {
-                if ($module == 'core') {
+                if ($component === 'core') {
                     return new $classname($page);
                 } else {
                     return new $classname($page, $this->get_renderer('core', $page));
                 }
             }
         }
-        return parent::get_renderer($module, $page, $subtype);
-    }
-}
-
-
-/**
- * This is renderer factory that allows you to create templated themes.
- *
- * This should be considered an experimental proof of concept. In particular,
- * the performance is probably not very good. Do not try to use in on a busy site
- * without doing careful load testing first!
- *
- * This renderer factory returns instances of {@link template_renderer} class
- * which which implement the corresponding renderer interface in terms of
- * templates. To use this your theme must have a templates folder inside it.
- * Then suppose the method moodle_core_renderer::greeting($name = 'world');
- * exists. Then, a call to $OUTPUT->greeting() will cause the template
- * /theme/yourtheme/templates/core/greeting.php to be rendered, with the variable
- * $name available. The greeting.php template might contain
- *
- * <pre>
- * <h1>Hello <?php echo $name ?>!</h1>
- * </pre>
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since     Moodle 2.0
- */
-class template_renderer_factory extends renderer_factory_base {
-    /**
-     * An array of paths of where to search for templates. Normally this theme,
-     * the parent theme then the standardtemplate theme. (If some of these do
-     * not exist, or are the same as each other, then the list will be shorter.
-     */
-    protected $searchpaths = array();
-
-    /**
-     * Constructor.
-     * @param object $theme the theme we are rendering for.
-     */
-    public function __construct($theme) {
-        global $CFG;
-        parent::__construct($theme);
-
-        // Initialise $this->searchpaths.
-        if ($theme->name != 'standardtemplate') {
-            $templatesdir = $theme->dir . '/templates';
-            if (is_dir($templatesdir)) {
-                $this->searchpaths[] = $templatesdir;
-            }
-        }
-        if (!empty($theme->parent)) {
-            $templatesdir = $CFG->themedir .'/'. $theme->parent . '/templates';
-            if (is_dir($templatesdir)) {
-                $this->searchpaths[] = $templatesdir;
-            }
-        }
-        $this->searchpaths[] = $CFG->themedir .'/standardtemplate/templates';
-    }
-
-    /**
-     * Implement the subclass method
-     * @param string $module name such as 'core', 'mod_forum' or 'qtype_multichoice'.
-     * @param moodle_page $page the page the renderer is outputting content for.
-     * @param string $subtype optional subtype such as 'news' resulting to 'mod_forum_news'
-     * @return object an object implementing the requested renderer interface.
-     */
-    public function get_renderer($module, $page, $subtype=null) {
-        // Refine the list of search paths for this module.
-        $searchpaths = array();
-        foreach ($this->searchpaths as $rootpath) {
-            $path = $rootpath . '/' . $module;
-            if (!is_null($subtype)) {
-                $path .= '/' . $subtype;
-            }
-            if (is_dir($path)) {
-                $searchpaths[] = $path;
-            }
-        }
-
-        // Create a template_renderer that copies the API of the standard renderer.
-        $copiedclass = $this->standard_renderer_class_for_module($module, $subtype);
-        return new template_renderer($copiedclass, $searchpaths, $page);
+        // use standard renderes if themes do not contain overridden renderer
+        return parent::get_renderer($component, $page, $subtype);
     }
 }
diff --git a/lib/outputlib.php b/lib/outputlib.php
index 14dec6e4d5..067fea2a11 100644
--- a/lib/outputlib.php
+++ b/lib/outputlib.php
@@ -15,6 +15,17 @@
 // You should have received a copy of the GNU General Public License
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
+/**
+ * Functions for generating the HTML that Moodle should output.
+ *
+ * Please see http://docs.moodle.org/en/Developement:How_Moodle_outputs_HTML
+ * for an overview.
+ *
+ * @package   moodlecore
+ * @copyright 2009 Tim Hunt
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
 /**
  * This constant is used for html attributes which need to have an empty
  * value and still be output by the renderers (e.g. alt="");
@@ -29,15 +40,46 @@ require_once($CFG->libdir.'/outputfactories.php');
 require_once($CFG->libdir.'/outputrenderers.php');
 
 /**
- * Functions for generating the HTML that Moodle should output.
- *
- * Please see http://docs.moodle.org/en/Developement:How_Moodle_outputs_HTML
- * for an overview.
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * Invalidate all server and client side caches.
+ * @return void
+ */
+function theme_reset_all_caches() {
+    global $CFG;
+    require_once("$CFG->libdir/filelib.php");
+
+    set_config('themerev', empty($CFG->themerev) ? 1 : $CFG->themerev+1);
+    fulldelete("$CFG->dataroot/cache/theme");
+}
+
+/**
+ * Enable or disable theme designer mode.
+ * @param bool $state
+ * @return void
+ */
+function theme_set_designer_mod($state) {
+    theme_reset_all_caches();
+    set_config('themedesignermode', (int)!empty($state));
+}
+
+/**
+ * Returns current theme revision number.
+ * @return int
  */
+function theme_get_revision() {
+    global $CFG;
+
+    if (empty($CFG->themedesignermode)) {
+        if (empty($CFG->themerev)) {
+            return -1;
+        } else {
+            return $CFG->themerev;
+        }
+
+    } else {
+        return -1;
+    }
+}
+
 
 /**
  * This class represents the configuration variables of a Moodle theme.
@@ -60,144 +102,74 @@ require_once($CFG->libdir.'/outputrenderers.php');
  */
 class theme_config {
     /**
-     * @var string the name of this theme. Set automatically when this theme is
-     * loaded. Please do not try to set this in your theme's config.php file.
-     */
-    public $name;
-
-    /**
-     * @var string the folder where this themes files are stored. This is set
-     * automatically when the theme is loaded to $CFG->themedir . '/' . $this->name.
-     * Please do not try to set this in your theme's config.php file.
-     */
-    public $dir;
-
-    /**
-     * @var array The names of all the stylesheets from this theme that you would
-     * like included, in order. Give the names of the files without .css.
-     */
-    public $sheets = array('styles_layout', 'styles_fonts', 'styles_color');
-
-    /**
-     * You can base your theme on another theme by linking to the other theme as
-     * a parent. This lets you use the CSS from the other theme
-     * (see {@link $parentsheets}), or layout templates (see {@link $layouts}).
+     * You can base your theme on other themes by linking to the other theme as
+     * parents. This lets you use the CSS and layouts from the other themes
+     * (see {@link $layouts}).
      * That makes it easy to create a new theme that is similar to another one
      * but with a few changes. In this theme's CSS you only need to override
      * those rules you want to change.
-     */
-    public $parent = null;
-
-    /**
-     * @var boolean|array Whether and which stylesheets from the parent theme
-     * to use in this theme. (Ignored if parent is null)
      *
-     * Possible values are:
-     *      false - no parent theme CSS.
-     *      true - include all the normal parent theme CSS. Currently this means
-     *             array('styles_layout', 'styles_fonts', 'styles_color').
-     *      array - include just the listed stylesheets. Give the files names
-     *              without the .css, as in the above example.
+     * @var array
      */
-    public $parentsheets = false;
+    public $parents;
 
     /**
-     * @var boolean|array Whether and which stylesheets from the standard theme
-     * to use in this theme.
-     *
-     * The advantages of using the standard stylesheets in your theme is that
-     * they give you a good basic layout, and when the Moodle core code is
-     * updated with new features, the standard theme CSS will be updated to match
-     * the changes in the code. Therefore, your theme is less likely to break
-     * when you upgrade Moodle.
+     * The names of all the stylesheets from this theme that you would
+     * like included, in order. Give the names of the files without .css.
      *
-     * Possible values are:
-     *      false - no standard theme CSS.
-     *      true - include all the main standard theme CSS. Currently this means
-     *             array('styles_layout', 'styles_fonts', 'styles_color').
-     *      array - include just the listed stylesheets. Give the files names
-     *              without the .css, as in the above example.
+     * @var array
      */
-    public $standardsheets = true;
+    public $sheets = array();
 
     /**
-     * @var array use the CSS fragments from these types of plugins.
-     *
-     * All the plugins of the given types will be searched for a file called
-     * styles.php and, if found, these will be included with the CSS for this theme.
-     *
-     * This allows modules to provide some basic CSS so they work out of the box.
-     * You are strongly advised to leave this enabled, otherwise you will have to
-     * provide styling in your theme for every installed block, activity, course
-     * format, ... in your Moodle site.
+     * The names of all the stylesheets from parents that should be expcluded.
+     * true value may be used to specify all parents or all themes from one parent.
+     * If no value specified value from parent theme used.
      *
-     * This setting is an array of plugin types, as in the {@link get_plugin_types()}
-     * function. The default value has been chosen to be the same as Moodle 1.9.
-     * This is not necessarily the best choice.
-     *
-     * The plugin CSS is included first, before any theme CSS. To be precise,
-     * if $standardsheets is true, the plugin CSS is included with the
-     * standard theme's CSS, otherwise if $parentsheets is true, the plugin CSS
-     * will be included with the parent theme's CSS, otherwise the plugin CSS
-     * will be include with this theme's CSS.
-     */
-    public $pluginsheets = array('mod', 'block', 'format', 'gradereport');
-
-    /**
-     * @var boolean When this is true then Moodle will try to include a file
-     * meta.php from this theme into the <head></head> part of the page.
+     * @var array or arrays, true means all, null means use value from parent
      */
-    public $metainclude = false;
+    public $parents_exclude_sheets = null;
 
     /**
-     * @var boolean When this is true, and when this theme has a parent, then
-     * Moodle will try to include a file meta.php from the parent theme into the
-     * <head></head> part of the page.
-     */
-    public $parentmetainclude = false;
-
-    /**
-     * @var boolean When this is true then Moodle will try to include the file
-     * meta.php from the standard theme into the <head></head> part of the page.
+     * List of plugin sheets to be excluded.
+     * If no value specified value from parent theme used.
+     *
+     * @var array of full plugin names, null means use value from parent
      */
-    public $standardmetainclude = true;
+    public $plugins_exclude_sheets = null;
 
     /**
-     * If true, then this theme must have a "pix" subdirectory that contains
-     * copies of all files from the moodle/pix directory, plus a "pix/mod"
-     * directory containing all the icons for all the activity modules.
+     * List of style sheets that are included in the text editor bodies.
+     * Sheets from parent themes are used automatically and can not be excluded.
      *
-     * @var boolean
+     * @var array
      */
-    public $custompix = false;
+    public $editor_sheets = array();
 
     /**
-     * Which template to use for each general type of page.
+     * Which file to use for each page layout.
      *
-     * This is an array of arrays. The keys of the outer array are the different
-     * types of page. Pages in Moodle are categorised into one of a short list of
-     * types like 'normal', 'home', 'popup', 'form', .... The most reliable way
-     * to get a complete list is to look at
-     * {@link http://cvs.moodle.org/moodle/theme/standard/config.php?view=markup the standard theme config.php file}.
+     * This is an array of arrays. The keys of the outer array are the different layouts.
+     * Pages in Moodle are using several different layouts like 'normal', 'course', 'home',
+     * 'popup', 'form', .... The most reliable way to get a complete list is to look at
+     * {@link http://cvs.moodle.org/moodle/theme/base/config.php?view=markup the base theme config.php file}.
      * That file also has a good example of how to set this setting.
      *
-     * If Moodle encounters a general type of page that is not listed in your theme,
-     * then it will use the first layout. Therefore, should probably put 'normal'
-     * first in this array.
-     *
-     * For each page type, the value in the outer array is an array that describes
+     * For each layout, the value in the outer array is an array that describes
      * how you want that type of page to look. For example
      * <pre>
      *   $THEME->layouts = array(
-     *       // Most pages. Put this first, so if we encounter an unknown page type, this is used.
+     *       // Most pages - if we encounter an unknown or amissing page type, this one is used.
      *       'normal' => array(
-     *           'layout' => 'parent:layout.php',
+     *           'theme' = 'mytheme',
+     *           'file' => 'normal.php',
      *           'regions' => array('side-pre', 'side-post'),
      *           'defaultregion' => 'side-post'
      *       ),
      *       // The site home page.
      *       'home' => array(
-     *           'layout' => 'layout-home.php',
+     *           'theme' = 'mytheme',
+     *           'file' => 'home.php',
      *           'regions' => array('side-pre', 'side-post'),
      *           'defaultregion' => 'side-post'
      *       ),
@@ -205,19 +177,9 @@ class theme_config {
      *   );
      * </pre>
      *
-     * 'layout' is the layout template to use for this type of page. You can
-     * specify this in one of three ways:
-     * <ol>
-     * <li><b>filename</b> for example 'layout-home.php' as above. Use that file from this theme.</li>
-     * <li><b>parent:filename</b> for example 'parent:layout.php' as above. Use the
-     *      specified file from the parent theme. (Obviously, you can only do this
-     *      if this theme has a parent!)</li>
-     * <li><b>standard:filename</b> for example 'standard:layout-popup.php'. Use
-     *      the specified file from the standard theme.</li>
-     * </ol>
-     * To promote consistency, you are encouraged to call your layout files
-     * layout.php or layout-something.php.
-     *
+     * 'theme' name of the theme where is the layout located
+     * 'file' is the layout file to use for this type of page.
+     * layout files are stored in layout subfolder
      * 'regions' This lists the regions on the page where blocks may appear. For
      * each region you list here, your layout file must include a call to
      * <pre>
@@ -236,13 +198,6 @@ class theme_config {
      */
     public $layouts = array();
 
-    /*
-     * Time in seconds to cache the CSS style sheets for the chosen theme
-     *
-     * @var integer
-     */
-    public $csslifetime = 1800;
-
     /**
      * With this you can control the colours of the big MP3 player
      * that is used for MP3 resources.
@@ -252,28 +207,13 @@ class theme_config {
     public $resource_mp3player_colors = 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&font=Arial&fontColour=3333FF&buffer=10&waitForPlay=no&autoPlay=yes';
 
     /**
-     *  With this you can control the colours of the small MP3 player
-     * that is used elsewhere
-     *.
+     * With this you can control the colours of the small MP3 player
+     * that is used elsewhere.
+     *
      * @var string
      */
     public $filter_mediaplugin_colors = 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&waitForPlay=yes';
 
-    /**
-     *$THEME->rarrow = '&#x25BA;' //OR '&rarr;';
-     *$THEME->larrow = '&#x25C4;' //OR '&larr;';
-     *$CFG->block_search_button = link_arrow_right(get_string('search'), $url='', $accesshide=true);
-     *
-     * Accessibility: Right and left arrow-like characters are
-     * used in the breadcrumb trail, course navigation menu
-     * (previous/next activity), calendar, and search forum block.
-     *
-     * If the theme does not set characters, appropriate defaults
-     * are set by (lib/weblib.php:check_theme_arrows). The suggestions
-     * above are 'silent' in a screen-reader like JAWS. Please DO NOT
-     * use &lt; &gt; &raquo; - these are confusing for blind users.
-     */
-
     /**
      * Name of the renderer factory class to use.
      *
@@ -287,8 +227,7 @@ class theme_config {
      * <ul>
      * <li>{@link standard_renderer_factory} - the default.</li>
      * <li>{@link theme_overridden_renderer_factory} - use this if you want to write
-     *      your own custom renderers in a renderers.php file in this theme (or the parent theme).</li>
-     * <li>{@link template_renderer_factory} - highly experimental! Do not use (yet).</li>
+     *      your own custom renderers in a lib.php file in this theme (or the parent theme).</li>
      * </ul>
      *
      * @var string name of a class implementing the {@link renderer_factory} interface.
@@ -296,63 +235,76 @@ class theme_config {
     public $rendererfactory = 'standard_renderer_factory';
 
     /**
-     * Name of the icon finder class to use.
+     * Function to do custom CSS post-processing.
      *
-     * This is an advanced feature. controls how Moodle converts from the icon
-     * names used in the code to URLs to embed in the HTML. You should not ever
-     * need to change this.
+     * This is an advanced feature. If you want to do custom post-processing on the
+     * CSS before it is output (for example, to replace certain variable names
+     * with particular values) you can give the name of a function here.
      *
-     * @var string name of a class implementing the {@link icon_finder} interface.
+     * @var string the name of a function.
      */
-    public $iconfinder = 'pix_icon_finder';
+    public $csspostprocess = null;
 
     /**
-     * Function to do custom CSS processing.
-     *
-     * This is an advanced feature. If you want to do custom processing on the
-     * CSS before it is output (for example, to replace certain variable names
-     * with particular values) you can give the name of a function here.
-     *
-     * There are two functions available that you may wish to use (defined in lib/outputlib.php):
-     * <ul>
-     * <li>{@link output_css_replacing_constants}</li>
-     * <li>{@link output_css_for_css_edit}</li>
-     * </ul>
+     * Accessibility: Right arrow-like character is
+     * used in the breadcrumb trail, course navigation menu
+     * (previous/next activity), calendar, and search forum block.
+     * If the theme does not set characters, appropriate defaults
+     * are set automatically. Please DO NOT
+     * use &lt; &gt; &raquo; - these are confusing for blind users.
      *
-     * If you wish to write your own function, look at those two as examples,
-     * and it should be clear what you have to do.
+     * @var string
+     */
+    public $rarrow = null;
+
+    /**
+     * Accessibility: Right arrow-like character is
+     * used in the breadcrumb trail, course navigation menu
+     * (previous/next activity), calendar, and search forum block.
+     * If the theme does not set characters, appropriate defaults
+     * are set automatically. Please DO NOT
+     * use &lt; &gt; &raquo; - these are confusing for blind users.
      *
-     * @var string the name of a function.
+     * @var string
      */
-    public $customcssoutputfunction = null;
+    public $larrow = null;
+
+
+    //==Following properties are not configurable from theme config.php==
 
     /**
-     * You can use this to control the cutoff point for strings
-     * in the navmenus (list of activities in popup menu etc)
-     * Default is 50 characters wide.
+     * The name of this theme. Set automatically when this theme is
+     * loaded. This can not be set in theme config.php
+     * @var string
      */
-    public $navmenuwidth = 50;
+    public $name;
 
     /**
-     * By setting this to true, then you will have access to a
-     * new variable in your header.html and footer.html called
-     * $navmenulist ... this contains a simple XHTML menu of
-     * all activities in the current course, mostly useful for
-     * creating popup navigation menus and so on.
+     * the folder where this themes files are stored. This is set
+     * automatically. This can not be set in theme config.php
+     * @var string
      */
-    public $makenavmenulist = false;
+    public $dir;
 
     /**
-     * @var renderer_factory Instance of the renderer_factory implementation
+     * Theme settings stored in config_plugins table.
+     * This can not be set in theme config.php
+     * @var object
+     */
+    public $setting = null;
+
+    /**
+     * Instance of the renderer_factory implementation
      * we are using. Implementation detail.
+     * @var renderer_factory
      */
     protected $rf = null;
 
     /**
-     * @var renderer_factory Instance of the icon_finder implementation we are
-     * using. Implementation detail.
-     */
-    protected $if = null;
+     * List of parent config objects.
+     * @var array list of parent configs
+     **/
+    protected $parent_configs = array();
 
     /**
      * Load the config.php file for a particular theme, and return an instance
@@ -364,384 +316,696 @@ class theme_config {
     public static function load($themename) {
         global $CFG;
 
-        // We have to use the variable name $THEME (upper case) because that
-        // is what is used in theme config.php files.
+        // load theme settings from db
+        try {
+            $settings = get_config('theme_'.$themename);
+        } catch (dml_exception $e) {
+            // most probably not installed yet
+            $settings = new object();
+        }
 
-        // Set some other standard properties of the theme.
-        $THEME = new theme_config;
-        $THEME->name = $themename;
-        $THEME->dir = $CFG->themedir . '/' . $themename;
+        if ($config = theme_config::find_theme_config($themename, $settings)) {
+            return new theme_config($config);
+        } else {
+            // bad luck, the requested theme has some problems - admin see details in theme config
+            return new theme_config(theme_config::find_theme_config('standard', $settings)); // TODO: use some other default
+        }
+    }
 
-        // Load up the theme config
-        $configfile = $THEME->dir . '/config.php';
-        if (!is_readable($configfile)) {
-            throw new coding_exception('Cannot use theme ' . $themename .
-                    '. The file ' . $configfile . ' does not exist or is not readable.');
+    /**
+     * Theme diagnostic code. It is very problematic to send debug output
+     * to the actual CSS file, instead this functions is supposed to
+     * diagnose given theme and highlisht all potential problems.
+     * This information should be available from the theme selection page
+     * or some other debug page for theme designers.
+     *
+     * @param string $themename
+     * @return array description of problems
+     */
+    public static function diagnose($themename) {
+        //TODO:
+        return array();
+    }
+
+    /**
+     * Private constructor, can be called only from the factory method.
+     * @param stdClass $config
+     */
+    private function __construct($config) {
+        global $CFG; //needed for included lib.php files
+
+        $this->settings = $config->settings;
+        $this->name     = $config->name;
+        $this->dir      = $config->dir;
+
+        if ($this->name != 'base') {
+            $baseconfig = theme_config::find_theme_config('base', $this->settings);
+        } else {
+            $baseconfig = $config;
         }
-        include($configfile);
 
-        $THEME->update_legacy_information();
+        $configurable = array('parents', 'sheets', 'parents_exclude_sheets', 'plugins_exclude_sheets', 'layouts', 'resource_mp3player_colors',
+                              'filter_mediaplugin_colors', 'rendererfactory', 'csspostprocess', 'editor_sheets', 'rarrow', 'larrow');
 
-        return $THEME;
+        foreach ($config as $key=>$value) {
+            if (in_array($key, $configurable)) {
+                $this->$key = $value;
+            }
+        }
+
+        // verify all parents and load configs and renderers
+        foreach ($this->parents as $parent) {
+            if ($parent == 'base') {
+                $parent_config = $baseconfig;
+            } else if (!$parent_config = theme_config::find_theme_config($parent, $this->settings)) {
+                // this is not good - better exclude faulty parents
+                continue;
+            }
+            $libfile = $parent_config->dir.'/lib.php';
+            if (is_readable($libfile)) {
+                // theme may store various function here
+                include_once($libfile);
+            }
+            $renderersfile = $parent_config->dir.'/renderers.php';
+            if (is_readable($renderersfile)) {
+                // may contain core and plugin renderers and renderer factory
+                include_once($renderersfile);
+            }
+            $this->parent_configs[$parent] = $parent_config;
+            $rendererfile = $parent_config->dir.'/renderers.php';
+            if (is_readable($rendererfile)) {
+                 // may contain core and plugin renderers and renderer factory
+                include_once($rendererfile);
+            }
+        }
+        $libfile = $this->dir.'/lib.php';
+        if (is_readable($libfile)) {
+            // theme may store various function here
+            include_once($libfile);
+        }
+        $rendererfile = $this->dir.'/renderers.php';
+        if (is_readable($rendererfile)) {
+            // may contain core and plugin renderers and renderer factory
+            include_once($rendererfile);
+        }
+
+        // cascade all layouts properly
+        foreach ($baseconfig->layouts as $layout=>$value) {
+            if (!isset($this->layouts[$layout])) {
+                foreach ($this->parent_configs as $parent_config) {
+                    if (isset($parent_config->layouts[$layout])) {
+                        $this->layouts[$layout] = $parent_config->layouts[$layout];
+                        continue 2;
+                    }
+                }
+                $this->layouts[$layout] = $value;
+            }
+        }
+
+        //fix arrows if needed
+        $this->check_theme_arrows();
     }
 
-    /**
-     * Get the renderer for a part of Moodle for this theme.
-     * @param string $module the name of part of moodle. E.g. 'core', 'quiz', 'qtype_multichoice'.
-     * @param moodle_page $page the page we are rendering
-     * @param string $subtype optional subtype such as 'news' resulting to 'mod_forum_news'
-     * @return moodle_renderer_base the requested renderer.
+    /*
+     * Checks if arrows $THEME->rarrow, $THEME->larrow have been set (theme/-/config.php).
+     * If not it applies sensible defaults.
+     *
+     * Accessibility: right and left arrow Unicode characters for breadcrumb, calendar,
+     * search forum block, etc. Important: these are 'silent' in a screen-reader
+     * (unlike &gt; &raquo;), and must be accompanied by text.
      */
-    public function get_renderer($module, $page, $subtype=null) {
-        if (is_null($this->rf)) {
-            if (CLI_SCRIPT) {
-                $classname = 'cli_renderer_factory';
+    private function check_theme_arrows() {
+        if (!isset($this->rarrow) and !isset($this->larrow)) {
+            // Default, looks good in Win XP/IE 6, Win/Firefox 1.5, Win/Netscape 8...
+            // Also OK in Win 9x/2K/IE 5.x
+            $this->rarrow = '&#x25BA;';
+            $this->larrow = '&#x25C4;';
+            if (empty($_SERVER['HTTP_USER_AGENT'])) {
+                $uagent = '';
             } else {
-                $classname = $this->rendererfactory;
+                $uagent = $_SERVER['HTTP_USER_AGENT'];
+            }
+            if (false !== strpos($uagent, 'Opera')
+                || false !== strpos($uagent, 'Mac')) {
+                // Looks good in Win XP/Mac/Opera 8/9, Mac/Firefox 2, Camino, Safari.
+                // Not broken in Mac/IE 5, Mac/Netscape 7 (?).
+                $this->rarrow = '&#x25B6;';
+                $this->larrow = '&#x25C0;';
+            }
+            elseif (false !== strpos($uagent, 'Konqueror')) {
+                $this->rarrow = '&rarr;';
+                $this->larrow = '&larr;';
+            }
+            elseif (isset($_SERVER['HTTP_ACCEPT_CHARSET'])
+                && false === stripos($_SERVER['HTTP_ACCEPT_CHARSET'], 'utf-8')) {
+                // (Win/IE 5 doesn't set ACCEPT_CHARSET, but handles Unicode.)
+                // To be safe, non-Unicode browsers!
+                $this->rarrow = '&gt;';
+                $this->larrow = '&lt;';
+            }
+
+        /// RTL support - in RTL languages, swap r and l arrows
+            if (right_to_left()) {
+                $t = $this->rarrow;
+                $this->rarrow = $this->larrow;
+                $this->larrow = $t;
             }
-            $this->rf = new $classname($this);
         }
+    }
 
-        return $this->rf->get_renderer($module, $page, $subtype);
+    /**
+     * Returns output renderer prefixes, these are used when looking
+     * for the overriden renderers in themes.
+     * @return array
+     */
+    public function renderer_prefixes() {
+        global $CFG; // just in case the included files need it
+
+        $prefixes = array();
+
+        foreach ($this->parent_configs as $parent) {
+            $prefixes[] = 'theme_'.$parent->name;
+        }
+
+        return $prefixes;
     }
 
     /**
-     * Get the renderer for a part of Moodle for this theme.
-     * @return moodle_renderer_base the requested renderer.
+     * Returns the stylesheet URL of this editor content
+     * @param bool $encoded false means use & and true use &amp; in URLs
+     * @return string
      */
-    protected function get_icon_finder() {
-        if (is_null($this->if)) {
-            $classname = $this->iconfinder;
-            $this->if = new $classname($this);
+    public function editor_css_url($encoded=true) {
+        global $CFG;
+
+        $rev = theme_get_revision();
+
+        if ($rev > -1) {
+            $params = array('theme'=>$this->name,'rev'=>$rev, 'type'=>'editor');
+            return new moodle_url($CFG->httpswwwroot.'/theme/styles.php', $params);
+        } else {
+            $params = array('theme'=>$this->name, 'type'=>'editor');
+            return new moodle_url($CFG->httpswwwroot.'/theme/styles_debug.php', $params);
         }
-        return $this->if;
     }
 
     /**
-     * Return the URL for an icon identified as in pre-Moodle 2.0 code.
-     *
-     * Suppose you have old code like $url = "$CFG->pixpath/i/course.gif";
-     * then old_icon_url('i/course'); will return the equivalent URL that is correct now.
-     *
-     * @param string $iconname the name of the icon.
-     * @return string the URL for that icon.
+     * Returns the content of the CSS to be used in editor content
+     * @return string
      */
-    public function old_icon_url($iconname) {
-        return $this->get_icon_finder()->old_icon_url($iconname);
+    public function editor_css_content() {
+        global $CFG;
+
+        $css = '';
+
+        // first editor plugins
+        $plugins = get_plugin_list('editor');
+        foreach ($plugins as $plugin=>$fulldir) {
+            $sheetfile = "$fulldir/editor_styles.css";
+            if (is_readable($sheetfile)) {
+                $css .= "/*** Editor $plugin content CSS ***/\n\n" . file_get_contents($sheetfile) . "\n\n";
+            }
+        }
+        // then parent themes
+        foreach (array_reverse($this->parent_configs) as $parent_config) { // base first, the immediate parent last
+            if (empty($parent_config->editor_sheets)) {
+                continue;
+            }
+            foreach ($parent_config->editor_sheets as $sheet) {
+                $sheetfile = "$parent_config->dir/$sheet.css";
+                if (is_readable($sheetfile)) {
+                    $css .= "/*** Parent theme $parent/$sheet ***/\n\n" . file_get_contents($sheetfile) . "\n\n";
+                }
+            }
+        }
+        // finally this theme
+        if (!empty($this->editor_sheets)) {
+            foreach ($this->editor_sheets as $sheet) {
+                $sheetfile = "$this->dir/$sheet.css";
+                if (is_readable($sheetfile)) {
+                    $css .= "/*** Theme $sheet ***/\n\n" . file_get_contents($sheetfile) . "\n\n";
+                }
+            }
+        }
+
+        return $this->post_process($css);
     }
 
     /**
-     * Return the URL for an icon identified as in pre-Moodle 2.0 code.
-     *
-     * Suppose you have old code like $url = "$CFG->modpixpath/$mod/icon.gif";
-     * then mod_icon_url('icon', $mod); will return the equivalent URL that is correct now.
-     *
-     * @param string $iconname the name of the icon.
-     * @param string $module the module the icon belongs to.
-     * @return string the URL for that icon.
+     * Get the stylesheet URL of this theme
+     * @param bool $encoded false means use & and true use &amp; in URLs
+     * @return string
      */
-    public function mod_icon_url($iconname, $module) {
-        return $this->get_icon_finder()->mod_icon_url($iconname, $module);
+    public function css_urls() {
+        global $CFG;
+
+        $rev = theme_get_revision();
+
+        if ($rev > -1) {
+            $params = array('theme'=>$this->name,'rev'=>$rev);
+            if (check_browser_version('MSIE', 5) and !check_browser_version('MSIE', 8)) {
+                $params['type'] = 'ie';
+            }
+            return array(new moodle_url($CFG->httpswwwroot.'/theme/styles.php', $params));
+
+        } else {
+            // this is painfully slow, but it should not matter much ;-)
+            $css = $this->css_content();
+            $url = $CFG->httpswwwroot.'/theme/styles_debug.php';
+            $urls = array();
+            $urls[] = new moodle_url($url, array('theme'=>$this->name,'type'=>'yui'));
+            foreach ($css['plugins'] as $plugin=>$unused) {
+                $urls[] = new moodle_url($url, array('theme'=>$this->name,'type'=>'plugin', 'subtype'=>$plugin));
+            }
+            foreach ($css['parents'] as $parent=>$sheets) {
+                foreach ($sheets as $sheet=>$unused2) {
+                    $urls[] = new moodle_url($url, array('theme'=>$this->name,'type'=>'parent', 'subtype'=>$parent, 'sheet'=>$sheet));
+                }
+            }
+            foreach ($css['theme'] as $sheet=>$unused) {
+                $urls[] = new moodle_url($url, array('theme'=>$this->name,'type'=>'theme', 'sheet'=>$sheet));
+            }
+            return $urls;
+        }
     }
 
     /**
-     * Get the list of stylesheet URLs that need to go in the header for this theme.
-     * @return array of URLs.
+     * Returns the content of the one huge CSS merged from all style sheets.
+     * @return string
      */
-    public function get_stylesheet_urls() {
+    public function css_content() {
         global $CFG;
 
-        // We need to tell the CSS that is being included (for example the standard
-        // theme CSS) which theme it is being included for. Prepare the necessary param.
-        $param = '?for=' . $this->name;
+        $css = array('yui'=>array(), 'plugins'=>array(), 'parents'=>array(), 'theme'=>array());
 
-        // Stylesheets, in order (standard, parent, this - some of which may be the same).
-        $stylesheets = array();
-        if ($this->name != 'standard' && $this->standardsheets) {
-            $stylesheets[] = $CFG->httpsthemewww . '/standard/styles.php' . $param;
+        //YUI sheets
+        $yui_sheets = "/*** Standard YUI sheets ***/\n\n";
+        $yui_sheets .= file_get_contents("$CFG->libdir/yui/reset-fonts-grids/reset-fonts-grids.css");
+        $items = new DirectoryIterator("$CFG->libdir/yui/assets/skins/sam");
+        foreach ($items as $item) {
+            if ($item->isDot() or !$item->isFile()) {
+                continue;
+            }
+            $filename = $item->getFilename();
+            if (substr($filename, -4) !== '.css') {
+                continue;
+            }
+            $yui_sheets .= file_get_contents("$CFG->libdir/yui/assets/skins/sam/$filename");
+        }
+        unset($item);
+        unset($items);
+        $yui_sheets = preg_replace('/([a-z-]+)\.(png|gif)/', '[[pix:yui|$1]]', $yui_sheets);
+        $css['yui'][] = $this->post_process($yui_sheets);
+
+        // get plugin sheets
+        $excludes = null;
+        if (is_array($this->plugins_exclude_sheets) or $this->plugins_exclude_sheets === true) {
+            $excludes = $this->plugins_exclude_sheets;
+        } else {
+            foreach ($this->parent_configs as $parent_config) { // the immediate parent first, base last
+                if (!isset($parent_config->plugins_exclude_sheets)) {
+                    continue;
+                }
+                if (is_array($parent_config->plugins_exclude_sheets) or $parent_config->plugins_exclude_sheets === true) {
+                    $excludes = $parent_config->plugins_exclude_sheets;
+                    break;
+                }
+            }
         }
-        if (!empty($this->parent)) {
-            $stylesheets[] = $CFG->httpsthemewww . '/' . $this->parent . '/styles.php' . $param;
+        if ($excludes !== true) {
+            foreach (get_plugin_types() as $type=>$unused) {
+                if ($type === 'theme') {
+                    continue;
+                }
+                if (!empty($excludes[$type]) and $excludes[$type] === true) {
+                    continue;
+                }
+                $plugins = get_plugin_list($type);
+                foreach ($plugins as $plugin=>$fulldir) {
+                    if (!empty($excludes[$type]) and is_array($excludes[$type])
+                        and in_array($plugin, $excludes[$type])) {
+                        continue;
+                    }
+                    $sheetfile = "$fulldir/styles.css";
+                    if (is_readable($sheetfile)) {
+                        $css['plugins'][$type.'_'.$plugin] = $this->post_process("/*** Standard plugin $type/$plugin ***/\n\n" . file_get_contents($sheetfile));
+                    }
+                }
+            }
         }
-        $stylesheets[] = $CFG->httpsthemewww . '/' . $this->name . '/styles.php' . $param;
 
-        // Additional styles for right-to-left languages, if applicable.
-        if (right_to_left()) {
-            $stylesheets[] = $CFG->httpsthemewww . '/standard/rtl.css';
+        // find out wanted parent sheets
+        $excludes = null;
+        if (is_array($this->parents_exclude_sheets) or $this->parents_exclude_sheets === true) {
+            $excludes = $this->parents_exclude_sheets;
+        } else {
+            foreach ($this->parent_configs as $parent_config) { // the immediate parent first, base last
+                if (!isset($parent_config->parents_exclude_sheets)) {
+                    continue;
+                }
+                if (is_array($parent_config->parents_exclude_sheets) or $parent_config->parents_exclude_sheets === true) {
+                    $excludes = $parent_config->parents_exclude_sheets;
+                    break;
+                }
+            }
+        }
+        if ($excludes !== true) {
+            foreach (array_reverse($this->parent_configs) as $parent_config) { // base first, the immediate parent last
+                $parent = $parent_config->name;
+                if (empty($parent_config->sheets)) {
+                    continue;
+                }
+                if (!empty($excludes[$parent]) and $excludes[$parent] === true) {
+                    continue;
+                }
+                foreach ($parent_config->sheets as $sheet) {
+                    if (!empty($excludes[$parent]) and is_array($excludes[$parent])
+                        and in_array($sheet, $excludes[$parent])) {
+                        continue;
+                    }
+                    $sheetfile = "$parent_config->dir/style/$sheet.css";
+                    if (is_readable($sheetfile)) {
+                        $css['parents'][$parent][$sheet] = $this->post_process("/*** Parent theme $parent/$sheet ***/\n\n" . file_get_contents($sheetfile));
+                    }
+                }
+            }
+        }
 
-            if (!empty($this->parent) && file_exists($CFG->themedir . '/' . $this->parent . '/rtl.css')) {
-                $stylesheets[] = $CFG->httpsthemewww . '/' . $this->parent . '/rtl.css';
+        // current theme sheets
+        if (is_array($this->sheets)) {
+            foreach ($this->sheets as $sheet) {
+                $sheetfile = "$this->dir/style/$sheet.css";
+                if (is_readable($sheetfile)) {
+                    $css['theme'][$sheet] = $this->post_process("/*** This theme $sheet ***/\n\n" . file_get_contents($sheetfile));
+                }
             }
+        }
+
+        return $css;
+    }
 
-            if (file_exists($this->dir . '/rtl.css')) {
-                $stylesheets[] = $CFG->httpsthemewww . '/' . $this->name . '/rtl.css';
+    protected function post_process($css) {
+        // now resolve all image locations
+        if (preg_match_all('/\[\[pix:([a-z_]+\|)?([^\]]+)\]\]/', $css, $matches, PREG_SET_ORDER)) {
+            $replaced = array();
+            foreach ($matches as $match) {
+                if (isset($replaced[$match[0]])) {
+                    continue;
+                }
+                $replaced[$match[0]] = true;
+                $imagename = $match[2];
+                $component = rtrim($match[1], '|');
+                $css = str_replace($match[0], $this->image_url($imagename, $component)->out(false, array(), false), $css);
             }
         }
 
-        // If the theme wants pluginsheets, get them included in the first (most
-        // general) stylesheet we are including. That is, process them with the
-        // standard CSS if we are using that, else with the parent CSS, else with
-        // our own CSS.
-        if (!empty($this->pluginsheets)) {
-            $stylesheets[0] .= '&amp;pluginsheets=1';
+        // now resolve all theme settings or do any other postprocessing
+        $csspostprocess = $this->csspostprocess;
+        if (function_exists($csspostprocess)) {
+            $css = $csspostprocess($css, $this);
         }
 
-        return $stylesheets;
+        return $css;
     }
 
     /**
-     * Get the meta tags from one theme to got in the <head> of the HTML.
-     * @param string $themename the name of the theme to get meta tags from.
-     * @param string $page that page whose <head> is being output.
-     * @return string HTML code.
+     * Return the URL for an image
+     *
+     * @param string $imagename the name of the icon.
+     * @param string $component, specification of one plugin like in get_string()
+     * @return moodle_url
      */
-    protected function get_theme_meta_tags($themename, $page) {
+    public function image_url($imagename, $component) {
         global $CFG;
-        // At least one theme's meta.php expects to have $PAGE visible.
-        $PAGE = $page;
-        $filename = $CFG->themedir . '/' . $themename . '/meta.php';
-        if (file_exists($filename)) {
-            ob_start();
-            include_once($filename);
-            $metatags = ob_get_contents();
-            ob_end_clean();
+
+        $params = array('theme'=>$this->name, 'image'=>$imagename);
+
+        $rev = theme_get_revision();
+        if ($rev != -1) {
+            $params['rev'] = $rev;
+        }
+        if (!empty($component) and $component !== 'moodle'and $component !== 'core') {
+            $params['component'] = $component;
         }
-        return $metatags;
+
+        return new moodle_url("$CFG->httpswwwroot/theme/image.php", $params);
     }
 
     /**
-     * Get all the meta tags (from this theme, standard, parent) that this theme
-     * wants in the <head> of the HTML.
-     *
-     * @param string $page that page whose <head> is being output.
-     * @return string HTML code.
+     * Resolves the real image location.
+     * @param string $image name of image, may contain relative path
+     * @param string $component
+     * @return string full file path
      */
-    public function get_meta_tags($page) {
-        $metatags = '';
-        if ($this->standardmetainclude) {
-            $metatags .= $this->get_theme_meta_tags('standard', $page);
-        }
-        if ($this->parent && $this->parentmetainclude) {
-            $metatags .= $this->get_theme_meta_tags($this->parent, $page);
-        }
-        if ($this->metainclude) {
-            $metatags .= $this->get_theme_meta_tags($this->name, $page);
+    public function resolve_image_location($image, $component) {
+        global $CFG;
+
+        if ($component === 'moodle' or $component === 'core' or empty($component)) {
+            if ($imagefile = $this->image_exists("$this->dir/pix_core/$image")) {
+                return $imagefile;
+            }
+            foreach (array_reverse($this->parent_configs) as $parent_config) { // base first, the immediate parent last
+                if ($imagefile = $this->image_exists("$parent_config->dir/pix_core/$image")) {
+                    return $imagefile;
+                }
+            }
+            if ($imagefile = $this->image_exists("$CFG->dirroot/pix/$image")) {
+                return $imagefile;
+            }
+            return null;
+
+        } else if ($component === 'theme') { //exception
+            if ($image === 'favicon') {
+                return "$this->dir/pix/favicon.ico";
+            }
+            if ($imagefile = $this->image_exists("$this->dir/pix/$image")) {
+                return $imagefile;
+            }
+            foreach (array_reverse($this->parent_configs) as $parent_config) { // base first, the immediate parent last
+                if ($imagefile = $this->image_exists("$parent_config->dir/pix/$image")) {
+                    return $imagefile;
+                }
+            }
+            return null;
+
+        } else if ($component === 'yui') {
+            // yui CSS files are parsed automatically and altered on the fly
+            if ($imagefile = $this->image_exists("$this->dir/pix_yui/$image")) {
+                return $imagefile;
+            }
+            foreach (array_reverse($this->parent_configs) as $parent_config) { // base first, the immediate parent last
+                if ($imagefile = $this->image_exists("$parent_config->dir/pix_yui/$image")) {
+                    return $imagefile;
+                }
+            }
+            if ($imagefile = $this->image_exists("$CFG->libdir/yui/assets/skins/sam/$image")) {
+                return $imagefile;
+            }
+            return null;
+
+        } else {
+            if (strpos($component, '_') === false) {
+                $component = 'mod_'.$component;
+            }
+            list($type, $plugin) = explode('_', $component, 2);
+
+            if ($imagefile = $this->image_exists("$this->dir/pix_plugins/$type/$plugin/$image")) {
+                return $imagefile;
+            }
+            foreach (array_reverse($this->parent_configs) as $parent_config) { // base first, the immediate parent last
+                if ($imagefile = $this->image_exists("$parent_config->dir/pix_plugins/$type/$plugin/$image")) {
+                    return $imagefile;
+                }
+            }
+            $dir = get_plugin_directory($type, $plugin);
+            if ($imagefile = $this->image_exists("$dir/pix/$image")) {
+                return $imagefile;
+            }
+            return null;
         }
-        return $metatags;
     }
 
     /**
-     * Get the information from {@link $layouts} for this type of page.
-     * @param string $generaltype the general type of the page.
-     * @return array the appropriate part of {@link $layouts}.
+     * Checks if file with any image extension exists.
+     * @param string $filepath
+     * @return string image name with extension
      */
-    protected function layout_info_for_page($generaltype) {
-        if (array_key_exists($generaltype, $this->layouts)) {
-            return $this->layouts[$generaltype];
+    private static function image_exists($filepath) {
+        if (file_exists("$filepath.gif")) {
+            return "$filepath.gif";
+        } else  if (file_exists("$filepath.png")) {
+            return "$filepath.png";
+        } else  if (file_exists("$filepath.jpg")) {
+            return "$filepath.jpg";
+        } else  if (file_exists("$filepath.jpeg")) {
+            return "$filepath.jpeg";
         } else {
-            return reset($this->layouts);
+            return false;
         }
     }
 
     /**
-     * Given the settings of this theme, and the page generaltype, return the
-     * full path of the page layout template to use.
-     *
-     * Used by {@link moodle_core_renderer::header()}. If an appropriate new-style
-     * template cannot be found, returns false to signal that the old-style
-     * header.html and footer.html files should be used.
-     *
-     * @param string $generaltype the general type of the page.
-     * @return string Full path to the template to use, or false if a new-style
-     * template cannot be found.
+     * Loads the theme config from config.php file.
+     * @param string $themename
+     * @param object $settings from config_plugins table
+     * @return object
      */
-    public function template_for_page($generaltype) {
-        global $CFG;
-
-        // Legacy fallback.
-        if (empty($this->layouts)) {
-            return false;
-        }
+    private static function find_theme_config($themename, $settings) {
+        // We have to use the variable name $THEME (upper case) because that
+        // is what is used in theme config.php files.
 
-        $layoutinfo = $this->layout_info_for_page($generaltype);
-        $templatefile = $layoutinfo['layout'];
-
-        // Parse the name that was found.
-        if (strpos($templatefile, 'standard:') === 0) {
-            $templatepath = $CFG->themedir . '/standard/' . substr($templatefile, 9);
-        } else if (strpos($templatefile, 'parent:') === 0) {
-            if (empty($this->parent)) {
-                throw new coding_exception('This theme (' . $this->name .
-                        ') does not have a parent. You cannot specify a layout template like ' .
-                        $templatefile);
-            }
-            $templatepath = $CFG->themedir . '/' . $this->parent . '/' . substr($templatefile, 7);
-        } else {
-            $templatepath = $this->dir . '/' . $templatefile;
+        if (!$dir = theme_config::find_theme_location($themename)) {
+            return null;
         }
-
-        // Check the template exists.
-        if (!is_readable($templatepath)) {
-            throw new coding_exception('The template ' . $templatefile . ' (' . $templatepath .
-                    ') for page type ' . $generaltype . ' cannot be found in this theme (' .
-                    $this->name . ')');
+        
+        $THEME = new object();
+        $THEME->name     = $themename;
+        $THEME->dir      = $dir;
+        $THEME->settings = $settings;
+
+        global $CFG; // just in case somebody tries to use $CFG in theme config
+        include("$THEME->dir/config.php");
+
+        // verify the theme configuration is OK
+        if (!is_array($THEME->parents)) {
+            // parents option is mandatory now
+            return null;
         }
 
-        return $templatepath;
+        return $THEME;
     }
 
     /**
-     * Inform a block_manager about the block regions this theme wants on this
-     * type of page.
-     * @param string $generaltype the general type of the page.
-     * @param block_manager $blockmanager the block_manger to set up.
-     * @return void
+     * Finds the theme location and verifies the theme has all needed files
+     * and is not obsoleted.
+     * @param string $themename
+     * @return string full dir path or null if not found
      */
-    public function setup_blocks($generaltype, $blockmanager) {
-        // Legacy fallback.
-        if (empty($this->layouts)) {
-            if (!in_array($generaltype, array('form', 'popup', 'maintenance'))) {
-                $blockmanager->add_regions(array(BLOCK_POS_LEFT, BLOCK_POS_RIGHT));
-                $blockmanager->set_default_region(BLOCK_POS_RIGHT);
-            }
-            return;
-        }
+    private static function find_theme_location($themename) {
+        global $CFG;
+
+        if (file_exists("$CFG->dirroot/theme/$themename/config.php")) {
+            $dir = "$CFG->dirroot/theme/$themename";
 
-        $layoutinfo = $this->layout_info_for_page($generaltype);
-        if (!empty($layoutinfo['regions'])) {
-            $blockmanager->add_regions($layoutinfo['regions']);
-            $blockmanager->set_default_region($layoutinfo['defaultregion']);
         } else {
-        	$blockmanager->set_default_region('');
+            return null;
         }
+
+        if (file_exists("$dir/styles.php")) {
+            //legacy theme - needs to be upgraded - upgrade info is displayed on the admin settings page
+            return null;
+        }
+        
+        return $dir;
     }
 
     /**
-     * Get the list of all block regions known to this theme in all templates.
-     * @return array internal region name => human readable name.
+     * Get the renderer for a part of Moodle for this theme.
+     * @param string $module the name of part of moodle. E.g. 'core', 'quiz', 'qtype_multichoice'.
+     * @param moodle_page $page the page we are rendering
+     * @param string $subtype optional subtype such as 'news' resulting to 'mod_forum_news'
+     * @return renderer_base the requested renderer.
      */
-    public function get_all_block_regions() {
-        // Legacy fallback.
-        if (empty($this->layouts)) {
-            return array(
-                'side-pre' => get_string('region-side-pre', 'theme_standard'),
-                'side-post' => get_string('region-side-post', 'theme_standard'),
-            );
-        }
-
-        $regions = array();
-        foreach ($this->layouts as $layoutinfo) {
-            $ownertheme = $this->name;
-            if (strpos($layoutinfo['layout'], 'standard:') === 0) {
-                $ownertheme = 'standard';
-            } else if (strpos($layoutinfo['layout'], 'parent:') === 0) {
-                $ownertheme = $this->parent;
-            }
-
-            foreach ($layoutinfo['regions'] as $region) {
-                $regions[$region] = get_string('region-' . $region, 'theme_' . $ownertheme);
+    public function get_renderer($module, $page, $subtype=null) {
+        if (is_null($this->rf)) {
+            if (CLI_SCRIPT) {
+                $classname = 'cli_renderer_factory';
+            } else {
+                $classname = $this->rendererfactory;
             }
+            $this->rf = new $classname($this);
         }
-        return $regions;
+
+        return $this->rf->get_renderer($module, $page, $subtype);
     }
 
     /**
-     * Helper method used by {@link update_legacy_information()}. Update one entry
-     * in the $this->pluginsheets array, based on the legacy $property propery.
-     * @param string $plugintype e.g. 'mod'.
-     * @param string $property e.g. 'modsheets'.
-     * @return void
+     * Get the information from {@link $layouts} for this type of page.
+     * @param string $pagelayout the the page layout name.
+     * @return array the appropriate part of {@link $layouts}.
      */
-    protected function update_legacy_plugin_sheets($plugintype, $property) {
-        // In Moodle 1.9, modsheets etc. were ignored if standardsheets was false.
-        if (!empty($this->standardsheets) && property_exists($this, $property)) {
-            debugging('$THEME->' . $property . ' is deprecated. Please use the new $THEME->pluginsheets instead.', DEBUG_DEVELOPER);
-            if (!empty($this->$property) && !in_array($plugintype, $this->pluginsheets)) {
-                $this->pluginsheets[] = $plugintype;
-            } else if (empty($this->$property) && in_array($plugintype, $this->pluginsheets)) {
-                unset($this->pluginsheets[array_search($plugintype, $this->pluginsheets)]);
-            }
+    protected function layout_info_for_page($pagelayout) {
+        if (array_key_exists($pagelayout, $this->layouts)) {
+            return $this->layouts[$pagelayout];
+        } else {
+            return $this->layouts['normal'];
         }
     }
 
     /**
-     * This method looks a the settings that have been loaded, to see whether
-     * any legacy things are being used, and outputs warning and tries to update
-     * things to use equivalent newer settings.
-     * @return void
+     * Given the settings of this theme, and the page pagelayout, return the
+     * full path of the page layout file to use.
+     *
+     * Used by {@link core_renderer::header()}.
+     *
+     * @param string $pagelayout the the page layout name.
+     * @return string Full path to the lyout file to use
      */
-    protected function update_legacy_information() {
+    public function layout_file($pagelayout) {
         global $CFG;
 
-        $this->update_legacy_plugin_sheets('mod', 'modsheets');
-        $this->update_legacy_plugin_sheets('block', 'blocksheets');
-        $this->update_legacy_plugin_sheets('format', 'formatsheets');
-        $this->update_legacy_plugin_sheets('gradereport', 'gradereportsheets');
+        $layoutinfo = $this->layout_info_for_page($pagelayout);
+        $layoutfile = $layoutinfo['file'];
+        $theme = $layoutinfo['theme'];
 
-        if (!empty($this->langsheets)) {
-            debugging('$THEME->langsheets is no longer supported. No languages were ' .
-                    'using it for anything, and it did not seem to serve any purpose.', DEBUG_DEVELOPER);
-        }
+        if ($dir = $this->find_theme_location($theme)) {
+            $path = "$dir/layout/$layoutfile";
 
-        if (!empty($this->customcorners)) {
-            // $THEME->customcorners is deprecated but we provide support for it via the
-            // custom_corners_renderer_factory class in lib/deprecatedlib.php
-            debugging('$THEME->customcorners is deprecated. Please use the new $THEME->rendererfactory ' .
-                    'to control HTML generation. Please use $this->rendererfactory = \'custom_corners_renderer_factory\'; ' .
-                    'in your config.php file instead.', DEBUG_DEVELOPER);
-            $this->rendererfactory = 'custom_corners_renderer_factory';
+            // Check the template exists, return general base theme template if not.
+            if (is_readable($path)) {
+                return $path;
+            }
         }
 
-        if (!empty($this->cssconstants)) {
-            debugging('$THEME->cssconstants is deprecated. Please use ' .
-                    '$THEME->customcssoutputfunction = \'output_css_replacing_constants\'; ' .
-                    'in your config.php file instead.', DEBUG_DEVELOPER);
-            $this->customcssoutputfunction = 'output_css_replacing_constants';
-        }
+        // fallback to standard normal layout
+        return "$CFG->dirroot/theme/base/layout/general.php";
+    }
 
-        if (!empty($this->CSSEdit)) {
-            debugging('$THEME->CSSEdit is deprecated. Please use ' .
-                    '$THEME->customcssoutputfunction = \'output_css_for_css_edit\'; ' .
-                    'in your config.php file instead.', DEBUG_DEVELOPER);
-            $this->customcssoutputfunction = 'output_css_for_css_edit';
+    /**
+     * Returns auxiliary page layout options specified in layout configuration array.
+     * @param string $pagelayout
+     * @return array
+     */
+    public function pagelayout_options($pagelayout) {
+        $info = $this->layout_info_for_page($pagelayout);
+        if (!empty($info['options'])) {
+            return $info['options'];
         }
+        return array();
+    }
 
-        if (!empty($CFG->smartpix)) {
-            $this->iconfinder = 'smartpix_icon_finder';
-        } else if ($this->custompix) {
-            $this->iconfinder = 'theme_icon_finder';
+    /**
+     * Inform a block_manager about the block regions this theme wants on this
+     * page layout.
+     * @param string $pagelayout the general type of the page.
+     * @param block_manager $blockmanager the block_manger to set up.
+     * @return void
+     */
+    public function setup_blocks($pagelayout, $blockmanager) {
+        $layoutinfo = $this->layout_info_for_page($pagelayout);
+        if (!empty($layoutinfo['regions'])) {
+            $blockmanager->add_regions($layoutinfo['regions']);
+            $blockmanager->set_default_region($layoutinfo['defaultregion']);
         }
     }
 
     /**
-     * Set the variable $CFG->pixpath and $CFG->modpixpath to be the right
-     * ones for this theme. These should no longer be used, but legacy code
-     * might still rely on them.
-     * @return void
+     * Get the list of all block regions known to this theme in all templates.
+     * @return array internal region name => human readable name.
      */
-    public function setup_legacy_pix_paths() {
-        global $CFG;
-        if (!empty($CFG->smartpix)) {
-            if ($CFG->slasharguments) {
-                // Use this method if possible for better caching
-                $extra = '';
-            } else {
-                $extra = '?file=';
+    public function get_all_block_regions() {
+        $regions = array();
+        //TODO: this is weird because the regions from different layouts override each other
+        foreach ($this->layouts as $layoutinfo) {
+            foreach ($layoutinfo['regions'] as $region) {
+                $regions[$region] = get_string('region-' . $region, 'theme_' . $layoutinfo['theme']);
             }
-            $CFG->pixpath = $CFG->httpswwwroot . '/pix/smartpix.php' . $extra . '/' . $this->name;
-            $CFG->modpixpath = $CFG->httpswwwroot . '/pix/smartpix.php' . $extra . '/' . $this->name . '/mod';
-
-        } else if (empty($THEME->custompix)) {
-            $CFG->pixpath = $CFG->httpswwwroot . '/pix';
-            $CFG->modpixpath = $CFG->httpswwwroot . '/mod';
-
-        } else {
-            $CFG->pixpath = $CFG->httpsthemewww . '/' . $this->name . '/pix';
-            $CFG->modpixpath = $CFG->httpsthemewww . '/' . $this->name . '/pix/mod';
         }
+        return $regions;
     }
 }
 
+
 /**
  * This class keeps track of which HTML tags are currently open.
  *
@@ -892,311 +1156,3 @@ class xhtml_container_stack {
         return '<ul>' . implode("\n", $this->log) . '</ul>';
     }
 }
-
-/**
- * An icon finder is responsible for working out the correct URL for an icon.
- *
- * A icon finder must also have a constructor that takes a theme object.
- * (See {@link standard_icon_finder::__construct} for an example.)
- *
- * Note that we are planning to change the Moodle icon naming convention before
- * the Moodle 2.0 release. Therefore, this API will probably change.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since     Moodle 2.0
- */
-interface icon_finder {
-    /**
-     * Return the URL for an icon identified as in pre-Moodle 2.0 code.
-     *
-     * Suppose you have old code like $url = "$CFG->pixpath/i/course.gif";
-     * then old_icon_url('i/course'); will return the equivalent URL that is correct now.
-     *
-     * @param string $iconname the name of the icon.
-     * @return string the URL for that icon.
-     */
-    public function old_icon_url($iconname);
-
-    /**
-     * Return the URL for an icon identified as in pre-Moodle 2.0 code.
-     *
-     * Suppose you have old code like $url = "$CFG->modpixpath/$mod/icon.gif";
-     * then mod_icon_url('icon', $mod); will return the equivalent URL that is correct now.
-     *
-     * @param string $iconname the name of the icon.
-     * @param string $module the module the icon belongs to.
-     * @return string the URL for that icon.
-     */
-    public function mod_icon_url($iconname, $module);
-}
-
-/**
- * This icon finder implements the old scheme that was used when themes that had
- * $THEME->custompix = false.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since     Moodle 2.0
- */
-class pix_icon_finder implements icon_finder {
-    /**
-     * Constructor
-     * @param theme_config $theme the theme we are finding icons for (which is irrelevant).
-     */
-    public function __construct($theme) {
-    }
-
-    /**
-     * Implement interface method.
-     * @param string $iconname the name of the icon.
-     * @return string the URL for that icon.
-     */
-    public function old_icon_url($iconname) {
-        global $CFG;
-        if (file_exists($CFG->dirroot . '/pix/' . $iconname . '.png')) {
-            return $CFG->httpswwwroot . '/pix/' . $iconname . '.png';
-        } else {
-            return $CFG->httpswwwroot . '/pix/' . $iconname . '.gif';
-        }
-    }
-
-    /**
-     * Implement interface method.
-     * @param string $iconname the name of the icon.
-     * @param string $module the module the icon belongs to.
-     * @return string the URL for that icon.
-     */
-    public function mod_icon_url($iconname, $module) {
-        global $CFG;
-        if (file_exists($CFG->dirroot . '/mod/' . $module . '/' . $iconname . '.png')) {
-            return $CFG->httpswwwroot . '/mod/' . $module . '/' . $iconname . '.png';
-        } else {
-            return $CFG->httpswwwroot . '/mod/' . $module . '/' . $iconname . '.gif';
-        }
-    }
-}
-
-
-/**
- * This icon finder implements the old scheme that was used for themes that had
- * $THEME->custompix = true.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since     Moodle 2.0
- */
-class theme_icon_finder implements icon_finder {
-    protected $themename;
-    /**
-     * Constructor
-     * @param theme_config $theme the theme we are finding icons for.
-     */
-    public function __construct($theme) {
-        $this->themename = $theme->name;
-    }
-
-    /**
-     * Implement interface method.
-     * @param string $iconname the name of the icon.
-     * @return string the URL for that icon.
-     */
-    public function old_icon_url($iconname) {
-        global $CFG;
-        if (file_exists($CFG->themedir . '/' . $this->themename . '/pix/' . $iconname . '.png')) {
-            return $CFG->httpsthemewww . '/' . $this->themename . '/pix/' . $iconname . '.png';
-        } else {
-            return $CFG->httpsthemewww . '/' . $this->themename . '/pix/' . $iconname . '.gif';
-        }
-    }
-
-    /**
-     * Implement interface method.
-     * @param string $iconname the name of the icon.
-     * @param string $module the module the icon belongs to.
-     * @return string the URL for that icon.
-     */
-    public function mod_icon_url($iconname, $module) {
-        global $CFG;
-        if (file_exists($CFG->themedir . '/' . $this->themename . '/pix/mod/' . $module . '/' . $iconname . '.png')) {
-            return $CFG->httpsthemewww . '/' . $this->themename . '/pix/mod/' . $module . '/' . $iconname . '.png';
-        } else {
-            return $CFG->httpsthemewww . '/' . $this->themename . '/pix/mod/' . $module . '/' . $iconname . '.gif';
-        }
-    }
-}
-
-
-/**
- * This icon finder implements the algorithm in pix/smartpix.php.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since     Moodle 2.0
- */
-class smartpix_icon_finder extends pix_icon_finder {
-    protected $places = array();
-
-    /**
-     * Constructor
-     * @param theme_config $theme the theme we are finding icons for.
-     */
-    public function __construct($theme) {
-        global $CFG;
-        $this->places[$CFG->themedir . '/' . $theme->name . '/pix/'] =
-                $CFG->httpsthemewww . '/' . $theme->name . '/pix/';
-        if (!empty($theme->parent)) {
-            $this->places[$CFG->themedir . '/' . $theme->parent . '/pix/'] =
-                    $CFG->httpsthemewww . '/' . $theme->parent . '/pix/';
-        }
-    }
-
-    /**
-     * Implement interface method.
-     * @param string $iconname the name of the icon.
-     * @return string the URL for that icon.
-     */
-    public function old_icon_url($iconname) {
-        foreach ($this->places as $dirroot => $urlroot) {
-            if (file_exists($dirroot . $iconname . '.png')) {
-                return $dirroot . $iconname . '.png';
-            } else if (file_exists($dirroot . $iconname . '.gif')) {
-                return $dirroot . $iconname . '.gif';
-            }
-        }
-        return parent::old_icon_url($iconname);
-    }
-
-    /**
-     * Implement interface method.
-     * @param string $iconname the name of the icon.
-     * @param string $module the module the icon belongs to.
-     * @return string the URL for that icon.
-     */
-    public function mod_icon_url($iconname, $module) {
-        foreach ($this->places as $dirroot => $urlroot) {
-            if (file_exists($dirroot . 'mod/' . $iconname . '.png')) {
-                return $dirroot . 'mod/' . $iconname . '.png';
-            } else if (file_exists($dirroot . 'mod/' . $iconname . '.gif')) {
-                return $dirroot . 'mod/' . $iconname . '.gif';
-            }
-        }
-        return parent::old_icon_url($iconname, $module);
-    }
-}
-
-
-/**
- * Output CSS while replacing constants/variables. See MDL-6798 for details
- *
- * Information from Urs Hunkler:
- *
- * This is an adaptation of Shaun Inman's "CSS Server-side Constants" for Moodle.
- * http://www.shauninman.com/post/heap/2005/08/09/css_constants
- *
- * To use, specify $THEME->customcssoutputfunction = 'output_css_replacing_constants';
- * in your theme's config.php file.
- *
- * The constant definitions are written into a separate CSS file named like
- * constants.css and loaded first in config.php. You can use constants for any
- * CSS properties. The constant definition looks like:
- * <code>
- * \@server constants {
- *   fontColor: #3a2830;
- *   aLink: #116699;
- *   aVisited: #AA2200;
- *   aHover: #779911;
- *   pageBackground: #FFFFFF;
- *   backgroundColor: #EEEEEE;
- *   backgroundSideblockHeader: #a8a4e9;
- *   fontcolorSideblockHeader: #222222;
- *   color1: #98818b;
- *   color2: #bd807b;
- *   color3: #f9d1d7;
- *   color4: #e8d4d8;
- * }
- * </code>
- *
- * The lines in the CSS files using CSS constants look like:
- * <code>
- * body {
- *   font-size: 100%;
- *   background-color: pageBackground;
- *   color: fontColor;
- *   font-family: 'Bitstream Vera Serif', georgia, times, serif;
- *   margin: 0;
- *   padding: 0;
- * }
- * div#page {
- *   margin: 0 10px;
- *   padding-top: 5px;
- *   border-top-width: 10px;
- *   border-top-style: solid;
- *   border-top-color: color3;
- * }
- * div.clearer {
- *   clear: both;
- * }
- * a:link {
- *   color: aLink;
- * }
- * </code>
- *
- * @param array $files an array of the CSS fields that need to be output.
- * @param array $toreplace for convenience. If you are going to output the names
- *      of the css files, for debugging purposes, then you should output
- *      str_replace($toreplace, '', $file); because it looks prettier.
- * @return void
- */
-function output_css_replacing_constants($files, $toreplace) {
-    // Get all the CSS.
-    ob_start();
-    foreach ($files as $file) {
-        $shortname = str_replace($toreplace, '', $file);
-        echo '/******* ' . $shortname . " start *******/\n\n";
-        @include_once($file);
-        echo '/******* ' . $shortname . " end *******/\n\n";
-    }
-    $css = ob_get_contents();
-    ob_end_clean();
-
-    if (preg_match_all("/@server\s+(?:variables|constants)\s*\{\s*([^\}]+)\s*\}\s*/i", $css, $matches)) {
-        $variables = array();
-        foreach ($matches[0] as $key => $server) {
-            $css = str_replace($server, '', $css);
-            preg_match_all("/([^:\}\s]+)\s*:\s*([^;\}]+);/", $matches[1][$key], $vars);
-            foreach ($vars[1] as $var => $value) {
-                $variables[$value] = $vars[2][$var];
-            }
-        }
-        $css = str_replace(array_keys($variables), array_values($variables), $css);
-    }
-    echo $css;
-}
-
-/**
- * This CSS output function will link to CSS files rather than including them
- * inline.
- *
- * The single CSS files can then be edited and saved with interactive
- * CSS editors like CSSEdit. Any files that have a .php extension are still included
- * inline.
- *
- * @param array $files an array of the CSS fields that need to be output.
- * @param array $toreplace for convenience. If you are going to output the names
- *      of the css files, for debugging purposes, then you should output
- *      str_replace($toreplace, '', $file); because it looks prettier.
- * @return void
- */
-function output_css_for_css_edit($files, $toreplace) {
-    foreach ($files as $file) {
-        $shortname = str_replace($toreplace, '', $file);
-        echo '/* @group ' . $shortname . " */\n\n";
-        if (strpos($file, '.css') !== false) {
-            echo '@import url("' . $file . '");'."\n\n";
-        } else {
-            @include_once($file);
-        }
-        echo "/* @end */\n\n";
-    }
-}
diff --git a/lib/outputrenderers.php b/lib/outputrenderers.php
index 9c26d4f8f5..e88676de67 100644
--- a/lib/outputrenderers.php
+++ b/lib/outputrenderers.php
@@ -37,7 +37,7 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  * @since     Moodle 2.0
  */
-class moodle_renderer_base {
+class renderer_base {
     /** @var xhtml_container_stack the xhtml_container_stack to use. */
     protected $opencontainers;
     /** @var moodle_page the page we are rendering for. */
@@ -149,31 +149,27 @@ class moodle_renderer_base {
         return $classes;
     }
 
-    /**
-     * Return the URL for an icon identified as in pre-Moodle 2.0 code.
-     *
-     * Suppose you have old code like $url = "$CFG->pixpath/i/course.gif";
-     * then old_icon_url('i/course'); will return the equivalent URL that is correct now.
-     *
-     * @param string $iconname the name of the icon.
-     * @return string the URL for that icon.
-     */
-    public function old_icon_url($iconname) {
-        return $this->page->theme->old_icon_url($iconname);
+    /** OBSOLETED: to be removed soon */
+    public function old_icon_url($iconname, $component='moodle', $escaped=true) {
+        $url = $this->page->theme->image_url($iconname, $component);
+        return $url->out(false, array(), $escaped);
+    }
+
+    /** OBSOLETED: to be removed soon */
+    public function mod_icon_url($iconname, $component, $escaped=true) {
+        $url = $this->page->theme->image_url($iconname, $component);
+        return $url->out(false, array(), $escaped);
     }
 
     /**
-     * Return the URL for an icon identified as in pre-Moodle 2.0 code.
+     * Return the moodle_url for an image
      *
-     * Suppose you have old code like $url = "$CFG->modpixpath/$mod/icon.gif";
-     * then mod_icon_url('icon', $mod); will return the equivalent URL that is correct now.
-     *
-     * @param string $iconname the name of the icon.
-     * @param string $module the module the icon belongs to.
-     * @return string the URL for that icon.
+     * @param string $imagename the name of the image
+     * @param string $component full plugin name
+     * @return moodle_url
      */
-    public function mod_icon_url($iconname, $module) {
-        return $this->page->theme->mod_icon_url($iconname, $module);
+    public function image_url($imagename, $component='moodle') {
+        return $this->page->theme->image_url($imagename, $component);
     }
 
     /**
@@ -220,198 +216,13 @@ class moodle_renderer_base {
 
 
 /**
- * This is the templated renderer which copies the API of another class, replacing
- * all methods calls with instantiation of a template.
- *
- * When the method method_name is called, this class will search for a template
- * called method_name.php in the folders in $searchpaths, taking the first one
- * that it finds. Then it will set up variables for each of the arguments of that
- * method, and render the template. This is implemented in the {@link __call()}
- * PHP magic method.
- *
- * Methods like print_box_start and print_box_end are handles specially, and
- * implemented in terms of the print_box.php method.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since     Moodle 2.0
- */
-class template_renderer extends moodle_renderer_base {
-    /** @var ReflectionClass information about the class whose API we are copying. */
-    protected $copiedclass;
-    /** @var array of places to search for templates. */
-    protected $searchpaths;
-    protected $rendererfactory;
-
-    /**
-     * Magic word used when breaking apart container templates to implement
-     * _start and _end methods.
-     */
-    const CONTENTSTOKEN = '-@#-Contents-go-here-#@-';
-
-    /**
-     * Constructor
-     * @param string $copiedclass the name of a class whose API we should be copying.
-     * @param array $searchpaths a list of folders to search for templates in.
-     * @param moodle_page $page the page we are doing output for.
-     */
-    public function __construct($copiedclass, $searchpaths, $page) {
-        parent::__construct($page);
-        $this->copiedclass = new ReflectionClass($copiedclass);
-        $this->searchpaths = $searchpaths;
-    }
-
-    /**
-     * PHP magic method implementation. Do not use this method directly.
-     * @param string $method The method to call
-     * @param array $arguments The arguments to pass to the method
-     * @return mixed The return value of the called method
-     */
-    public function __call($method, $arguments) {
-        if (substr($method, -6) == '_start') {
-            return $this->process_start(substr($method, 0, -6), $arguments);
-        } else if (substr($method, -4) == '_end') {
-            return $this->process_end(substr($method, 0, -4), $arguments);
-        } else {
-            return $this->process_template($method, $arguments);
-        }
-    }
-
-    /**
-     * Render the template for a given method of the renderer class we are copying,
-     * using the arguments passed.
-     * @param string $method the method that was called.
-     * @param array $arguments the arguments that were passed to it.
-     * @return string the HTML to be output.
-     */
-    protected function process_template($method, $arguments) {
-        if (!$this->copiedclass->hasMethod($method) ||
-                !$this->copiedclass->getMethod($method)->isPublic()) {
-            throw new coding_exception('Unknown method ' . $method);
-        }
-
-        // Find the template file for this method.
-        $template = $this->find_template($method);
-
-        // Use the reflection API to find out what variable names the arguments
-        // should be stored in, and fill in any missing ones with the defaults.
-        $namedarguments = array();
-        $expectedparams = $this->copiedclass->getMethod($method)->getParameters();
-        foreach ($expectedparams as $param) {
-            $paramname = $param->getName();
-            if (!empty($arguments)) {
-                $namedarguments[$paramname] = array_shift($arguments);
-            } else if ($param->isDefaultValueAvailable()) {
-                $namedarguments[$paramname] = $param->getDefaultValue();
-            } else {
-                throw new coding_exception('Missing required argument ' . $paramname);
-            }
-        }
-
-        // Actually render the template.
-        return $this->render_template($template, $namedarguments);
-    }
-
-    /**
-     * Actually do the work of rendering the template.
-     * @param string $_template the full path to the template file.
-     * @param array $_namedarguments an array variable name => value, the variables
-     *      that should be available to the template.
-     * @return string the HTML to be output.
-     */
-    protected function render_template($_template, $_namedarguments) {
-        // Note, we intentionally break the coding guidelines with regards to
-        // local variable names used in this function, so that they do not clash
-        // with the names of any variables being passed to the template.
-
-        global $CFG, $SITE, $THEME, $USER;
-        // The next lines are a bit tricky. The point is, here we are in a method
-        // of a renderer class, and this object may, or may not, be the same as
-        // the global $OUTPUT object. When rendering the template, we want to use
-        // this object. However, people writing Moodle code expect the current
-        // renderer to be called $OUTPUT, not $this, so define a variable called
-        // $OUTPUT pointing at $this. The same comment applies to $PAGE and $COURSE.
-        $OUTPUT = $this;
-        $PAGE = $this->page;
-        $COURSE = $this->page->course;
-
-        // And the parameters from the function call.
-        extract($_namedarguments);
-
-        // Include the template, capturing the output.
-        ob_start();
-        include($_template);
-        $_result = ob_get_contents();
-        ob_end_clean();
-
-        return $_result;
-    }
-
-    /**
-     * Searches the folders in {@link $searchpaths} to try to find a template for
-     * this method name. Throws an exception if one cannot be found.
-     * @param string $method the method name.
-     * @return string the full path of the template to use.
-     */
-    protected function find_template($method) {
-        foreach ($this->searchpaths as $path) {
-            $filename = $path . '/' . $method . '.php';
-            if (file_exists($filename)) {
-                return $filename;
-            }
-        }
-        throw new coding_exception('Cannot find template for ' . $this->copiedclass->getName() . '::' . $method);
-    }
-
-    /**
-     * Handle methods like print_box_start by using the print_box template,
-     * splitting the result, pushing the end onto the stack, then returning the start.
-     * @param string $method the method that was called, with _start stripped off.
-     * @param array $arguments the arguments that were passed to it.
-     * @return string the HTML to be output.
-     */
-    protected function process_start($method, $arguments) {
-        array_unshift($arguments, self::CONTENTSTOKEN);
-        $html = $this->process_template($method, $arguments);
-        list($start, $end) = explode(self::CONTENTSTOKEN, $html, 2);
-        $this->opencontainers->push($method, $end);
-        return $start;
-    }
-
-    /**
-     * Handle methods like print_box_end, we just need to pop the end HTML from
-     * the stack.
-     * @param string $method the method that was called, with _end stripped off.
-     * @param array $arguments not used. Assumed to be irrelevant.
-     * @return string the HTML to be output.
-     */
-    protected function process_end($method, $arguments) {
-        return $this->opencontainers->pop($method);
-    }
-
-    /**
-     * @return array the list of paths where this class searches for templates.
-     */
-    public function get_search_paths() {
-        return $this->searchpaths;
-    }
-
-    /**
-     * @return string the name of the class whose API we are copying.
-     */
-    public function get_copied_class() {
-        return $this->copiedclass->getName();
-    }
-}
-
-/**
- * The standard implementation of the moodle_core_renderer interface.
+ * The standard implementation of the core_renderer interface.
  *
  * @copyright 2009 Tim Hunt
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  * @since     Moodle 2.0
  */
-class moodle_core_renderer extends moodle_renderer_base {
+class core_renderer extends renderer_base {
     /** @var string used in {@link header()}. */
     const PERFORMANCE_INFO_TOKEN = '%%PERFORMANCEINFO%%';
     /** @var string used in {@link header()}. */
@@ -510,7 +321,14 @@ class moodle_core_renderer extends moodle_renderer_base {
             }
         }
 
-        /// Perform a browser environment check for the flash version.  Should only run once per login session.
+        // Get the theme stylesheet - this has to be always first CSS, this loads also styles.css from all plugins;
+        // any other custom CSS can not be overridden via themes and is highly discouraged
+        $urls = $this->page->theme->css_urls();
+        foreach ($urls as $url) {
+            $output .= '<link rel="stylesheet" type="text/css" href="' . $url->out() . '" />' . "\n";
+        }
+
+        // Perform a browser environment check for the flash version.  Should only run once per login session.
         if (isloggedin() && !empty($CFG->excludeoldflashclients) && empty($SESSION->flashversion)) {
             $this->page->requires->yui_lib('event')->in_head();
             $this->page->requires->yui_lib('connection')->in_head();
@@ -519,9 +337,6 @@ class moodle_core_renderer extends moodle_renderer_base {
             $this->page->requires->js_function_call('setflashversiontosession', array($CFG->wwwroot, sesskey()));
         }
 
-        // Add the meta tags from the themes if any were requested.
-        $output .= $this->page->theme->get_meta_tags($this->page);
-
         // Get any HTML from the page_requirements_manager.
         $output .= $this->page->requires->get_head_code();
 
@@ -698,28 +513,22 @@ class moodle_core_renderer extends moodle_renderer_base {
 
         $this->page->set_state(moodle_page::STATE_PRINTING_HEADER);
 
-        // Find the appropriate page template, based on $this->page->generaltype.
-        $templatefile = $this->page->theme->template_for_page($this->page->generaltype);
+        // Find the appropriate page layout file, based on $this->page->pagelayout.
+        $layoutfile = $this->page->theme->layout_file($this->page->pagelayout);
+        // Render the layout using the layout file.
+        $rendered = $this->render_page_layout($layoutfile);
 
-        if ($templatefile) {
-            // Render the template.
-            $template = $this->render_page_template($templatefile);
-        } else {
-            // New style template not found, fall back to using header.html and footer.html.
-            $template = $this->handle_legacy_theme();
-        }
-
-        // Slice the template output into header and footer.
-        $cutpos = strpos($template, self::MAIN_CONTENT_TOKEN);
+        // Slice the rendered output into header and footer.
+        $cutpos = strpos($rendered, self::MAIN_CONTENT_TOKEN);
         if ($cutpos === false) {
-            throw new coding_exception('Layout template ' . $templatefile .
+            throw new coding_exception('page layout file ' . $layoutfile .
                     ' does not contain the string "' . self::MAIN_CONTENT_TOKEN . '".');
         }
-        $header = substr($template, 0, $cutpos);
-        $footer = substr($template, $cutpos + strlen(self::MAIN_CONTENT_TOKEN));
+        $header = substr($rendered, 0, $cutpos);
+        $footer = substr($rendered, $cutpos + strlen(self::MAIN_CONTENT_TOKEN));
 
         if (empty($this->contenttype)) {
-            debugging('The layout template did not call $OUTPUT->doctype()');
+            debugging('The page layout file did not call $OUTPUT->doctype()');
             $header = $this->doctype() . $header;
         }
 
@@ -732,17 +541,15 @@ class moodle_core_renderer extends moodle_renderer_base {
     }
 
     /**
-     * Renders and outputs the page template.
-     * @param string $templatefile The name of the template's file
-     * @param array $menu The menu that will be used in the included file
-     * @param array $navigation The navigation that will be used in the included file
+     * Renders and outputs the page layout file.
+     * @param string $layoutfile The name of the layout file
      * @return string HTML code
      */
-    protected function render_page_template($templatefile) {
+    protected function render_page_layout($layoutfile) {
         global $CFG, $SITE, $THEME, $USER;
         // The next lines are a bit tricky. The point is, here we are in a method
         // of a renderer class, and this object may, or may not, be the same as
-        // the global $OUTPUT object. When rendering the template, we want to use
+        // the global $OUTPUT object. When rendering the page layout file, we want to use
         // this object. However, people writing Moodle code expect the current
         // renderer to be called $OUTPUT, not $this, so define a variable called
         // $OUTPUT pointing at $this. The same comment applies to $PAGE and $COURSE.
@@ -750,131 +557,11 @@ class moodle_core_renderer extends moodle_renderer_base {
         $PAGE = $this->page;
         $COURSE = $this->page->course;
 
-        // Required for legacy template uses
-        $navigation = $this->page->has_navbar();
-
-        ob_start();
-        include($templatefile);
-        $template = ob_get_contents();
-        ob_end_clean();
-        return $template;
-    }
-
-    /**
-     * Renders and outputs a legacy template.
-     * @param array $navigation The navigation that will be used in the included file
-     * @param array $menu The menu that will be used in the included file
-     * @return string HTML code
-     */
-    protected function handle_legacy_theme() {
-        global $CFG, $SITE, $USER;
-        // Set a pretend global from the properties of this class.
-        // See the comment in render_page_template for a fuller explanation.
-        $COURSE = $this->page->course;
-        $THEME = $this->page->theme;
-        $OUTPUT = $this;
-
-        // Set up local variables that header.html expects.
-        $direction = $this->htmlattributes();
-        $title = $this->page->title;
-        $heading = $this->page->heading;
-        $focus = $this->page->focuscontrol;
-        $button = $this->page->button;
-        $pageid = $this->page->pagetype;
-        $pageclass = $this->page->bodyclasses;
-        $bodytags = ' class="' . $pageclass . '" id="' . $pageid . '"';
-        $home = $this->page->generaltype == 'home';
-        $menu = $this->page->headingmenu;
-
-        $meta = $this->standard_head_html();
-        // The next line is a nasty hack. having set $meta to standard_head_html, we have already
-        // got the contents of include($CFG->javascript). However, legacy themes are going to
-        // include($CFG->javascript) again. We want to make sure that when they do, nothing is output.
-        $CFG->javascript = $CFG->libdir . '/emptyfile.php';
-
-        // Set up local variables that footer.html expects.
-        $homelink = $this->home_link();
-        $loggedinas = $this->login_info();
-        $course = $this->page->course;
-        $performanceinfo = self::PERFORMANCE_INFO_TOKEN;
-
-        $navigation = $this->page->has_navbar();
-        if (!$menu && $navigation) {
-            $menu = $loggedinas;
-        }
-
-        if (!empty($this->page->theme->layouttable)) {
-            $lt = $this->page->theme->layouttable;
-        } else {
-            $lt = array('left', 'middle', 'right');
-        }
-
-        if (!empty($this->page->theme->block_l_max_width)) {
-            $preferredwidthleft = $this->page->theme->block_l_max_width;
-        } else {
-            $preferredwidthleft = 210;
-        }
-        if (!empty($this->page->theme->block_r_max_width)) {
-            $preferredwidthright = $this->page->theme->block_r_max_width;
-        } else {
-            $preferredwidthright = 210;
-        }
-
         ob_start();
-        include($this->page->theme->dir . '/header.html');
-
-        echo '<table id="layout-table"><tr>';
-        foreach ($lt as $column) {
-            if ($column == 'left' && $this->page->blocks->region_has_content(BLOCK_POS_LEFT, $this)) {
-                echo '<td id="left-column" class="block-region" style="width: ' . $preferredwidthright . 'px; vertical-align: top;">';
-                echo $this->container_start();
-                echo $this->blocks_for_region(BLOCK_POS_LEFT);
-                echo $this->container_end();
-                echo '</td>';
-
-            } else if ($column == 'middle') {
-                echo '<td id="middle-column" style="vertical-align: top;">';
-                echo $this->container_start();
-                echo $this->skip_link_target();
-                echo self::MAIN_CONTENT_TOKEN;
-                echo $this->container_end();
-                echo '</td>';
-
-            } else if ($column == 'right' && $this->page->blocks->region_has_content(BLOCK_POS_RIGHT, $this)) {
-                echo '<td id="right-column" class="block-region" style="width: ' . $preferredwidthright . 'px; vertical-align: top;">';
-                echo $this->container_start();
-                echo $this->blocks_for_region(BLOCK_POS_RIGHT);
-                echo $this->container_end();
-                echo '</td>';
-            }
-        }
-        echo '</tr></table>';
-
-        $menu = str_replace('navmenu', 'navmenufooter', $menu);
-        include($THEME->dir . '/footer.html');
-
-        $output = ob_get_contents();
+        include($layoutfile);
+        $rendered = ob_get_contents();
         ob_end_clean();
-
-        // Put in the start of body code. Bit of a hack, put it in before the first
-        // <div or <table.
-        $divpos = strpos($output, '<div');
-        $tablepos = strpos($output, '<table');
-        if ($divpos === false || ($tablepos !== false && $tablepos < $divpos)) {
-            $pos = $tablepos;
-        } else {
-            $pos = $divpos;
-        }
-        $output = substr($output, 0, $divpos) . $this->standard_top_of_body_html() .
-                substr($output, $divpos);
-
-        // Put in the end token before the end of body.
-        $output = str_replace('</body>', self::END_HTML_TOKEN . '</body>', $output);
-
-        // Make sure we use the correct doctype.
-        $output = preg_replace('/(<!DOCTYPE.+?>)/s', $this->doctype(), $output);
-
-        return $output;
+        return $rendered;
     }
 
     /**
@@ -926,7 +613,7 @@ class moodle_core_renderer extends moodle_renderer_base {
         foreach ($controls as $control) {
             $controlshtml[] = $this->output_tag('a', array('class' => 'icon',
                     'title' => $control['caption'], 'href' => $control['url']),
-                    $this->output_empty_tag('img',  array('src' => $this->old_icon_url($control['icon']),
+                    $this->output_empty_tag('img',  array('src' => $this->image_url($control['icon'])->out(false, array(), false),
                     'alt' => $control['caption'])));
         }
         return $this->output_tag('div', array('class' => 'commands'), implode('', $controlshtml));
@@ -1006,7 +693,7 @@ class moodle_core_renderer extends moodle_renderer_base {
             $plaintitle = strip_tags($bc->title);
             $this->page->requires->js_function_call('new block_hider', array($bc->id, $userpref,
                     get_string('hideblocka', 'access', $plaintitle), get_string('showblocka', 'access', $plaintitle),
-                    $this->old_icon_url('t/switch_minus'), $this->old_icon_url('t/switch_plus')));
+                    $this->image_url('t/switch_minus')->out(false, array(), false), $this->image_url('t/switch_plus')->out(false, array(), false)));
         }
     }
 
@@ -1264,7 +951,7 @@ class moodle_core_renderer extends moodle_renderer_base {
         if (!empty($iconpath)) {
             $icon->image->src = $iconpath;
         } else {
-            $icon->image->src = $this->old_icon_url('docs');
+            $icon->image->src = $this->image_url('docs')->out(false, array(), false);
         }
 
         if (!empty($CFG->doctonewwindow)) {
@@ -1391,7 +1078,7 @@ class moodle_core_renderer extends moodle_renderer_base {
         $image = clone($image);
 
         if (empty($image->src)) {
-            $image->src = $this->old_icon_url('spacer');
+            $image->src = $this->image_url('spacer')->out(false, array(), false);
         }
 
         $image->prepare();
@@ -1947,12 +1634,12 @@ class moodle_core_renderer extends moodle_renderer_base {
 
             // Header not yet printed
             if (isset($_SERVER['SERVER_PROTOCOL'])) {
-				// server protocol should be always present, because this render
-				// can not be used from command line or when outputting custom XML
+                // server protocol should be always present, because this render
+                // can not be used from command line or when outputting custom XML
                 @header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
             }
             $this->page->set_url(''); // no url
-            //$this->page->set_generaltype('form'); //TODO: MDL-20676 blocks on error pages are weird, unfortunately it somehow detect the geenralpagetype from URL :-(
+            //$this->page->set_pagelayout('form'); //TODO: MDL-20676 blocks on error pages are weird, unfortunately it somehow detect the geenralpagetype from URL :-(
             $this->page->set_title(get_string('error'));
             $output .= $this->header();
         }
@@ -1996,7 +1683,7 @@ class moodle_core_renderer extends moodle_renderer_base {
      */
     public function notification($message, $classes = 'notifyproblem') {
         return $this->output_tag('div', array('class' =>
-                moodle_renderer_base::prepare_classes($classes)), clean_text($message));
+                renderer_base::prepare_classes($classes)), clean_text($message));
     }
 
     /**
@@ -2139,7 +1826,7 @@ class moodle_core_renderer extends moodle_renderer_base {
             $oddeven    = 1;
             $keys       = array_keys($table->data);
             $lastrowkey = end($keys);
-            $output .= $this->output_start_tag('tbody', array('class' => moodle_renderer_base::prepare_classes($table->bodyclasses))) . "\n";
+            $output .= $this->output_start_tag('tbody', array('class' => renderer_base::prepare_classes($table->bodyclasses))) . "\n";
 
             foreach ($table->data as $key => $row) {
                 if (($row === 'hr') && ($countcols)) {
@@ -2248,7 +1935,7 @@ class moodle_core_renderer extends moodle_renderer_base {
             throw new coding_exception('Heading level must be an integer between 1 and 6.');
         }
         return $this->output_tag('h' . $level,
-                array('id' => $id, 'class' => moodle_renderer_base::prepare_classes($classes)), $text);
+                array('id' => $id, 'class' => renderer_base::prepare_classes($classes)), $text);
     }
 
     /**
@@ -2271,7 +1958,7 @@ class moodle_core_renderer extends moodle_renderer_base {
     public function box_start($classes = 'generalbox', $id = '') {
         $this->opencontainers->push('box', $this->output_end_tag('div'));
         return $this->output_start_tag('div', array('id' => $id,
-                'class' => 'box ' . moodle_renderer_base::prepare_classes($classes)));
+                'class' => 'box ' . renderer_base::prepare_classes($classes)));
     }
 
     /**
@@ -2302,7 +1989,7 @@ class moodle_core_renderer extends moodle_renderer_base {
     public function container_start($classes = '', $id = '') {
         $this->opencontainers->push('container', $this->output_end_tag('div'));
         return $this->output_start_tag('div', array('id' => $id,
-                'class' => moodle_renderer_base::prepare_classes($classes)));
+                'class' => renderer_base::prepare_classes($classes)));
     }
 
     /**
@@ -2382,7 +2069,7 @@ class moodle_core_renderer extends moodle_renderer_base {
     public function navbar() {
         return $this->page->navbar->content();
     }
-    }
+}
 
 
 /// RENDERERS
@@ -2396,7 +2083,7 @@ class moodle_core_renderer extends moodle_renderer_base {
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  * @since     Moodle 2.0
  */
-class cli_core_renderer extends moodle_core_renderer {
+class cli_core_renderer extends core_renderer {
     /**
      * Returns the page header.
      * @return string HTML fragment
diff --git a/lib/pagelib.php b/lib/pagelib.php
index a631656044..3b34c2aaea 100644
--- a/lib/pagelib.php
+++ b/lib/pagelib.php
@@ -39,7 +39,7 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  * @since Moodle 2.0
  *
- * @property-read string $generaltype the general type of page this is. For example 'normal', 'popup', 'home'.
+ * @property-read string $pagelayout the general type of page this is. For example 'normal', 'popup', 'home'.
  *      Allows the theme to display things differently, if it wishes to.
  * @property-read string $title the title that should go in the <head> section of the HTML of this page.
  * @property-read string $heading the main heading that should be displayed at the top of the <body>.
@@ -99,7 +99,14 @@ class moodle_page {
 
     protected $_pagetype = null;
 
-    protected $_generaltype = 'normal';
+    protected $_pagelayout = 'normal';
+
+    /**
+     * List of theme layeout options, these are ignored by core.
+     * To be used in individual theme layout files only.
+     * @var array
+     */
+    protected $_layout_options = array();
 
     protected $_subpage = '';
 
@@ -156,7 +163,7 @@ class moodle_page {
      * This is simply to improve backwards compatability. If old code relies on
      * a page class that implements print_header, or complex logic in
      * user_allowed_editing then we stash an instance of that other class here,
-     * and delegate to it in certani situations.
+     * and delegate to it in certain situations.
      */
     protected $_legacypageobject = null;
 
@@ -284,12 +291,20 @@ class moodle_page {
     }
 
     /**
-     * Please do not call this method directly, use the ->generaltype syntax. {@link __get()}.
+     * Please do not call this method directly, use the ->pagelayout syntax. {@link __get()}.
      * @return string the general type of page this is. For example 'normal', 'popup', 'home'.
      *      Allows the theme to display things differently, if it wishes to.
      */
-    public function get_generaltype() {
-        return $this->_generaltype;
+    public function get_pagelayout() {
+        return $this->_pagelayout;
+    }
+
+    /**
+     * Please do not call this method directly, use the ->layout_tions syntax. {@link __get()}.
+     * @return returns arrys with options for layout file
+     */
+    public function get_layout_options() {
+        return $this->_layout_options;
     }
 
     /**
@@ -373,7 +388,7 @@ class moodle_page {
      * @return blocks_manager the blocks manager object for this page.
      */
     public function get_blocks() {
-        global $CFG, $THEME;
+        global $CFG;
         if (is_null($this->_blocks)) {
             if (!empty($CFG->blockmanagerclass)) {
                 $classname = $CFG->blockmanagerclass;
@@ -549,7 +564,7 @@ class moodle_page {
      */
     public function debug_summary() {
         $summary = '';
-        $summary .= 'General type: ' . $this->generaltype . '. ';
+        $summary .= 'General type: ' . $this->pagelayout . '. ';
         if (!during_initial_install()) {
             $summary .= 'Context ' . print_context_name($this->context) . ' (context id ' . $this->context->id . '). ';
         }
@@ -682,14 +697,13 @@ class moodle_page {
     }
 
     /**
-     * @param string $generaltype the general type of page this is. For example 'popup', 'home'.
+     * @param string $pagelayout the page layout this is. For example 'popup', 'home'.
      * This properly defaults to 'normal', so you only need to call this function if
-     * you want something different. The exact range of supported page types is not
-     * strictly defined, this value is just passed to the theme. However, at the moment
-     * only 'normal', 'popup' amd 'home' are used.
+     * you want something different. The exact range of supported layouts is specified
+     * in the standard theme.
      */
-    public function set_generaltype($generaltype) {
-        $this->_generaltype = $generaltype;
+    public function set_pagelayout($pagelayout) {
+        $this->_pagelayout = $pagelayout;
     }
 
     /**
@@ -951,10 +965,8 @@ class moodle_page {
         if (!empty($CFG->loginhttps)) {
             $HTTPSPAGEREQUIRED = true;
             $CFG->httpswwwroot = str_replace('http:', 'https:', $CFG->wwwroot);
-            $CFG->httpsthemewww = str_replace('http:', 'https:', $CFG->themewww);
         } else {
             $CFG->httpswwwroot = $CFG->wwwroot;
-            $CFG->httpsthemewww = $CFG->themewww;
         }
     }
 
@@ -995,21 +1007,6 @@ class moodle_page {
         // Show the messaging popup, if there are messages.
         message_popup_window();
 
-        // Add any stylesheets required using the horrible legacy mechanism.
-        if (!empty($CFG->stylesheets)) {
-            debugging('Some code on this page is using the horrible legacy mechanism $CFG->stylesheets to include links to ' .
-                    'extra stylesheets. This is deprecated. Please use $PAGE->requires->css(...) instead.', DEBUG_DEVELOPER);
-            foreach ($CFG->stylesheets as $stylesheet) {
-                $this->requires->css($stylesheet, true);
-            }
-        }
-
-        // Require theme stylesheets.
-        $stylesheets = $this->theme->get_stylesheet_urls();
-        foreach ($stylesheets as $stylesheet) {
-            $this->requires->css($stylesheet, true);
-        }
-
         $this->initialise_standard_body_classes();
     }
 
@@ -1035,15 +1032,14 @@ class moodle_page {
         if (is_null($this->_theme)) {
             $themename = $this->resolve_theme();
             $this->_theme = theme_config::load($themename);
+            $this->_layout_options = $this->_theme->pagelayout_options($this->pagelayout);
         }
 
-        $this->_theme->setup_blocks($this->generaltype, $this->blocks);
+        $this->_theme->setup_blocks($this->pagelayout, $this->blocks);
 
         if ($this === $PAGE) {
             $THEME = $this->_theme;
             $OUTPUT = $this->_theme->get_renderer('core', $this);
-            // Support legacy code.
-            $this->_theme->setup_legacy_pix_paths();
         }
 
         $this->_wherethemewasinitialised = debug_backtrace();
diff --git a/lib/session-test.php b/lib/session-test.php
index 3b6a008be7..3e7f72fe9e 100644
--- a/lib/session-test.php
+++ b/lib/session-test.php
@@ -33,7 +33,7 @@
 require '../config.php';
 
 $PAGE->set_url(new moodle_url($CFG->wwwroot.'/lib/session-test.php'));
-$PAGE->set_generaltype('form');
+$PAGE->set_pagelayout('form');
 
 error('session test not reimplemented yet'); //DO NOT localize or use print_error()!
 //
diff --git a/lib/setup.php b/lib/setup.php
index 1478abbba4..2e2c9a3f5a 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -26,6 +26,14 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+// special support for highly optimised scripts that do not need libraries and DB connection
+if (defined('ABORT_AFTER_CONFIG')) {
+    if (!defined('ABORT_AFTER_CONFIG_CANCEL')) {
+        require_once("$CFG->dirroot/lib/configonlylib.php");
+        return;
+    }
+}
+
 /**
  * Holds the core settings that affect how Moodle works. Some of its fields
  * are set in config.php, and the rest are loaded from the config table.
@@ -94,7 +102,7 @@ global $PAGE;
 global $COURSE;
 
 /**
- * $OUTPUT is an instance of moodle_core_renderer or one of its subclasses. Use
+ * $OUTPUT is an instance of core_renderer or one of its subclasses. Use
  * it to generate HTML for output.
  *
  * $OUTPUT is initialised the first time it is used. See {@link bootstrap_renderer}
@@ -202,15 +210,9 @@ $CFG->config_php_settings = (array)$CFG;
 // Set up some paths.
 $CFG->libdir   = $CFG->dirroot .'/lib';
 
-if (!isset($CFG->themedir)) {
-    $CFG->themedir = $CFG->dirroot.'/theme';
-    $CFG->themewww = $CFG->wwwroot.'/theme';
-}
-
 // Set httpswwwroot default value (this variable will replace $CFG->wwwroot
 // inside some URLs used in HTTPSPAGEREQUIRED pages.
 $CFG->httpswwwroot = $CFG->wwwroot;
-$CFG->httpsthemewww = $CFG->themewww;
 
 require_once($CFG->libdir .'/setuplib.php');        // Functions that MUST be loaded first
 
diff --git a/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_get_string.log.php b/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_get_string.log.php
index d338169049..b5dbca77fd 100644
--- a/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_get_string.log.php
+++ b/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_get_string.log.php
@@ -665,8 +665,6 @@ get_string('experimental', 'admin', NULL);
 get_string('experimentalsettings', 'admin', NULL);
 get_string('enableglobalsearch', 'admin', NULL);
 get_string('configenableglobalsearch', 'admin', NULL);
-get_string('smartpix', 'admin', NULL);
-get_string('configsmartpix', 'admin', NULL);
 get_string('enablehtmlpurifier', 'admin', NULL);
 get_string('configenablehtmlpurifier', 'admin', NULL);
 get_string('experimentalsplitrestore', 'admin', NULL);
diff --git a/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_old_get_string.log.php b/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_old_get_string.log.php
index 543029fee5..c6523a663c 100644
--- a/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_old_get_string.log.php
+++ b/lib/simpletest/get_string_fixtures/pagelogs/admin_index.php_old_get_string.log.php
@@ -665,8 +665,6 @@ old_get_string('experimental', 'admin', NULL);
 old_get_string('experimentalsettings', 'admin', NULL);
 old_get_string('enableglobalsearch', 'admin', NULL);
 old_get_string('configenableglobalsearch', 'admin', NULL);
-old_get_string('smartpix', 'admin', NULL);
-old_get_string('configsmartpix', 'admin', NULL);
 old_get_string('enablehtmlpurifier', 'admin', NULL);
 old_get_string('configenablehtmlpurifier', 'admin', NULL);
 old_get_string('experimentalsplitrestore', 'admin', NULL);
diff --git a/lib/simpletest/testoutputlib.php b/lib/simpletest/testoutputlib.php
index cf198ed386..19427acc35 100644
--- a/lib/simpletest/testoutputlib.php
+++ b/lib/simpletest/testoutputlib.php
@@ -29,55 +29,6 @@ if (!defined('MOODLE_INTERNAL')) {
 }
 require_once($CFG->libdir . '/outputlib.php');
 
-
-/**
- * Unit tests for the pix_icon_finder class.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class pix_icon_finder_test extends UnitTestCase {
-    public function test_old_icon_url() {
-        global $CFG;
-        $if = new pix_icon_finder(new theme_config());
-        $this->assertEqual($CFG->httpswwwroot . '/pix/i/course.gif', $if->old_icon_url('i/course'));
-    }
-
-    /* Implement interface method. */
-    public function test_mod_icon_url() {
-        global $CFG;
-        $if = new pix_icon_finder(new theme_config());
-        $this->assertEqual($CFG->httpswwwroot . '/mod/quiz/icon.gif', $if->mod_icon_url('icon', 'quiz'));
-    }
-}
-
-
-/**
- * Unit tests for the standard_renderer_factory class.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class theme_icon_finder_test extends UnitTestCase {
-    public function test_old_icon_url_test() {
-        global $CFG;
-        $theme = new theme_config();
-        $theme->name = 'test';
-        $if = new theme_icon_finder($theme);
-        $this->assertEqual($CFG->httpsthemewww . '/test/pix/i/course.gif', $if->old_icon_url('i/course'));
-    }
-
-    /* Implement interface method. */
-    public function test_mod_icon_url() {
-        global $CFG;
-        $theme = new theme_config();
-        $theme->name = 'test';
-        $if = new theme_icon_finder($theme);
-        $this->assertEqual($CFG->httpsthemewww . '/test/pix/mod/quiz/icon.gif', $if->mod_icon_url('icon', 'quiz'));
-    }
-}
-
-
 /**
  * Subclass of renderer_factory_base for testing. Implement abstract method and
  * count calls, so we can test caching behaviour.
@@ -96,11 +47,11 @@ class testable_renderer_factory extends renderer_factory_base {
         if (!in_array(array($module, $subtype), $this->createcalls)) {
             $this->createcalls[] = array($module, $subtype);
         }
-        return new moodle_core_renderer($page);
+        return new core_renderer($page);
     }
 
-    public function standard_renderer_class_for_module($module, $subtype=null) {
-        return parent::standard_renderer_class_for_module($module, $subtype);
+    public function standard_renderer_class_for_plugin($module, $subtype=null) {
+        return parent::standard_renderer_class_for_plugin($module, $subtype);
     }
 }
 
@@ -111,7 +62,7 @@ class testable_renderer_factory extends renderer_factory_base {
  * @copyright 2009 Tim Hunt
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class moodle_mod_test_renderer extends moodle_core_renderer {
+class mod_test_renderer extends core_renderer {
     public function __construct($containerstack, $page) {
         parent::__construct($containerstack, $page, null);
     }
@@ -144,7 +95,7 @@ class moodle_mod_test_renderer extends moodle_core_renderer {
  * @copyright 2009 David Mudrak
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class moodle_mod_test_subtype_renderer extends moodle_core_renderer {
+class mod_test_subtype_renderer extends core_renderer {
     public function __construct($containerstack, $page) {
         parent::__construct($containerstack, $page, null);
     }
@@ -177,39 +128,39 @@ class renderer_factory_base_test extends UnitTestCase {
 
     }
 
-    public function test_standard_renderer_class_for_module_core() {
+    public function test_standard_renderer_class_for_plugin_core() {
         // Set up.
         $factory = new testable_renderer_factory();
         // Exercise SUT.
-        $classname = $factory->standard_renderer_class_for_module('core');
+        $classname = $factory->standard_renderer_class_for_plugin('core');
         // Verify outcome
-        $this->assertEqual('moodle_core_renderer', $classname);
+        $this->assertEqual('core_renderer', $classname);
     }
 
-    public function test_standard_renderer_class_for_module_test() {
+    public function test_standard_renderer_class_for_plugin_test() {
         // Set up.
         $factory = new testable_renderer_factory();
         // Exercise SUT.
-        $classname = $factory->standard_renderer_class_for_module('mod_test');
+        $classname = $factory->standard_renderer_class_for_plugin('mod_test');
         // Verify outcome
-        $this->assertEqual('moodle_mod_test_renderer', $classname);
+        $this->assertEqual('mod_test_renderer', $classname);
     }
 
-    public function test_standard_renderer_class_for_module_test_with_subtype() {
+    public function test_standard_renderer_class_for_plugin_test_with_subtype() {
         // Set up.
         $factory = new testable_renderer_factory();
         // Exercise SUT.
-        $classname = $factory->standard_renderer_class_for_module('mod_test', 'subtype');
+        $classname = $factory->standard_renderer_class_for_plugin('mod_test', 'subtype');
         // Verify outcome
-        $this->assertEqual('moodle_mod_test_subtype_renderer', $classname);
+        $this->assertEqual('mod_test_subtype_renderer', $classname);
     }
 
-    public function test_standard_renderer_class_for_module_unknown() {
+    public function test_standard_renderer_class_for_plugin_unknown() {
         // Set up.
         $factory = new testable_renderer_factory();
         $this->expectException();
         // Exercise SUT.
-        $classname = $factory->standard_renderer_class_for_module('something_that_does_not_exist');
+        $classname = $factory->standard_renderer_class_for_plugin('something_that_does_not_exist');
     }
 }
 
@@ -237,55 +188,17 @@ class standard_renderer_factory_test extends UnitTestCase {
 
     public function test_get_core_renderer() {
         $renderer = $this->factory->get_renderer('core', new moodle_page);
-        $this->assertIsA($renderer, 'moodle_core_renderer');
-    }
-
-    public function test_get_test_renderer() {
-        $renderer = $this->factory->get_renderer('mod_test', new moodle_page);
-        $this->assertIsA($renderer, 'moodle_mod_test_renderer');
-    }
-
-    public function test_get_test_subtype_renderer() {
-        $renderer = $this->factory->get_renderer('mod_test', new moodle_page, 'subtype');
-        $this->assertIsA($renderer, 'moodle_mod_test_subtype_renderer');
-    }
-}
-
-
-/**
- * Unit tests for the custom_corners_renderer_factory class.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class custom_corners_renderer_factory_test extends UnitTestCase {
-
-    public static $includecoverage = array('lib/outputrenderers.php', 'lib/outputcomponents.php');
-    protected $factory;
-
-    public function setUp() {
-        parent::setUp();
-        $this->factory = new custom_corners_renderer_factory(null, null);
-    }
-
-    public function tearDown() {
-        $this->factory = null;
-        parent::tearDown();
-    }
-
-    public function test_get_core_renderer() {
-        $renderer = $this->factory->get_renderer('core', new moodle_page);
-        $this->assertIsA($renderer, 'custom_corners_core_renderer');
+        $this->assertIsA($renderer, 'core_renderer');
     }
 
     public function test_get_test_renderer() {
         $renderer = $this->factory->get_renderer('mod_test', new moodle_page);
-        $this->assertIsA($renderer, 'moodle_mod_test_renderer');
+        $this->assertIsA($renderer, 'mod_test_renderer');
     }
 
     public function test_get_test_subtype_renderer() {
         $renderer = $this->factory->get_renderer('mod_test', new moodle_page, 'subtype');
-        $this->assertIsA($renderer, 'moodle_mod_test_subtype_renderer');
+        $this->assertIsA($renderer, 'mod_test_subtype_renderer');
     }
 }
 
@@ -311,7 +224,7 @@ class testable_theme_overridden_renderer_factory extends theme_overridden_render
  * @copyright 2009 Tim Hunt
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class theme_overridden_renderer_factory_test extends UnitTestCase {
+/*class theme_overridden_renderer_factory_test extends UnitTestCase { // TODO: MDL-21138 rewrite theme unit tests
 
     public static $includecoverage = array('lib/outputlib.php');
     protected $originalcfgthemedir;
@@ -322,6 +235,7 @@ class theme_overridden_renderer_factory_test extends UnitTestCase {
     public function setUp() {
         global $CFG;
         parent::setUp();
+
         $this->originalcfgthemedir = $CFG->themedir;
 
         $this->workspace = 'temp/theme_overridden_renderer_factory_fixtures';
@@ -352,7 +266,7 @@ class theme_overridden_renderer_factory_test extends UnitTestCase {
     }
 
     protected function write_renderers_file($theme, $code) {
-        $filename = $theme->dir . '/renderers.php';
+        $filename = $theme->dir . '/lib.php';
         file_put_contents($filename, "<?php\n" . $code);
     }
 
@@ -404,15 +318,15 @@ class theme_overridden_renderer_factory_test extends UnitTestCase {
         $subrenderer = $factory->get_renderer('mod_test', new moodle_page, 'subtype');
 
         // Verify outcome
-        $this->assertIsA($renderer, 'moodle_mod_test_renderer');
-        $this->assertIsA($subrenderer, 'moodle_mod_test_subtype_renderer');
+        $this->assertIsA($renderer, 'mod_test_renderer');
+        $this->assertIsA($subrenderer, 'mod_test_subtype_renderer');
     }
 
     public function test_get_renderer_overridden() {
         // Set up - be very careful because the class under test uses require-once. Pick a unique theme name.
         $theme = $this->make_theme('testrenderertheme');
         $this->write_renderers_file($theme, '
-        class testrenderertheme_mod_test_renderer extends moodle_mod_test_renderer {
+        class testrenderertheme_mod_test_renderer extends mod_test_renderer {
         }');
         $factory = new testable_theme_overridden_renderer_factory($theme, $this->page);
 
@@ -422,7 +336,7 @@ class theme_overridden_renderer_factory_test extends UnitTestCase {
 
         // Verify outcome
         $this->assertIsA($renderer, 'testrenderertheme_mod_test_renderer');
-        $this->assertIsA($subrenderer, 'moodle_mod_test_subtype_renderer');
+        $this->assertIsA($subrenderer, 'mod_test_subtype_renderer');
     }
 
     public function test_get_renderer_overridden_in_parent() {
@@ -432,7 +346,7 @@ class theme_overridden_renderer_factory_test extends UnitTestCase {
         $parenttheme = $this->make_theme('parentrenderertheme');
         $this->write_renderers_file($theme, '');
         $this->write_renderers_file($parenttheme, '
-        class parentrenderertheme_core_renderer extends moodle_core_renderer {
+        class parentrenderertheme_core_renderer extends core_renderer {
         }');
         $factory = new testable_theme_overridden_renderer_factory($theme, $this->page);
 
@@ -449,10 +363,10 @@ class theme_overridden_renderer_factory_test extends UnitTestCase {
         $theme->parent = 'ptheme';
         $parenttheme = $this->make_theme('ptheme');
         $this->write_renderers_file($theme, '
-        class ctheme_core_renderer extends moodle_core_renderer {
+        class ctheme_core_renderer extends core_renderer {
         }');
         $this->write_renderers_file($parenttheme, '
-        class ptheme_core_renderer extends moodle_core_renderer {
+        class ptheme_core_renderer extends core_renderer {
         }');
         $factory = new testable_theme_overridden_renderer_factory($theme, $this->page);
 
@@ -462,199 +376,7 @@ class theme_overridden_renderer_factory_test extends UnitTestCase {
         // Verify outcome
         $this->assertIsA($renderer, 'ctheme_core_renderer');
     }
-}
-
-
-/**
- * Test-specific subclass that implements a getter for $searchpaths.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class testable_template_renderer_factory extends template_renderer_factory {
-
-    public static $includecoverage = array('lib/outputrenderers.php', 'lib/outputcomponents.php');
-    public function get_search_paths() {
-        return $this->searchpaths;
-    }
-}
-
-
-/**
- * Unit tests for the template_renderer_factory class.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class template_renderer_factory_test extends UnitTestCase {
-
-    public static $includecoverage = array('lib/outputrenderers.php', 'lib/outputcomponents.php');
-    protected $originalcfgthemedir;
-    protected $workspace;
-    protected $page;
-    protected $foldertocleanup = null;
-
-    public function setUp() {
-        global $CFG;
-        parent::setUp();
-        $this->originalcfgthemedir = $CFG->themedir;
-
-        $this->workspace = 'temp/template_renderer_factory_fixtures';
-        make_upload_directory($this->workspace);
-        $CFG->themedir = $CFG->dataroot . '/' . $this->workspace;
-        $this->foldertocleanup = $CFG->themedir;
-
-        $this->page = new moodle_page;
-    }
-
-    public function tearDown() {
-        global $CFG;
-        if (!empty($this->foldertocleanup)) {
-            fulldelete($this->foldertocleanup);
-            $this->foldertocleanup = null;
-        }
-        $CFG->themedir = $this->originalcfgthemedir;
-        parent::tearDown();
-    }
-
-    protected function make_theme($name) {
-        global $CFG;
-        $theme = new stdClass;
-        $theme->name = $name;
-        $theme->dir = $CFG->themedir . '/' . $name;
-        make_upload_directory($this->workspace . '/' . $name);
-        return $theme;
-    }
-
-    protected function make_theme_template_dir($name, $module = '', $submodule = '') {
-        $path = $this->workspace . '/' . $name . '/templates';
-        if ($module) {
-            $path .= '/' . $module;
-        }
-        if ($submodule) {
-            $path .= '/' . $submodule;
-        }
-        make_upload_directory($path);
-    }
-
-    public function test_constructor_standardtemplate() {
-        global $CFG;
-        // Set up.
-        $theme = $this->make_theme('standardtemplate');
-        $this->make_theme_template_dir('standardtemplate');
-
-        // Exercise SUT.
-        $factory = new testable_template_renderer_factory($theme, $this->page);
-
-        // Verify outcome
-        $this->assertEqual(array($CFG->themedir . '/standardtemplate/templates'),
-                $factory->get_search_paths());
-    }
-
-    public function test_constructor_mytheme() {
-        global $CFG;
-        // Set up.
-        $theme = $this->make_theme('mytheme');
-        $this->make_theme_template_dir('mytheme');
-        $this->make_theme_template_dir('standardtemplate');
-
-        // Exercise SUT.
-        $factory = new testable_template_renderer_factory($theme, $this->page);
-
-        // Verify outcome
-        $this->assertEqual(array(
-                $CFG->themedir . '/mytheme/templates',
-                $CFG->themedir . '/standardtemplate/templates'),
-                $factory->get_search_paths());
-    }
-
-    public function test_constructor_mytheme_no_templates() {
-        global $CFG;
-        // Set up.
-        $theme = $this->make_theme('mytheme');
-        $this->make_theme_template_dir('standardtemplate');
-
-        // Exercise SUT.
-        $factory = new testable_template_renderer_factory($theme, $this->page);
-
-        // Verify outcome
-        $this->assertEqual(array($CFG->themedir . '/standardtemplate/templates'),
-                $factory->get_search_paths());
-    }
-
-    public function test_constructor_mytheme_with_parent() {
-        global $CFG;
-        // Set up.
-        $theme = $this->make_theme('mytheme');
-        $theme->parent = 'parenttheme';
-        $this->make_theme_template_dir('mytheme');
-        $this->make_theme_template_dir('parenttheme');
-        $this->make_theme_template_dir('standardtemplate');
-
-        // Exercise SUT.
-        $factory = new testable_template_renderer_factory($theme, $this->page);
-
-        // Verify outcome
-        $this->assertEqual(array(
-                $CFG->themedir . '/mytheme/templates',
-                $CFG->themedir . '/parenttheme/templates',
-                $CFG->themedir . '/standardtemplate/templates'),
-                $factory->get_search_paths());
-    }
-
-    public function test_constructor_mytheme_with_parent_no_templates() {
-        global $CFG;
-        // Set up.
-        $theme = $this->make_theme('mytheme');
-        $theme->parent = 'parenttheme';
-        $this->make_theme_template_dir('mytheme');
-        $this->make_theme_template_dir('standardtemplate');
-
-        // Exercise SUT.
-        $factory    = new testable_template_renderer_factory($theme, $this->page);
-        $subfactory = new testable_template_renderer_factory($theme, $this->page, 'subtype');
-
-        // Verify outcome
-        $this->assertEqual(array(
-                $CFG->themedir . '/mytheme/templates',
-                $CFG->themedir . '/standardtemplate/templates'),
-                $factory->get_search_paths());
-        $this->assertEqual(array(
-                $CFG->themedir . '/mytheme/templates',
-                $CFG->themedir . '/standardtemplate/templates'),
-                $subfactory->get_search_paths());
-    }
-
-    public function test_get_renderer() {
-        global $CFG;
-        // Set up.
-        $theme = $this->make_theme('mytheme');
-        $theme->parent = 'parenttheme';
-        $this->make_theme_template_dir('mytheme', 'core');
-        $this->make_theme_template_dir('parenttheme', 'mod_test');
-        $this->make_theme_template_dir('standardtemplate', 'mod_test');
-        $this->make_theme_template_dir('parenttheme', 'mod_test', 'subtype');
-        $this->make_theme_template_dir('standardtemplate', 'mod_test', 'subtype');
-        $factory = new testable_template_renderer_factory($theme);
-
-        // Exercise SUT.
-        $renderer    = $factory->get_renderer('mod_test', $this->page);
-        $subrenderer = $factory->get_renderer('mod_test', $this->page, 'subtype');
-
-        // Verify outcome
-        $this->assertEqual('moodle_mod_test_renderer', $renderer->get_copied_class());
-        $this->assertEqual(array(
-                $CFG->themedir . '/parenttheme/templates/mod_test',
-                $CFG->themedir . '/standardtemplate/templates/mod_test'),
-                $renderer->get_search_paths());
-        $this->assertEqual('moodle_mod_test_subtype_renderer', $subrenderer->get_copied_class());
-        $this->assertEqual(array(
-                $CFG->themedir . '/parenttheme/templates/mod_test/subtype',
-                $CFG->themedir . '/standardtemplate/templates/mod_test/subtype'),
-                $subrenderer->get_search_paths());
-    }
-}
-
+}*/
 
 /**
  * Unit tests for the xhtml_container_stack class.
@@ -813,92 +535,20 @@ class xhtml_container_stack_test extends UnitTestCase {
     }
 }
 
-
-/**
- * Unit tests for the template_renderer class.
- *
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class template_renderer_test extends UnitTestCase {
-
-    public static $includecoverage = array('lib/outputrenderers.php', 'lib/outputcomponents.php');
-    protected $renderer;
-    protected $templatefolder;
-    protected $savedtemplates;
-
-    public function setUp() {
-        global $CFG;
-        parent::setUp();
-        $this->templatefolder = $CFG->dataroot . '/temp/template_renderer_fixtures/test';
-        make_upload_directory('temp/template_renderer_fixtures/test');
-        $page = new moodle_page;
-        $this->renderer = new template_renderer('moodle_mod_test_renderer',
-                array($this->templatefolder), $page);
-    }
-
-    public function tearDown() {
-        $this->renderer = null;
-        foreach ($this->savedtemplates as $template) {
-            unlink($template);
-        }
-        $this->savedtemplates = array();
-        parent::tearDown();
-    }
-
-    protected function save_template($name, $contents) {
-        $filename = $this->templatefolder . '/' . $name . '.php';
-        $this->savedtemplates[] = $filename;
-        file_put_contents($filename, $contents);
-    }
-
-    public function test_simple_template() {
-        $this->save_template('greeting', '<p>Hello <?php echo $name ?>!</p>');
-
-        $html = $this->renderer->greeting('Moodle');
-        $this->assertEqual('<p>Hello Moodle!</p>', $html);
-    }
-
-    public function test_simple_template_default_argument_value() {
-        $this->save_template('greeting', '<p>Hello <?php echo $name ?>!</p>');
-
-        $html = $this->renderer->greeting();
-        $this->assertEqual('<p>Hello world!</p>', $html);
-    }
-
-    public function test_box_template() {
-        $this->save_template('box', '<div class="box"<?php echo $id ?>><?php echo $content ?></div>');
-
-        $html = $this->renderer->box('This is a message in a box', 'messagediv');
-        $this->assertEqual('<div class="box"messagediv>This is a message in a box</div>', $html);
-    }
-
-    public function test_box_start_end_templates() {
-        $this->save_template('box', '<div class="box"<?php echo $id ?>><?php echo $content ?></div>');
-
-        $html = $this->renderer->box_start('messagediv');
-        $this->assertEqual('<div class="box"messagediv>', $html);
-
-        $html = $this->renderer->box_end();
-        $this->assertEqual('</div>', $html);
-    }
-}
-
-
 /**
- * Unit tests for the moodle_core_renderer class.
+ * Unit tests for the core_renderer class.
  *
  * @copyright 2009 Tim Hunt
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class moodle_core_renderer_test extends UnitTestCase {
+class core_renderer_test extends UnitTestCase {
 
     public static $includecoverage = array('lib/outputrenderers.php', 'lib/outputcomponents.php');
     protected $renderer;
 
     public function setUp() {
         parent::setUp();
-        $this->renderer = new moodle_core_renderer(new moodle_page);
+        $this->renderer = new core_renderer(new moodle_page);
     }
 
     public function test_select_simple() {
@@ -1139,7 +789,7 @@ class moodle_core_renderer_test extends UnitTestCase {
                  'alt' => ''
                  )), $html);
         $spacer = new html_image();
-        $spacer->src = $this->renderer->old_icon_url('myspacer');
+        $spacer->src = $this->renderer->image_url('myspacer');
         $spacer->alt = 'sometext';
         $spacer->add_class('my');
 
@@ -1147,7 +797,7 @@ class moodle_core_renderer_test extends UnitTestCase {
 
         $this->assert(new ContainsTagWithAttributes('img', array(
                  'class' => 'my image spacer',
-                 'src' => $this->renderer->old_icon_url('myspacer'),
+                 'src' => $this->renderer->image_url('myspacer'),
                  'alt' => 'sometext')), $html);
 
     }
@@ -1249,7 +899,7 @@ class moodle_core_renderer_test extends UnitTestCase {
         $this->assert(new ContainsTagWithAttribute('div', 'class', 'heading-with-help'), $html);
         $this->assert(new ContainsTagWithAttribute('span', 'class', 'helplink'), $html);
         $this->assert(new ContainsTagWithAttribute('h2', 'class', 'main help'), $html);
-        $this->assert(new ContainsTagWithAttributes('img', array('class' => 'iconhelp image', 'src' => $this->renderer->old_icon_url('help'))), $html);
+        $this->assert(new ContainsTagWithAttributes('img', array('class' => 'iconhelp image', 'src' => $this->renderer->image_url('help'))), $html);
         $this->assert(new ContainsTagWithContents('h2', 'Cool help text'), $html);
 
         $helpicon = clone($originalicon);
@@ -1259,7 +909,7 @@ class moodle_core_renderer_test extends UnitTestCase {
         $this->assert(new ContainsTagWithAttribute('div', 'class', 'heading-with-help'), $html);
         $this->assert(new ContainsTagWithAttribute('span', 'class', 'helplink'), $html);
         $this->assert(new ContainsTagWithAttribute('h2', 'class', 'main help'), $html);
-        $this->assert(new ContainsTagWithAttributes('img', array('class' => 'iconhelp image', 'src' => $this->renderer->old_icon_url('help'))), $html);
+        $this->assert(new ContainsTagWithAttributes('img', array('class' => 'iconhelp image', 'src' => $this->renderer->image_url('help'))), $html);
         $this->assert(new ContainsTagWithContents('h2', 'Cool help text'), $html);
     }
 }
diff --git a/lib/simpletest/testpagelib_moodlepage.php b/lib/simpletest/testpagelib_moodlepage.php
index f8be3ed64b..d6f18124cd 100644
--- a/lib/simpletest/testpagelib_moodlepage.php
+++ b/lib/simpletest/testpagelib_moodlepage.php
@@ -177,9 +177,9 @@ class moodle_page_test extends UnitTestCase {
 
     public function test_set_state_normal_path() {
         $this->testpage->set_context(get_context_instance(CONTEXT_SYSTEM));
-    	$this->testpage->set_course($this->create_a_course());
+        $this->testpage->set_course($this->create_a_course());
 
-    	$this->assertEqual(moodle_page::STATE_BEFORE_HEADER, $this->testpage->state);
+        $this->assertEqual(moodle_page::STATE_BEFORE_HEADER, $this->testpage->state);
 
         $this->testpage->set_state(moodle_page::STATE_PRINTING_HEADER);
         $this->assertEqual(moodle_page::STATE_PRINTING_HEADER, $this->testpage->state);
@@ -377,16 +377,16 @@ class moodle_page_test extends UnitTestCase {
         $this->assertEqual('a title', $this->testpage->title);
     }
 
-    public function test_default_generaltype() {
+    public function test_default_pagelayout() {
         // Exercise SUT and Validate
-        $this->assertEqual('normal', $this->testpage->generaltype);
+        $this->assertEqual('normal', $this->testpage->pagelayout);
     }
 
-    public function test_set_generaltype() {
+    public function test_set_pagelayout() {
         // Exercise SUT
-        $this->testpage->set_generaltype('type');
+        $this->testpage->set_pagelayout('type');
         // Validate
-        $this->assertEqual('type', $this->testpage->generaltype);
+        $this->assertEqual('type', $this->testpage->pagelayout);
     }
 }
 
diff --git a/lib/upgradelib.php b/lib/upgradelib.php
index 9b69928121..dc9d70ff52 100644
--- a/lib/upgradelib.php
+++ b/lib/upgradelib.php
@@ -949,7 +949,7 @@ function upgrade_started($preinstall=false) {
     } else {
         if (!CLI_SCRIPT and !$PAGE->headerprinted) {
             $strupgrade  = get_string('upgradingversion', 'admin');
-            $PAGE->set_generaltype('maintenance');
+            $PAGE->set_pagelayout('maintenance');
             upgrade_get_javascript();
             $PAGE->set_title($strupgrade.' - Moodle '.$CFG->target_release);
             $PAGE->set_heading($strupgrade);
diff --git a/lib/weblib.php b/lib/weblib.php
index 70ec92371b..407b4b36fd 100644
--- a/lib/weblib.php
+++ b/lib/weblib.php
@@ -1909,69 +1909,8 @@ function user_login_string($course=NULL, $user=NULL) {
     return $loggedinas;
 }
 
-/**
- * Tests whether $THEME->rarrow, $THEME->larrow have been set (theme/-/config.php).
- * If not it applies sensible defaults.
- *
- * Accessibility: right and left arrow Unicode characters for breadcrumb, calendar,
- * search forum block, etc. Important: these are 'silent' in a screen-reader
- * (unlike &gt; &raquo;), and must be accompanied by text.
- *
- * @global object
- * @uses $_SERVER
- */
-function check_theme_arrows() {
-    global $THEME;
-
-    if (!isset($THEME->rarrow) and !isset($THEME->larrow)) {
-        // Default, looks good in Win XP/IE 6, Win/Firefox 1.5, Win/Netscape 8...
-        // Also OK in Win 9x/2K/IE 5.x
-        $THEME->rarrow = '►'; // &#x25BA;
-        $THEME->larrow = '◄'; // &#x25C4;
-        if (empty($_SERVER['HTTP_USER_AGENT'])) {
-            $uagent = '';
-        } else {
-            $uagent = $_SERVER['HTTP_USER_AGENT'];
-        }
-        if (false !== strpos($uagent, 'Opera')
-            || false !== strpos($uagent, 'Mac')) {
-            // Looks good in Win XP/Mac/Opera 8/9, Mac/Firefox 2, Camino, Safari.
-            // Not broken in Mac/IE 5, Mac/Netscape 7 (?).
-            $THEME->rarrow = '▶'; // &#x25B6;
-            $THEME->larrow = '◀'; // &#x25C0;
-        }
-        elseif (false !== strpos($uagent, 'Konqueror')) {
-            $THEME->rarrow = '→'; // &rarr;
-            $THEME->larrow = '←'; // &larr;
-        }
-        elseif (isset($_SERVER['HTTP_ACCEPT_CHARSET'])
-            && false === stripos($_SERVER['HTTP_ACCEPT_CHARSET'], 'utf-8')) {
-            // (Win/IE 5 doesn't set ACCEPT_CHARSET, but handles Unicode.)
-            // To be safe, non-Unicode browsers!
-            $THEME->rarrow = '&gt;';
-            $THEME->larrow = '&lt;';
-        }
-
-    /// RTL support - in RTL languages, swap r and l arrows
-        if (right_to_left()) {
-            $t = $THEME->rarrow;
-            $THEME->rarrow = $THEME->larrow;
-            $THEME->larrow = $t;
-        }
-    } else {
-        if (strpos($THEME->rarrow, '&')===0 && strrpos($THEME->rarrow, ';')===strlen($THEME->rarrow)-1) {
-            $THEME->rarrow = html_entity_decode($THEME->rarrow, ENT_QUOTES, 'utf-8');
-        }
-        if (strpos($THEME->larrow, '&')===0 && strrpos($THEME->larrow, ';')===strlen($THEME->larrow)-1) {
-            $THEME->larrow = html_entity_decode($THEME->larrow, ENT_QUOTES, 'utf-8');
-        }
-    }
-}
-
-
 /**
  * Return the right arrow with text ('next'), and optionally embedded in a link.
- * See function above, check_theme_arrows.
  *
  * @global object
  * @param string $text HTML/plain text label (set to blank only for breadcrumb separator cases).
@@ -1982,7 +1921,6 @@ function check_theme_arrows() {
  */
 function link_arrow_right($text, $url='', $accesshide=false, $addclass='') {
     global $THEME;
-    check_theme_arrows();
     $arrowclass = 'arrow ';
     if (! $url) {
         $arrowclass .= $addclass;
@@ -2007,7 +1945,6 @@ function link_arrow_right($text, $url='', $accesshide=false, $addclass='') {
 
 /**
  * Return the left arrow with text ('previous'), and optionally embedded in a link.
- * See function above, check_theme_arrows.
  *
  * @global object
  * @param string $text HTML/plain text label (set to blank only for breadcrumb separator cases).
@@ -2018,7 +1955,6 @@ function link_arrow_right($text, $url='', $accesshide=false, $addclass='') {
  */
 function link_arrow_left($text, $url='', $accesshide=false, $addclass='') {
     global $THEME;
-    check_theme_arrows();
     $arrowclass = 'arrow ';
     if (! $url) {
         $arrowclass .= $addclass;
@@ -2802,7 +2738,7 @@ function redirect($url, $message='', $delay=-1) {
     }
 
     // Include a redirect message, even with a HTTP redirect, because that is recommended practice.
-    $PAGE->set_generaltype('embedded');  // No header and footer needed
+    $PAGE->set_pagelayout('embedded');  // No header and footer needed
     $CFG->docroot = false; // to prevent the link to moodle docs from being displayed on redirect page.
     echo $OUTPUT->redirect_message($encodedurl, $message, $delay, $debugdisableredirect);
     exit;
@@ -2908,7 +2844,7 @@ function print_maintenance_message() {
     global $CFG, $SITE, $PAGE, $OUTPUT;
 
     $PAGE->set_pagetype('maintenance-message');
-    $PAGE->set_generaltype('maintenance');
+    $PAGE->set_pagelayout('maintenance');
     $PAGE->set_title(strip_tags($SITE->fullname));
     $PAGE->set_heading($SITE->fullname);
     echo $OUTPUT->header();
diff --git a/lib/yui/readme_moodle.txt b/lib/yui/readme_moodle.txt
index aa22f2a62d..cf15e9248c 100644
--- a/lib/yui/readme_moodle.txt
+++ b/lib/yui/readme_moodle.txt
@@ -4,9 +4,7 @@ from:
 
         http://developer.yahoo.com/yui
 
-Changes:
-* MDL-20007 - commented out some styles from reset-fonts-grids.css,
-              this is just a temporary hack, we need to find better long term solution
+Changes: NONE
 
 Added to Moodle 13 July 2006
 Updated to YUI 0.12.0, 23 November 2006
diff --git a/lib/yui/reset-fonts-grids/reset-fonts-grids.css b/lib/yui/reset-fonts-grids/reset-fonts-grids.css
index cfc577c273..cdacf129e0 100755
--- a/lib/yui/reset-fonts-grids/reset-fonts-grids.css
+++ b/lib/yui/reset-fonts-grids/reset-fonts-grids.css
@@ -4,414 +4,4 @@ Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
 version: 2.7.0
 */
-
-/* moodle hack - we do not want our styles overridden
-html {
- color: #000;
- background: #FFF;
-}
-
-body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td
- {
- margin: 0;
- padding: 0;
-}
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-fieldset,img {
- border: 0;
-}
-
-address,caption,cite,code,dfn,em,strong,th,var,optgroup {
- font-style: inherit;
- font-weight: inherit;
-}
-
-del,ins {
- text-decoration: none;
-}
-
-li {
- list-style: none;
-}
-
-caption,th {
- text-align: left;
-}
-
-h1,h2,h3,h4,h5,h6 {
- font-size: 100%;
- font-weight: normal;
-}
-
-q:before,q:after {
- content: '';
-}
-
-abbr,acronym {
- border: 0;
- font-variant: normal;
-}
-
-sup {
- vertical-align: baseline;
-}
-
-sub {
- vertical-align: baseline;
-}
-
-legend {
- color: #000;
-}
-
-input,button,textarea,select,optgroup,option {
- font-family: inherit;
- font-size: inherit;
- font-style: inherit;
- font-weight: inherit;
-}
-
-input,button,textarea,select { *
- font-size: 100%;
-}
-
-body {
- font: 13px/ 1.231 arial, helvetica, clean, sans-serif; *
- font-size: small; *
- font: x-small;
-}
-
-select,input,button,textarea,button {
- font: 99% arial, helvetica, clean, sans-serif;
-}
-
-table {
- font-size: inherit;
- font: 100%;
-}
-
-pre,code,kbd,samp,tt {
- font-family: monospace; *
- font-size: 108%;
- line-height: 100%;
-}
-
-body {
- text-align: center;
-}
-
-#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7
- {
- margin: auto;
- text-align: left;
- width: 57.69em; *
- width: 56.25em;
-}
-
-#doc2 {
- width: 73.076em; *
- width: 71.25em;
-}
-
-#doc3 {
- margin: auto 10px;
- width: auto;
-}
-
-#doc4 {
- width: 74.923em; *
- width: 73.05em;
-}
-*/
-.yui-b {
- position: relative;
-}
-
-.yui-b {
- _position: static;
-}
-
-#yui-main .yui-b {
- position: static;
-}
-
-#yui-main,.yui-g .yui-u .yui-g {
- width: 100%;
-}
-
-.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main {
- float: right;
- margin-left: -25em;
-}
-
-.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main {
- float: left;
- margin-right: -25em;
-}
-
-.yui-t1 .yui-b {
- float: left;
- width: 12.30769em; *
- width: 12.00em;
-}
-
-.yui-t1 #yui-main .yui-b {
- margin-left: 13.30769em; *
- margin-left: 13.05em;
-}
-
-.yui-t2 .yui-b {
- float: left;
- width: 13.8461em; *
- width: 13.50em;
-}
-
-.yui-t2 #yui-main .yui-b {
- margin-left: 14.8461em; *
- margin-left: 14.55em;
-}
-
-.yui-t3 .yui-b {
- float: left;
- width: 23.0769em; *
- width: 22.50em;
-}
-
-.yui-t3 #yui-main .yui-b {
- margin-left: 24.0769em; *
- margin-left: 23.62em;
-}
-
-.yui-t4 .yui-b {
- float: right;
- width: 13.8456em; *
- width: 13.50em;
-}
-
-.yui-t4 #yui-main .yui-b {
- margin-right: 14.8456em; *
- margin-right: 14.55em;
-}
-
-.yui-t5 .yui-b {
- float: right;
- width: 18.4615em; *
- width: 18.00em;
-}
-
-.yui-t5 #yui-main .yui-b {
- margin-right: 19.4615em; *
- margin-right: 19.125em;
-}
-
-.yui-t6 .yui-b {
- float: right;
- width: 23.0769em; *
- width: 22.50em;
-}
-
-.yui-t6 #yui-main .yui-b {
- margin-right: 24.0769em; *
- margin-right: 23.62em;
-}
-
-.yui-t7 #yui-main .yui-b {
- display: block;
- margin: 0 0 1em 0;
-}
-
-#yui-main .yui-b {
- float: none;
- width: auto;
-}
-
-.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u
- {
- float: left;
-}
-
-.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u
- {
- float: right;
-}
-
-.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first
- {
- float: left;
-}
-
-.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf
- {
- width: 49.1%;
-}
-
-.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u
- {
- width: 32%;
- margin-left: 1.99%;
-}
-
-.yui-gb .yui-u { *
- margin-left: 1.9%; *
- width: 31.9%;
-}
-
-.yui-gc div.first,.yui-gd .yui-u {
- width: 66%;
-}
-
-.yui-gd div.first {
- width: 32%;
-}
-
-.yui-ge div.first,.yui-gf .yui-u {
- width: 74.2%;
-}
-
-.yui-ge .yui-u,.yui-gf div.first {
- width: 24%;
-}
-
-.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first
- {
- margin-left: 0;
-}
-
-.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u
- {
- width: 49%; *
- width: 48.1%; *
- margin-left: 0;
-}
-
-.yui-g .yui-g .yui-u {
- width: 48.1%;
-}
-
-.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first { *
- margin-right: 0; *
- width: 32%;
- _width: 31.7%;
-}
-
-.yui-g .yui-gc div.first,.yui-gd .yui-g {
- width: 66%;
-}
-
-.yui-gb .yui-g div.first { *
- margin-right: 4%;
- _margin-right: 1.3%;
-}
-
-.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first { *
- margin-right: 0;
-}
-
-.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u { *
- margin-left: 1.8%;
- _margin-left: 4%;
-}
-
-.yui-g .yui-gb .yui-u {
- _margin-left: 1.0%;
-}
-
-.yui-gb .yui-gd .yui-u { *
- width: 66%;
- _width: 61.2%;
-}
-
-.yui-gb .yui-gd div.first { *
- width: 31%;
- _width: 29.5%;
-}
-
-.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u {
- width: 32%;
- _float: right;
- margin-right: 0;
- _margin-left: 0;
-}
-
-.yui-gb .yui-gc div.first {
- width: 66%; *
- float: left; *
- margin-left: 0;
-}
-
-.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u {
- margin: 0;
-}
-
-.yui-gb .yui-gb .yui-u {
- _margin-left: .7%;
-}
-
-.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first { *
- margin-left: 0;
-}
-
-.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u { *
- width: 48.1%; *
- margin-left: 0;
-}
-
-.yui-gb .yui-gd div.first {
- width: 32%;
-}
-
-.yui-g .yui-gd div.first {
- _width: 29.9%;
-}
-
-.yui-ge .yui-g {
- width: 24%;
-}
-
-.yui-gf .yui-g {
- width: 74.2%;
-}
-
-.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u {
- float: right;
-}
-
-.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first {
- float: left;
-}
-
-.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first { *
- width: 24%;
- _width: 20%;
-}
-
-.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u { *
- width: 73.5%;
- _width: 65.5%;
-}
-
-.yui-ge div.first .yui-gd .yui-u {
- width: 65%;
-}
-
-.yui-ge div.first .yui-gd div.first {
- width: 32%;
-}
-
-#hd:after,#bd:after,#ft:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after
- {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-#hd,#bd,#ft,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf {
- zoom: 1;
-}
\ No newline at end of file
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}body{text-align:center;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#hd:after,#bd:after,#ft:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#hd,#bd,#ft,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
\ No newline at end of file
diff --git a/login/index.php b/login/index.php
index 52ac5b5a92..ad09fdd5b6 100644
--- a/login/index.php
+++ b/login/index.php
@@ -32,6 +32,7 @@ $testcookies = optional_param('testcookies', 0, PARAM_BOOL); // request cookie t
 
 $context = get_context_instance(CONTEXT_SYSTEM);
 $PAGE->set_course($SITE);
+$PAGE->set_pagelayout('form');
 
 /// Initialize variables
 $errormsg = '';
diff --git a/message/discussion.php b/message/discussion.php
index f391a123e4..49ebfc3b5f 100644
--- a/message/discussion.php
+++ b/message/discussion.php
@@ -52,7 +52,7 @@
     }
 
     if ($user->deleted) {
-        $PAGE->set_generaltype('popup');
+        $PAGE->set_pagelayout('popup');
         $PAGE->set_title(get_string('discussion', 'message').': '.fullname($user));
         echo $OUTPUT->header();
         echo $OUTPUT->heading(get_string('userdeleted'), 1);
@@ -72,7 +72,7 @@
      <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title><?php echo get_string('discussion', 'message').': '.fullname($user) ?></title>
-       <link rel="shortcut icon" href="<?php echo $CFG->wwwroot.'/theme/'.$PAGE->theme->name; ?>/favicon.ico" />
+       <link rel="shortcut icon" href="<?php echo $CFG->wwwroot.'/theme/'.$PAGE->theme->name; ?>/pix/favicon.ico" />
      </head>
      <frameset rows="110,*,0,220">
        <noframes><body><?php
@@ -160,7 +160,7 @@
     $userfullname = fullname($user);
     $mefullname   = fullname($USER);
 
-    $PAGE->set_generaltype('popup');
+    $PAGE->set_pagelayout('popup');
     $PAGE->set_title(get_string('discussion', 'message').': '.fullname($user));
     echo $OUTPUT->header();
 
diff --git a/message/index.php b/message/index.php
index df821717ea..81e1b25647 100644
--- a/message/index.php
+++ b/message/index.php
@@ -68,7 +68,7 @@ $PAGE->set_url($url);
 
 /// Popup a window if required and quit (usually from external links).
 if ($popup) {
-    $PAGE->set_generaltype('popup');
+    $PAGE->set_pagelayout('popup');
     $OUTPUT->header();
     echo $PAGE->requires->js_function_call('openpopup', Array('/message/index.php', 'message', 'menubar=0,location=0,scrollbars,status,resizable,width=400,height=500', 0))->asap();
     redirect("$CFG->wwwroot/", '', 0);
@@ -99,7 +99,7 @@ if ($tab == 'contacts') {
     $PAGE->set_periodic_refresh_delay($CFG->message_contacts_refresh);
 }
 
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 $PAGE->set_title(get_string('messages', 'message').' - '.format_string($SITE->fullname));
 echo $OUTPUT->header();
 echo '<table cellspacing="2" cellpadding="2" border="0" width="95%" class="boxaligncenter">';
diff --git a/message/messages.php b/message/messages.php
index 3731365ecf..55f8e9fb84 100644
--- a/message/messages.php
+++ b/message/messages.php
@@ -25,7 +25,7 @@ require('../config.php');
 
 @header('Content-Type: text/html; charset=utf-8');
 
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 $PAGE->set_url(new moodle_url($CFG->wwwroot.'/message/messages.php'));
 $PAGE->set_title(get_string('messages', 'message').' - '.format_string($SITE->fullname));
 echo $OUTPUT->header();
diff --git a/message/refresh.php b/message/refresh.php
index 992f457a26..72fe08a568 100644
--- a/message/refresh.php
+++ b/message/refresh.php
@@ -36,7 +36,7 @@ if (empty($CFG->messaging)) {
     print_error('disabled', 'message');
 }
 
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 $PAGE->set_title(get_string('messages', 'message').' - '.format_string($SITE->fullname));
 $PAGE->set_url(new moodle_url($CFG->wwwroot.'/message/refresh.php'));
 header('Expires: Sun, 28 Dec 1997 09:32:45 GMT');
diff --git a/message/send.php b/message/send.php
index 6e8541c107..36228eff84 100644
--- a/message/send.php
+++ b/message/send.php
@@ -37,7 +37,7 @@ if (empty($CFG->messaging)) {
 
 if (has_capability('moodle/site:sendmessage', get_context_instance(CONTEXT_SYSTEM))) {
 
-    $PAGE->set_generaltype('popup');
+    $PAGE->set_pagelayout('popup');
     $PAGE->set_title('send');
     $PAGE->requires->js('message/message.js');
 
diff --git a/message/user.php b/message/user.php
index c6855ae1e2..8fc8048bac 100644
--- a/message/user.php
+++ b/message/user.php
@@ -86,7 +86,7 @@ if ($unblockcontact and confirm_sesskey()) {
 }
 
 //$PAGE->set_title('Message History');
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 echo $OUTPUT->header();
 echo '<table width="100%" cellpadding="0" cellspacing="0"><tr>';
 echo '<td width="100">';
diff --git a/mod/assignment/pix/icon.gif b/mod/assignment/pix/icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..082811741e4590be0dffe1143d402568be6eec5f
GIT binary patch
literal 132
zcmZ?wbhEHb6krfw_{7HW|Nnmm28Nkw#!V5rXJ)3Qq@)13K%n@Og_VJUjX?**0jXtR
z_RQEN_D6^1!GlQ*B3T>nMVF>Zd3K$e!s`;&a{dV4)1Mny-sa6|x~w4leEFl=uoe~X
gr&bRqom|B0C2OF{rB#yfHg#dsho_9&Y=juB0ozM2T>t<8

literal 0
HcmV?d00001

diff --git a/mod/assignment/type/online/file.php b/mod/assignment/type/online/file.php
index 19b0cd617d..5c50154292 100644
--- a/mod/assignment/type/online/file.php
+++ b/mod/assignment/type/online/file.php
@@ -39,7 +39,7 @@ if ($assignment->assignmenttype != 'online') {
 $assignmentinstance = new assignment_online($cm->id, $assignment, $cm, $course);
 
 if ($submission = $assignmentinstance->get_submission($user->id)) {
-    $PAGE->set_generaltype('popup');
+    $PAGE->set_pagelayout('popup');
     $PAGE->set_title(fullname($user,true).': '.$assignment->name);
     echo $OUTPUT->header();
     echo $OUTPUT->box_start('generalbox boxaligcenter', 'dates');
diff --git a/mod/chat/chat.css b/mod/chat/chat.css
deleted file mode 100644
index 1ac39cbe7a..0000000000
--- a/mod/chat/chat.css
+++ /dev/null
@@ -1,44 +0,0 @@
-#messages-list, #users-list{list-style-type:none;padding:0;margin:0}
-#chat-header {
-    background: transparent;
-    font-size: 200%;
-    overflow: hidden;
-}
-#chat-header p {
-    display:inline;
-    font-size: 50%;
-    color: grey;
-}
-.time{
-    font-weight: bold;
-}
-.user{
-    color:blue;
-}
-.chat-event{
-    text-align:center;
-    color:grey;
-}
-.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd {
-    background: transparent;
-}
-.yui-layout-unit-top {
-    background: #FFE39D;
-}
-.yui-layout-unit-right {
-    border-top: 5px solid white;
-    background: #FFD46B;
-}
-.yui-layout-unit-bottom {
-    border-top: 5px solid white;
-    background: #FFCB44;
-}
-.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-unit-right {
-    background: white;
-}
-.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd {
-    border:0;
-}
-.yui-skin-sam .yui-layout .yui-layout-hd {
-    border:0;
-}
diff --git a/mod/chat/gui_ajax/index.php b/mod/chat/gui_ajax/index.php
index 4a75cec527..eeca5f131a 100644
--- a/mod/chat/gui_ajax/index.php
+++ b/mod/chat/gui_ajax/index.php
@@ -56,7 +56,7 @@ $str_title = format_string($course->shortname) . ": ".format_string($chat->name,
 $str_send  = get_string('send', 'chat');
 $str_themes = get_string('themes');
 
-$PAGE->set_generaltype('popup');
+$PAGE->set_pagelayout('popup');
 $PAGE->set_title('Chat');
 $PAGE->requires->yui_lib('dragdrop');
 $PAGE->requires->yui_lib('resize');
@@ -93,9 +93,8 @@ $PAGE->requires->string_for_js('talk', 'chat');
 $PAGE->requires->js('mod/chat/gui_ajax/script.js');
 $PAGE->requires->yui_lib('animation')->in_head();
 
-$PAGE->requires->css('mod/chat/gui_ajax/theme/'.$theme.'/chat.css');
 $PAGE->add_body_class('yui-skin-sam');
-$PAGE->set_generaltype('embedded');
+$PAGE->set_pagelayout('embedded');
 
 echo $OUTPUT->header();
 $intro = format_text($chat->intro, $chat->introformat);
diff --git a/mod/chat/gui_basic/index.php b/mod/chat/gui_basic/index.php
index 38f8f6cb15..13dc2b3c96 100644
--- a/mod/chat/gui_basic/index.php
+++ b/mod/chat/gui_basic/index.php
@@ -43,8 +43,7 @@ if (!$cm = get_coursemodule_from_instance('chat', $chat->id, $course->id)) {
 $context = get_context_instance(CONTEXT_MODULE, $cm->id);
 require_login($course->id, false, $cm);
 require_capability('mod/chat:chat',$context);
-$PAGE->set_generaltype('form');
-$PAGE->requires->css('mod/chat/chat.css');
+$PAGE->set_pagelayout('form');
 
 /// Check to see if groups are being used here
  if ($groupmode = groups_get_activity_groupmode($cm)) {   // Groups are being used
diff --git a/mod/chat/gui_header_js/chatinput.php b/mod/chat/gui_header_js/chatinput.php
index d7d85d85c8..8bd8c71c41 100644
--- a/mod/chat/gui_header_js/chatinput.php
+++ b/mod/chat/gui_header_js/chatinput.php
@@ -33,7 +33,7 @@ $USER = $DB->get_record('user', array('id'=>$chatuser->userid));
 //Setup course, lang and theme
 $PAGE->set_course($course);
 $PAGE->requires->js('mod/chat/gui_header_js/chat_gui_header.js')->in_head();
-$PAGE->set_generaltype('embedded');
+$PAGE->set_pagelayout('embedded');
 $PAGE->set_focuscontrol('input_chat_message');
 $PAGE->set_cacheable(false);
 echo $OUTPUT->header();
diff --git a/mod/chat/gui_header_js/jsupdate.php b/mod/chat/gui_header_js/jsupdate.php
index a7df3425ca..9be9f65b80 100644
--- a/mod/chat/gui_header_js/jsupdate.php
+++ b/mod/chat/gui_header_js/jsupdate.php
@@ -84,9 +84,10 @@ header("Refresh: $CFG->chat_refresh_room; url=$refreshurl");
 
 /// required stylesheets
 $stylesheetshtml = '';
-foreach ($CFG->stylesheets as $stylesheet) {
+/*foreach ($CFG->stylesheets as $stylesheet) {
+    //TODO: MDL-21120
     $stylesheetshtml .= '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'" />';
-}
+}*/
 
 // use ob to be able to send Content-Length headers
 // needed for Keep-Alive to work
diff --git a/mod/chat/gui_header_js/jsupdated.php b/mod/chat/gui_header_js/jsupdated.php
index c83827f27b..97ecc0eb53 100644
--- a/mod/chat/gui_header_js/jsupdated.php
+++ b/mod/chat/gui_header_js/jsupdated.php
@@ -79,9 +79,10 @@ header('Content-Type: text/html; charset=utf-8');
 
 /// required stylesheets
 $stylesheetshtml = '';
-foreach ($CFG->stylesheets as $stylesheet) {
+/*foreach ($CFG->stylesheets as $stylesheet) {
+    //TODO: MDL-21120
     $stylesheetshtml .= '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'" />';
-}
+}*/
 
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
diff --git a/mod/chat/gui_header_js/users.php b/mod/chat/gui_header_js/users.php
index cf8555c57b..fcb32502f8 100644
--- a/mod/chat/gui_header_js/users.php
+++ b/mod/chat/gui_header_js/users.php
@@ -24,7 +24,7 @@ if (!$USER = $DB->get_record('user', array('id'=>$chatuser->userid))) { // no op
     print_error('invaliduser');
 }
 
-$PAGE->set_generaltype('embedded');
+$PAGE->set_pagelayout('embedded');
 
 $USER->description = '';
 
diff --git a/mod/chat/pix/icon.gif b/mod/chat/pix/icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..cbaaca881a1a17958a2922f61251f6385965e283
GIT binary patch
literal 99
zcmZ?wbhEHb6krfw_{hxg|Ns9JCr&Vcf#OdVRt5%U1|1L&B+tNPGN*OrF(&@S85<8-
y%5d!Y+@3kD#AY7*H07BypR>1UuP#--cJ9Z-22SRXw@p(d3|B}Bi63WTum%9%DIn4S

literal 0
HcmV?d00001

diff --git a/mod/choice/icon.gif b/mod/choice/pix/icon.gif
similarity index 100%
rename from mod/choice/icon.gif
rename to mod/choice/pix/icon.gif
diff --git a/mod/choice/styles.php b/mod/choice/styles.php
deleted file mode 100644
index 57946ce6eb..0000000000
--- a/mod/choice/styles.php
+++ /dev/null
@@ -1,9 +0,0 @@
-.mod-choice .results {
-  border-collapse: separate;
-}
-
-.mod-choice .results .data {
-  border-width:1px;
-  border-style:solid;
-  border-color:#999;
-}
diff --git a/mod/data/lib.php b/mod/data/lib.php
index ebfba40b4b..5b229eef4a 100755
--- a/mod/data/lib.php
+++ b/mod/data/lib.php
@@ -430,7 +430,7 @@ class data_field_base {     // Base class for Database Field Types (see field/*/
         global $OUTPUT;
 
         $str = '<a href="field.php?d='.$this->data->id.'&amp;fid='.$this->field->id.'&amp;mode=display&amp;sesskey='.sesskey().'">';
-        $str .= '<img src="'.$OUTPUT->mod_icon_url('/field/' . $this->type . '/icon', 'data') . '" ';
+        $str .= '<img src="'.$OUTPUT->old_icon_url('/field/' . $this->type . '/icon', 'data') . '" ';
         $str .= 'height="'.$this->iconheight.'" width="'.$this->iconwidth.'" alt="'.$this->type.'" title="'.$this->type.'" /></a>';
         return $str;
     }
diff --git a/mod/data/pix/icon.gif b/mod/data/pix/icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..2aaeeb399c182c1d89a90c4476309b6185d3b3c1
GIT binary patch
literal 256
zcmZ?wbhEHb6krfw_#(;h`Sa&Tj~?B-ckkM@Yv<0LJ9_l!!Gi~P?%cU{?b<nW=FFHe
zW5R?9Jv}`wEiL8c<;BIt>FMdo$;pa}in6k@l9H05qM`x<0z5oC3=9na|NjS)Xh88N
z3#$l&B!dn}9Aqa0Yi)vBS41XPa+Fq1w_s-5R+Ha-H$pF8o*OIBz0_<bg9?|(hl?9R
zv_wuR6y)%vh(A+mv=CWlyILpXW*N6DgIiCd!Q24N(pufjo%b?3c{OM5Rn4mLQBw_W
s3TKiiPp=a6RAQ;CU{w|5F;HgVYLyV=<C>|-#Ky(DoQq9ENs+-C0G*;%u>b%7

literal 0
HcmV?d00001

diff --git a/mod/feedback/lib.php b/mod/feedback/lib.php
index fe1a44b229..f0bd6cf4b6 100644
--- a/mod/feedback/lib.php
+++ b/mod/feedback/lib.php
@@ -329,13 +329,13 @@ function feedback_print_recent_mod_activity($activity, $courseid, $detail, $modn
     if ($detail) {
         $modname = $modnames[$activity->type];
         echo '<div class="title">';
-        echo "<img src=\"" . $OUTPUT->mod_icon_url('icon', $activity->type) . "\" ".
+        echo "<img src=\"" . $OUTPUT->old_icon_url('icon', $activity->type) . "\" ".
              "class=\"icon\" alt=\"$modname\" />";
         echo "<a href=\"$CFG->wwwroot/mod/feedback/view.php?id={$activity->cmid}\">{$activity->name}</a>";
         echo '</div>';
     }
 
-	echo '<div class="title">';
+    echo '<div class="title">';
     echo '</div>';
 
     echo '<div class="user">';
@@ -970,7 +970,7 @@ function feedback_create_item($data) {
 
     $item->template=0;
     if (isset($data->templateid)) {
-	    	$item->template = intval($data->templateid);
+            $item->template = intval($data->templateid);
     }
 
     $itemname = trim($data->itemname);
@@ -1024,7 +1024,7 @@ function feedback_update_item($item, $data = null){
 
         $item->required=0;
         if (isset($data->required)) {
-	    	$item->required=$data->required;
+            $item->required=$data->required;
         }
     }else {
         $item->name = $item->name;
@@ -2299,7 +2299,7 @@ function feedback_print_errors() {
     feedback_init_feedback_session();
 
     if(empty($SESSION->feedback->errors)) {
-		return;
+        return;
     }
 
     echo $OUTPUT->box_start('generalbox errorboxcontent boxaligncenter boxwidthnormal');
diff --git a/mod/feedback/pix/icon.gif b/mod/feedback/pix/icon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8f43cc4fff3260f3f100e26ed1221b6fd029632a
GIT binary patch
literal 107
zcmZ?wbhEHb6krfw_{7d&d?wBKjIr^|G~=1Z4F4Gz&ZIE_84L`HKUr8s7}yzffNY>j
z0R{$UgNmvvCaIoJ=WtBk7RY-ddWmC@MXu_{xmnK^<#`=j>@nNq^NsS^*=_R$Tm*Qe
KXZSENSOWld@FEca

literal 0
HcmV?d00001

diff --git a/mod/folder/locallib.php b/mod/folder/locallib.php
index 2d402592bf..711b6c6204 100644
--- a/mod/folder/locallib.php
+++ b/mod/folder/locallib.php
@@ -73,17 +73,19 @@ function folder_htmllize_tree($dir, $folder, $context) {
  * @return string html link
  */
 function folder_get_file_link($file, $folder, $context) {
-    global $CFG;
+    global $CFG, $OUTPUT;
 
     $strfile     = get_string('file');
     $strdownload = get_string('download');
-    $icon        = mimeinfo_from_type("icon", $file->get_mimetype());
     $urlbase     = "$CFG->wwwroot/pluginfile.php";
     $path        = '/'.$context->id.'/folder_content/'.$folder->revision.$file->get_filepath().$file->get_filename();
     $viewurl     = file_encode_url($urlbase, $path, false);
     $downloadurl = file_encode_url($urlbase, $path, true);
-    $downloadurl = "&nbsp;<a href=\"$downloadurl\" title=\"" . get_string('downloadfile') . "\"><img src=\"$CFG->pixpath/t/down.gif\" class=\"iconsmall\" alt=\"$strdownload\" /></a>";
-    return "<a href=\"$viewurl\" title=\"\"><img src=\"$CFG->pixpath/f/$icon\" class=\"icon\" alt=\"$strfile\" />&nbsp;".s($file->get_filename()).'</a>'.$downloadurl;
+    $downicon    = $OUTPUT->old_icon_url('t/down');
+    $mimeicon    = $OUTPUT->old_icon_url(file_mimetype_icon($file->get_mimetype()));
+
+    $downloadurl = "&nbsp;<a href=\"$downloadurl\" title=\"" . get_string('downloadfile') . "\"><img src=\"$downicon\" class=\"iconsmall\" alt=\"$strdownload\" /></a>";
+    return "<a href=\"$viewurl\" title=\"\"><img src=\"$mimeicon\" class=\"icon\" alt=\"$strfile\" />&nbsp;".s($file->get_filename()).'</a>'.$downloadurl;
 }
 
 /**
diff --git a/mod/folder/icon.gif b/mod/folder/pix/icon.gif
similarity index 100%
rename from mod/folder/icon.gif
rename to mod/folder/pix/icon.gif
diff --git a/mod/forum/forum.css b/mod/forum/forum.css
deleted file mode 100644
index 4e2dde0fc2..0000000000
--- a/mod/forum/forum.css
+++ /dev/null
@@ -1,26 +0,0 @@
-#mod-forum-subscribers .subscriberdiv,
-#mod-forum-subscribers .subscribertable {
-    width:100%;
-    background-color:#EEEEEE;
-    border:1px solid #BBBBBB;
-}
-#mod-forum-subscribers .subscriberdiv,
-#mod-forum-subscribers .subscribertable tr td {
-    vertical-align:top;
-    padding:0.2em 0.3em;
-}
-#mod-forum-subscribers .subscribertable tr td.existing {
-    width:42%;
-}
-#mod-forum-subscribers .subscribertable tr td.actions {
-    width:16%;
-    padding-top:3em;
-}
-#mod-forum-subscribers .subscribertable tr td.actions .actionbutton {
-    margin:0.3em 0;
-    padding:0.5em 0;
-    width:100%;
-}
-#mod-forum-subscribers .subscribertable tr td.potential {
-    width:42%;
-}
\ No newline at end of file
diff --git a/mod/forum/lib.php b/mod/forum/lib.php
index f464925279..6d7d805f6e 100644
--- a/mod/forum/lib.php
+++ b/mod/forum/lib.php
@@ -783,9 +783,10 @@ function forum_cron() {
                 $headerdata->userprefs = '<a target="_blank" href="'.$headerdata->userprefs.'">'.get_string('digestmailprefs', 'forum').'</a>';
 
                 $posthtml = "<head>";
-                foreach ($CFG->stylesheets as $stylesheet) {
+/*                foreach ($CFG->stylesheets as $stylesheet) {
+                    //TODO: MDL-21120
                     $posthtml .= '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'" />'."\n";
-                }
+                }*/
                 $posthtml .= "</head>\n<body id=\"email\">\n";
                 $posthtml .= '<p>'.get_string('digestmailheader', 'forum', $headerdata).'</p><br /><hr size="1" noshade="noshade" />';
 
@@ -1055,9 +1056,10 @@ function forum_make_mail_html($course, $cm, $forum, $discussion, $post, $userfro
     $canunsubscribe = ! forum_is_forcesubscribed($forum);
 
     $posthtml = '<head>';
-    foreach ($CFG->stylesheets as $stylesheet) {
+/*    foreach ($CFG->stylesheets as $stylesheet) {
+        //TODO: MDL-21120
         $posthtml .= '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'" />'."\n";
-    }
+    }*/
     $posthtml .= '</head>';
     $posthtml .= "\n<body id=\"email\">\n\n";
 
@@ -6197,7 +6199,7 @@ function forum_print_recent_mod_activity($activity, $courseid, $detail, $modname
     echo '<div class="title">';
     if ($detail) {
         $aname = s($activity->name);
-        echo "<img src=\"" . $OUTPUT->mod_icon_url('icon', $activity->type) . "\" ".
+        echo "<img src=\"" . $OUTPUT->old_icon_url('icon', $activity->type) . "\" ".
              "class=\"icon\" alt=\"{$aname}\" />";
     }
     echo "<a href=\"$CFG->wwwroot/mod/forum/discuss.php?d={$activity->content->discussion}"
diff --git a/mod/forum/pix/icon.gif b/mod/forum/pix/icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..c727fd181d5a714a964dc73cda7462206c083866
GIT binary patch
literal 132
zcmZ?wbhEHb6krfw_{7SPX3Q`%&G^jBwEt&jG9UrPpDe5l46F<~ATf|y24>HQO)?@q
zD>Y=6Y}VWTRL%Ko$3g>3#df{OlblOEJHw}#DvPoDeY~<s_8>ctklm4^h8hYM?dMg6
ZXMX0GY&K7ffi<IY--`_beQFF0)&LHlCo%v4

literal 0
HcmV?d00001

diff --git a/mod/forum/subscribers.php b/mod/forum/subscribers.php
index 597a8546c6..b55dd21dd2 100644
--- a/mod/forum/subscribers.php
+++ b/mod/forum/subscribers.php
@@ -94,7 +94,6 @@ if (data_submitted()) {
 $strsubscribers = get_string("subscribers", "forum");
 $PAGE->navbar->add($strsubscribers);
 $PAGE->set_title($strsubscribers);
-$PAGE->requires->css('mod/forum/forum.css');
 if (has_capability('mod/forum:managesubscriptions', $context)) {
     $PAGE->set_button(forum_update_subscriptions_button($course->id, $id));
     if ($edit != -1) {
diff --git a/mod/glossary/lib.php b/mod/glossary/lib.php
index 7c182b2934..d58adfde9b 100644
--- a/mod/glossary/lib.php
+++ b/mod/glossary/lib.php
@@ -953,12 +953,12 @@ function glossary_print_entry_icons($course, $cm, $glossary, $entry, $mode='',$h
             $mainglossary = $DB->get_record('glossary', array('mainglossary'=>1,'course'=>$course->id));
             if ( $mainglossary ) {  // if there is a main glossary defined, allow to export the current entry
                 $output = true;
-                $return .= ' <a title="'.get_string('exporttomainglossary','glossary') . '" href="exportentry.php?id='.$entry->id.'&amp;prevmode='.$mode.'&amp;hook='.urlencode($hook).'"><img src="export.gif" class="iconsmall" alt="'.get_string('exporttomainglossary','glossary').$altsuffix.'" /></a>';
+                $return .= ' <a title="'.get_string('exporttomainglossary','glossary') . '" href="exportentry.php?id='.$entry->id.'&amp;prevmode='.$mode.'&amp;hook='.urlencode($hook).'"><img src="'.$OUTPUT->old_icon_url('export', 'glossary').'" class="iconsmall" alt="'.get_string('exporttomainglossary','glossary').$altsuffix.'" /></a>';
             }
         }
 
         if ( $entry->sourceglossaryid ) {
-            $icon = "minus.gif";   // graphical metaphor (minus) for deleting an imported entry
+            $icon = $OUTPUT->old_icon_url('minus', 'glossary');   // graphical metaphor (minus) for deleting an imported entry
         } else {
             $icon = $OUTPUT->old_icon_url('t/delete');
         }
@@ -1643,7 +1643,7 @@ function glossary_print_sorting_links($cm, $mode, $sortkey = '',$sortorder = '')
              $neworder = '&amp;sortorder=asc';
              $newordertitle = get_string('changeto', 'glossary', $asc);
          }
-         $icon = " <img src=\"$sortorder.gif\" class=\"icon\" alt=\"$newordertitle\" />";
+         $icon = " <img src=\"".$OUTPUT->old_icon_url($sortorder, 'glossary')."\" class=\"icon\" alt=\"$newordertitle\" />";
      } else {
          if ( $sortkey != 'CREATION' and $sortkey != 'UPDATE' and
                $sortkey != 'FIRSTNAME' and $sortkey != 'LASTNAME' ) {
@@ -1652,7 +1652,7 @@ function glossary_print_sorting_links($cm, $mode, $sortkey = '',$sortorder = '')
          } else {
              $newordertitle = $desc;
              $neworder = '&amp;sortorder=desc';
-             $icon = ' <img src="asc.gif" class="icon" alt="'.$newordertitle.'" />';
+             $icon = ' <img src="'.$OUTPUT->old_icon_url('asc', 'glossary').'" class="icon" alt="'.$newordertitle.'" />';
          }
      }
      $ficon     = '';
diff --git a/mod/glossary/pix/asc.gif b/mod/glossary/pix/asc.gif
new file mode 100644
index 0000000000000000000000000000000000000000..0cf757c000dff248cbe1f44733cf83fd49539e00
GIT binary patch
literal 63
zcmZ?wbhEHb6krfw_`t}pX2nbf1_s5SEUXL+j0`$JHc(uEfq_Y^r+?+?xBSu_j1d`|
RPtW=2-}=a7nj<5FH2~3T5jp?>

literal 0
HcmV?d00001

diff --git a/mod/glossary/pix/comment.gif b/mod/glossary/pix/comment.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b7c6f88efa4520146d814134c7f557d43579b60f
GIT binary patch
literal 78
zcmZ?wbhEHb<YwSz_{huv1ZU2i`TzevkfHdKg_VJUnL!663X*4FlAqJhc6v3FG7ED@
c!{!BHZhWaXzEz~$R1ll0k@I?sGb4jF05vxj+5i9m

literal 0
HcmV?d00001

diff --git a/mod/glossary/pix/desc.gif b/mod/glossary/pix/desc.gif
new file mode 100644
index 0000000000000000000000000000000000000000..74b25c8c39598ddec3956e6339b86a89181fed96
GIT binary patch
literal 61
zcmZ?wbhEHb6krfw_`t}pX2nbf1_s5SEUXL+j0`$JHc(uEfq_Y+r+?+?xBS90rfkZR
PZku_WzwOZv5e91ju)7e_

literal 0
HcmV?d00001

diff --git a/mod/glossary/pix/export.gif b/mod/glossary/pix/export.gif
new file mode 100644
index 0000000000000000000000000000000000000000..6368927c7acff0f4de441933c21211465993f07b
GIT binary patch
literal 90
zcmZ?wbhEHb<YwSz_{7eTmX<a%E$u%8!+!?j?Ck85Cr@6xc8!67LGdRGD+2>NgAR}l
uRLRZ2z${-;b?NsR$E!z{oO@ul>i+|A29*ycE(^t$C&Zn#KI+fJU=095;~%;J

literal 0
HcmV?d00001

diff --git a/mod/glossary/pix/icon.gif b/mod/glossary/pix/icon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..388a3e5d0f60444e750357834c0dbac7c70c7de1
GIT binary patch
literal 172
zcmZ?wbhEHb6krfw_{_@y1Pu%f|AAx!!+#(J;Wab}^}PV{8yXr8960bFECEu=z@Ye(
zg_VJUmq7=_0hz(T61m}|=jy#-nWp9r4x0^^BxyWhVo~f8V`ZMuqqT*{OU!u9szox)
zYTZ}U8k)P0NsEOrAMo^GmI!5eImyCXm2uXcq&qUJg)ADRK18o~efH6cujKZ73E{N-
IP6h^R0N0*4n*aa+

literal 0
HcmV?d00001

diff --git a/mod/glossary/pix/minus.gif b/mod/glossary/pix/minus.gif
new file mode 100644
index 0000000000000000000000000000000000000000..bf50db9f4df4b18e9f6c197f49fac0d5c22a2ef9
GIT binary patch
literal 67
zcmZ?wbhEHb<YwSz_{hSLmX`LPf#E-c@yU}X6@Rj@GBB_(=r8~QNS=XN#ADZ;e*$fi
UEPExI&stYFTezg`RAI0N0Awc;lmGw#

literal 0
HcmV?d00001

diff --git a/mod/glossary/pix/print.gif b/mod/glossary/pix/print.gif
new file mode 100644
index 0000000000000000000000000000000000000000..97428fd6595cf832c03924191ee735576b4e335e
GIT binary patch
literal 125
zcmZ?wbhEHb6ky<I_{7ct1P6fN&Vm2GKQuHn{QuAJABY(k6o0a?GBB_+=zvs!)G{zT
zRjj)3F1s;tm8^o%XNK#?Q+j7UE0sACkj%=`FrieI$J}Yb``@oGA82@Ubhlvb!lVTU
Yt~fTxHuX#lKD10IgZT)nDg%Qx0PwCdk^lez

literal 0
HcmV?d00001

diff --git a/mod/glossary/view.php b/mod/glossary/view.php
index 581c121d09..4f16a8cb1a 100644
--- a/mod/glossary/view.php
+++ b/mod/glossary/view.php
@@ -314,7 +314,7 @@ if ($showcommonelements) {
         if (has_capability('mod/glossary:manageentries', $context) or $glossary->allowprintview) {
 //                print_box_start('printicon');
             echo '<span class="wrap printicon">';
-            echo " <a title =\"". get_string("printerfriendly","glossary") ."\" href=\"print.php?id=$cm->id&amp;mode=$mode&amp;hook=".urlencode($hook)."&amp;sortkey=$sortkey&amp;sortorder=$sortorder&amp;offset=$offset\"><img class=\"icon\" src=\"print.gif\" alt=\"". get_string("printerfriendly","glossary") . "\" /></a>";
+            echo " <a title =\"". get_string("printerfriendly","glossary") ."\" href=\"print.php?id=$cm->id&amp;mode=$mode&amp;hook=".urlencode($hook)."&amp;sortkey=$sortkey&amp;sortorder=$sortorder&amp;offset=$offset\"><img class=\"icon\" src=\"".$OUTPUT->old_icon_url('print', 'glossary')."\" alt=\"". get_string("printerfriendly","glossary") . "\" /></a>";
             echo '</span>';
 //                print_box_end();
         }
diff --git a/mod/hotpot/lib.php b/mod/hotpot/lib.php
index 0561d802d8..2bb4635339 100644
--- a/mod/hotpot/lib.php
+++ b/mod/hotpot/lib.php
@@ -1267,7 +1267,7 @@ function hotpot_print_recent_mod_activity($activity, $course, $detail=false) {
 
     if ($detail) {
         // activity icon
-        $src = "" . $OUTPUT->mod_icon_url('icon', $activity->type) . "";
+        $src = "" . $OUTPUT->old_icon_url('icon', $activity->type) . "";
         print '<img src="'.$src.'" class="icon" alt="'.$activity->type.'" /> ';
 
         // link to activity
diff --git a/mod/hotpot/pix/icon.gif b/mod/hotpot/pix/icon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..463c06585ca8f5a6c9c2a9b9f7ee9075282a051d
GIT binary patch
literal 415
zcmZ?wbh9u|6krfw_{zZW|IEyPhx$J5@BO~M=HZssa~qqluB<t|wCdsX%;#NE_q%;|
zPt84D7jm}2V`XQ`(JI%yrA{kLgJxDmS65fB%dwl8X55tFGbP$AEiJ7(%+NS(rbgDH
zsHmu{5Zf9bEyd(nF5%fyNwZ~RCM3D(dwP0m29-;PG$-4u%KH?@Su3eJ#kgB)2N}pK
zS_OFNN}1~@YHDg4$_Z#m2}(*z%JOqC5CS?N1t7mLupK$jzd^-ts@l>C1wT1+y#yPY
z84on5sij?>!WgoPkCWjDPp1{9!y+bz3I-X!%*-YYDXxyAhx{Z}q`ibB1;j=9Mfk-T
zv>AoHR9Qtu1VpBZh{~!nXe!C8v9ZgEONuXBCMhSWA+N>2Z78>C<;qRUy8diz+<H3d
z%5v(P)b)ht$>cK28R;2n>YbJ3llBkH<&ZQoGBH-?U{_O;)?&-e73Aq;W?)m3exxe)
h?DI1%zj^X1OkZ-@4CEiRWMnip$Tf<aHZd?*0{~UjcXj{(

literal 0
HcmV?d00001

diff --git a/mod/imscp/icon.gif b/mod/imscp/pix/icon.gif
similarity index 100%
rename from mod/imscp/icon.gif
rename to mod/imscp/pix/icon.gif
diff --git a/mod/imscp/view.php b/mod/imscp/view.php
index 6a0d55528c..e8ad427e2b 100644
--- a/mod/imscp/view.php
+++ b/mod/imscp/view.php
@@ -55,15 +55,14 @@ $PAGE->requires->yui_lib('container')->in_head();
 $PAGE->requires->yui_lib('dragdrop')->in_head();
 $PAGE->requires->yui_lib('resize')->in_head();
 $PAGE->requires->js('mod/imscp/functions.js')->in_head();
-$PAGE->requires->css('mod/imscp/style.css');
 
 $PAGE->requires->string_for_js('navigation', 'imscp');
 $PAGE->requires->string_for_js('toc', 'imscp');
 $PAGE->requires->string_for_js('hide', 'moodle');
 $PAGE->requires->string_for_js('show', 'moodle');
 
-// TODO: ugly hack for a page layout without footer and blocks
-$PAGE->set_generaltype('topframe');
+//TODO: find some better way to disable blocks and minimise footer - pagetype just for this does not seem like a good solution
+//$PAGE->set_pagelayout('maxcontent');
 
 $PAGE->set_title($course->shortname.': '.$imscp->name);
 $PAGE->set_heading($course->fullname);
diff --git a/mod/label/icon.gif b/mod/label/pix/icon.gif
similarity index 100%
rename from mod/label/icon.gif
rename to mod/label/pix/icon.gif
diff --git a/mod/lesson/pix/icon.gif b/mod/lesson/pix/icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..1258793860fb6d737815bff3442c603c0f477028
GIT binary patch
literal 106
zcmZ?wbhEHb6krfw_{hTW|NsA2uU?%wbB2L|LGdRGD+2=ygAR}lloeoLV7B(yZ1Y8c
z&tYYEVOYV(%b}Z7q^D1eUY@e(@~Q%b(*<Uiy;k38)c#{Hex6-~Bj06#x4DLtt<Z9=
K&rL!?4Aub9{3ZGT

literal 0
HcmV?d00001

diff --git a/mod/lesson/renderer.php b/mod/lesson/renderer.php
index 55caa980ec..1fc3489765 100644
--- a/mod/lesson/renderer.php
+++ b/mod/lesson/renderer.php
@@ -92,7 +92,6 @@ class moodle_mod_lesson_renderer extends moodle_renderer_base {
         }
 
     /// Header setup
-        $this->page->requires->css('mod/lesson/lesson.css');
         $this->page->set_title($title);
         $this->page->set_heading($this->page->course->fullname);
         $this->page->set_button($buttons);
diff --git a/mod/page/icon.gif b/mod/page/pix/icon.gif
similarity index 100%
rename from mod/page/icon.gif
rename to mod/page/pix/icon.gif
diff --git a/mod/page/view.php b/mod/page/view.php
index 49e4770534..c0fd27976b 100644
--- a/mod/page/view.php
+++ b/mod/page/view.php
@@ -57,7 +57,7 @@ $PAGE->set_url('mod/page/view.php', array('id' => $cm->id));
 $options = empty($page->displayoptions) ? array() : unserialize($page->displayoptions);
 
 if ($inpopup and $page->display == RESOURCELIB_DISPLAY_POPUP) {
-    $PAGE->set_generaltype('popup');
+    $PAGE->set_pagelayout('popup');
     $PAGE->set_title($course->shortname.': '.$page->name);
     if (!empty($options['printheading'])) {
         $PAGE->set_heading($page->name);
diff --git a/mod/quiz/edit.php b/mod/quiz/edit.php
index 3e01d6e1d1..c3310139bd 100644
--- a/mod/quiz/edit.php
+++ b/mod/quiz/edit.php
@@ -115,7 +115,7 @@ function module_specific_controls($totalnumber, $recurse, $category, $cmid, $cmo
 list($thispageurl, $contexts, $cmid, $cm, $quiz, $pagevars) =
         question_edit_setup('editq', true);
 $PAGE->set_url('mod/quiz/edit.php', $thispageurl->params());
-$PAGE->set_generaltype('form');
+$PAGE->set_pagelayout('form');
 
 $defaultcategoryobj = question_make_default_categories($contexts->all());
 $defaultcategoryid = $defaultcategoryobj->id;
diff --git a/mod/quiz/editlib.php b/mod/quiz/editlib.php
index c4e73960c2..0caf62fc52 100644
--- a/mod/quiz/editlib.php
+++ b/mod/quiz/editlib.php
@@ -749,7 +749,6 @@ function quiz_print_singlequestion($question, $returnurl, $quiz) {
  */
 function quiz_print_randomquestion(&$question, &$pageurl, &$quiz, $quiz_qbanktool) {
     global $DB, $QTYPES, $THEME, $OUTPUT;
-    check_theme_arrows();
     echo '<div class="quiz_randomquestion">';
 
     if (!$category = $DB->get_record('question_categories', array('id' => $question->category))) {
diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php
index d8e59e7f7c..c7dcb4f6b9 100644
--- a/mod/quiz/lib.php
+++ b/mod/quiz/lib.php
@@ -838,7 +838,7 @@ function quiz_print_recent_mod_activity($activity, $courseid, $detail, $modnames
     if ($detail) {
         $modname = $modnames[$activity->type];
         echo '<div class="title">';
-        echo "<img src=\"" . $OUTPUT->mod_icon_url('icon', $activity->type) . "\" ".
+        echo "<img src=\"" . $OUTPUT->old_icon_url('icon', $activity->type) . "\" ".
              "class=\"icon\" alt=\"$modname\" />";
         echo "<a href=\"$CFG->wwwroot/mod/quiz/view.php?id={$activity->cmid}\">{$activity->name}</a>";
         echo '</div>';
diff --git a/mod/quiz/pix/icon.gif b/mod/quiz/pix/icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..47b7040d2b17c7125f9d469cbe9a3ea2bcb1d4b5
GIT binary patch
literal 101
zcmZ?wbhEHb6krfw_{hxghk@b$|NjhNp!k!8m4ShoK?lSG$ulsS&FQl|EyRC6@wDp;
zmaXP1ZpBJTFa-rCy+~b^AbmhRlWEiTTjqYperGhisW>=cb;cJTA)jXp7#OSpt85}o

literal 0
HcmV?d00001

diff --git a/mod/quiz/report/responses/report.php b/mod/quiz/report/responses/report.php
index a9a3cddf08..58826a028b 100644
--- a/mod/quiz/report/responses/report.php
+++ b/mod/quiz/report/responses/report.php
@@ -133,7 +133,6 @@ class quiz_responses_report extends quiz_default_report {
         if (!$table->is_downloading()) {
 
             // Only print headers if not asked to download data
-            $PAGE->requires->css('mod/quiz/report/responses/styles.css');
             $this->print_header_and_tabs($cm, $course, $quiz, 'responses', '');
         }
 
diff --git a/mod/resource/locallib.php b/mod/resource/locallib.php
index 8075b01591..0c2b499459 100644
--- a/mod/resource/locallib.php
+++ b/mod/resource/locallib.php
@@ -134,7 +134,7 @@ function resource_display_frame($resource, $cm, $course, $file) {
     $frame = optional_param('frameset', 'main', PARAM_ALPHA);
 
     if ($frame === 'top') {
-        $PAGE->set_generaltype('topframe');
+        $PAGE->set_pagelayout('frametop');
         resource_print_header($resource, $cm, $course);
         resource_print_heading($resource, $cm, $course);
         resource_print_intro($resource, $cm, $course);
diff --git a/mod/resource/pix/icon.gif b/mod/resource/pix/icon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..41edc0e95df8efd164b91ee562b0ece578acdb4b
GIT binary patch
literal 892
zcmW-fJ%|`Y6of}PIXf>x#5M$rV{Ob>_=kvrnDkj8kj5YbHe#oR#adYjLJ%1dVj$HP
za)p&uAcb%~EQAFsL5N^sVJjBn-fgk$?t`88zL|G!Tzlo!_l|Icj}CF^--D-sL%fK+
z&fY#hJAi-y0|f*PXhaj5(F!f-KqtD;jb7-%00uFHVT{5ECNPO9Ok);iuz*D@VHvBi
zvj0Yi2r*K~zHDt0B23h-v4M?jVl!K@g&pi<7rWVuJsjX5hd9hp9N`2fImKzt;tUtK
z$R#dw6;~KAWW<;$X7{njrXayW?Y7jQMm4Eft<<6pb*f9<>ZKkHXi!5M)+mi=LX(=(
zv}S2W3tH5YmbFSN3KS|*tdz15Y~nOz*r-j!4Q_Oko88JS?r^8O-0fcO@qh<C<YABU
zh$lShDNlQrXT0D=FL~LkyyC#2BgalToBlSN1r=PVZALXzV>MNCwW^ltsLtxD?&?)N
zHBf^!RKqo@MrxuaYpSMeR?XBxE!I*k*Q#2npu&nOu2dywLD+6=B)hL&+)-#qW17;O
zR%uB`I@6Wz^h!?#GMJ$ZXH-Tqk;zPDI<qp9g)C+%%UP9mCbomN-QLLe+~?xwsXyPI
zzJ;%zc>emycUSHlKJ(;nKb>59^x5f^7jFM`^2gh_aPi$At{>fh_{GJSp1pkS!sDxV
z?!EcVr=NWJ`1J1S&F>HX`QZH<ck#yW2gkqu`SZ8OAAk7w@yic>`TD=tp1b|y&0BBb
G_5T5U_@oN}

literal 0
HcmV?d00001

diff --git a/mod/scorm/datamodels/aicclib.php b/mod/scorm/datamodels/aicclib.php
index c5fab236e4..e6fd331c92 100644
--- a/mod/scorm/datamodels/aicclib.php
+++ b/mod/scorm/datamodels/aicclib.php
@@ -435,9 +435,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                 if (isset($_COOKIE['hide:SCORMitem'.$nextsco->id])) {
                     $icon = 'plus';
                 }
-                $result->toc .= '<a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');"><img id="img'.$sublist.'" src="'.$OUTPUT->mod_icon_url('pix/' . $icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
+                $result->toc .= '<a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');"><img id="img'.$sublist.'" src="'.$OUTPUT->old_icon_url('pix/' . $icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
             } else if ($isvisible) {
-                $result->toc .= '<img src="'.$OUTPUT->mod_icon_url('pix/spacer', 'scorm').'" alt="" />';
+                $result->toc .= '<img src="'.$OUTPUT->old_icon_url('pix/spacer', 'scorm').'" alt="" />';
             }
             if (empty($sco->title)) {
                 $sco->title = $sco->identifier;
@@ -454,9 +454,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $usertrack = $usertracks[$sco->identifier];
                         $strstatus = get_string($usertrack->status,'scorm');
                         if ($sco->scormtype == 'sco') {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/' . $usertrack->status, 'scorm').'" alt="'.$strstatus.'" title="'.$strstatus.'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/' . $usertrack->status, 'scorm').'" alt="'.$strstatus.'" title="'.$strstatus.'" />';
                         } else {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/assetc', 'scorm').'" alt="'.get_string('assetlaunched','scorm').'" title="'.get_string('assetlaunched','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/assetc', 'scorm').'" alt="'.get_string('assetlaunched','scorm').'" title="'.get_string('assetlaunched','scorm').'" />';
                         }
 
                         if (($usertrack->status == 'notattempted') || ($usertrack->status == 'incomplete') || ($usertrack->status == 'browsed')) {
@@ -470,7 +470,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         }
                         $strsuspended = get_string('suspended','scorm');
                         if (isset($usertrack->{'cmi.core.exit'}) && ($usertrack->{'cmi.core.exit'} == 'suspend')) {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/suspend', 'scorm').'" alt="'.$strstatus.' - '.$strsuspended.'" title="'.$strstatus.' - '.$strsuspended.'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/suspend', 'scorm').'" alt="'.$strstatus.' - '.$strsuspended.'" title="'.$strstatus.' - '.$strsuspended.'" />';
                         }
                     } else {
                         if ($play && empty($scoid)) {
@@ -478,9 +478,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         }
                         $incomplete = true;
                         if ($sco->scormtype == 'sco') {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
                         } else {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
                         }
                     }
                     if ($sco->id == $scoid) {
diff --git a/mod/scorm/datamodels/scorm_12lib.php b/mod/scorm/datamodels/scorm_12lib.php
index 2f50dfb4d7..a852df4701 100644
--- a/mod/scorm/datamodels/scorm_12lib.php
+++ b/mod/scorm/datamodels/scorm_12lib.php
@@ -212,9 +212,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                 if (isset($_COOKIE['hide:SCORMitem'.$nextsco->id])) {
                     $icon = 'plus';
                 }
-                $result->toc .= '<a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');"><img id="img'.$sublist.'" src="'.$OUTPUT->mod_icon_url('pix/' . $icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
+                $result->toc .= '<a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');"><img id="img'.$sublist.'" src="'.$OUTPUT->old_icon_url('pix/' . $icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
             } else if ($isvisible) {
-                $result->toc .= '<img src="'.$OUTPUT->mod_icon_url('pix/spacer', 'scorm').'" alt="" />';
+                $result->toc .= '<img src="'.$OUTPUT->old_icon_url('pix/spacer', 'scorm').'" alt="" />';
             }
             if (empty($sco->title)) {
                 $sco->title = $sco->identifier;
@@ -231,9 +231,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $usertrack = $usertracks[$sco->identifier];
                         $strstatus = get_string($usertrack->status,'scorm');
                         if ($sco->scormtype == 'sco') {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/'.$usertrack->status, 'scorm').'" alt="'.$strstatus.'" title="'.$strstatus.'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/'.$usertrack->status, 'scorm').'" alt="'.$strstatus.'" title="'.$strstatus.'" />';
                         } else {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/assetc/', 'scorm').'" alt="'.get_string('assetlaunched','scorm').'" title="'.get_string('assetlaunched','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/assetc/', 'scorm').'" alt="'.get_string('assetlaunched','scorm').'" title="'.get_string('assetlaunched','scorm').'" />';
                         }
 
                         if (($usertrack->status == 'notattempted') || ($usertrack->status == 'incomplete') || ($usertrack->status == 'browsed')) {
@@ -248,7 +248,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $strsuspended = get_string('suspended','scorm');
                         if (isset($usertrack->{'cmi.core.exit'}) && ($usertrack->{'cmi.core.exit'} == 'suspend')) {
                             if($usertrack->status !='completed') {
-                                $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/suspend', 'scorm').'" alt="'.$strstatus.' - '.$strsuspended.'" title="'.$strstatus.' - '.$strsuspended.'" />';
+                                $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/suspend', 'scorm').'" alt="'.$strstatus.' - '.$strsuspended.'" title="'.$strstatus.' - '.$strsuspended.'" />';
                             }
                         }
                     } else {
@@ -257,9 +257,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         }
                         $incomplete = true;
                         if ($sco->scormtype == 'sco') {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
                         } else {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
                         }
                     }
                     if ($sco->id == $scoid) {
diff --git a/mod/scorm/datamodels/scorm_13lib.php b/mod/scorm/datamodels/scorm_13lib.php
index 329ba5e682..bee59a9d92 100644
--- a/mod/scorm/datamodels/scorm_13lib.php
+++ b/mod/scorm/datamodels/scorm_13lib.php
@@ -104,9 +104,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                     $icon = 'plus';
                 }
                 $result->toc .= "\t\t".'<li><a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');">'.
-                                '<img id="img'.$sublist.'" src="'.$OUTPUT->mod_icon_url('pix/'.$icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
+                                '<img id="img'.$sublist.'" src="'.$OUTPUT->old_icon_url('pix/'.$icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
             } else if ($isvisible) {
-                $result->toc .= "\t\t".'<li><img src="'.$OUTPUT->mod_icon_url('pix/spacer', 'scorm').'" alt="" />';
+                $result->toc .= "\t\t".'<li><img src="'.$OUTPUT->old_icon_url('pix/spacer', 'scorm').'" alt="" />';
             }
             if (empty($sco->title)) {
                 $sco->title = $sco->identifier;
@@ -123,9 +123,9 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $usertrack = $usertracks[$sco->identifier];
                         $strstatus = get_string($usertrack->status,'scorm');
                         if ($sco->scormtype == 'sco') {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/'.$usertrack->status, 'scorm').'" alt="'.$strstatus.'" title="'.$strstatus.'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/'.$usertrack->status, 'scorm').'" alt="'.$strstatus.'" title="'.$strstatus.'" />';
                         } else {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/assetc', 'scorm').'" alt="'.get_string('assetlaunched','scorm').'" title="'.get_string('assetlaunched','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/assetc', 'scorm').'" alt="'.get_string('assetlaunched','scorm').'" title="'.get_string('assetlaunched','scorm').'" />';
                         }
 
                         if (($usertrack->status == 'notattempted') || ($usertrack->status == 'incomplete') || ($usertrack->status == 'browsed')) {
@@ -140,7 +140,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $strsuspended = get_string('suspended','scorm');
                         if (isset($usertrack->{'cmi.core.exit'}) && ($usertrack->{'cmi.core.exit'} == 'suspend')) {
                             if($usertrack->status !='completed') {
-                                $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/suspend', 'scorm').'" alt="'.$strstatus.' - '.$strsuspended.'" title="'.$strstatus.' - '.$strsuspended.'" />';
+                                $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/suspend', 'scorm').'" alt="'.$strstatus.' - '.$strsuspended.'" title="'.$strstatus.' - '.$strsuspended.'" />';
                             }
                         }
                     } else {
@@ -148,10 +148,10 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                             $scoid = $sco->id;
                         }
                         if ($sco->scormtype == 'sco') {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
                             $incomplete = true;
                         } else {
-                            $statusicon = '<img src="'.$OUTPUT->mod_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
+                            $statusicon = '<img src="'.$OUTPUT->old_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
                         }
                     }
 
diff --git a/mod/scorm/lib.php b/mod/scorm/lib.php
index 154e4adec3..e9df44b58d 100755
--- a/mod/scorm/lib.php
+++ b/mod/scorm/lib.php
@@ -383,7 +383,7 @@ function scorm_user_complete($course, $user, $mod, $scorm) {
                     if (($nextsco !== false) && ($sco->parent != $nextsco->parent) && (($level==0) || (($level>0) && ($nextsco->parent == $sco->identifier)))) {
                         $sublist++;
                     } else {
-                        $report .= '<img src="'.$OUTPUT->mod_icon_url('pix/spacer', 'scorm').'" alt="" />';
+                        $report .= '<img src="'.$OUTPUT->old_icon_url('pix/spacer', 'scorm').'" alt="" />';
                     }
 
                     if ($sco->launch) {
@@ -395,7 +395,7 @@ function scorm_user_complete($course, $user, $mod, $scorm) {
                                 $usertrack->status = 'notattempted';
                             }
                             $strstatus = get_string($usertrack->status,'scorm');
-                            $report .= "<img src='".$OUTPUT->mod_icon_url('pix/'.$usertrack->status, 'scorm')."' alt='$strstatus' title='$strstatus' />";
+                            $report .= "<img src='".$OUTPUT->old_icon_url('pix/'.$usertrack->status, 'scorm')."' alt='$strstatus' title='$strstatus' />";
                             if ($usertrack->timemodified != 0) {
                                 if ($usertrack->timemodified > $lastmodify) {
                                     $lastmodify = $usertrack->timemodified;
@@ -406,9 +406,9 @@ function scorm_user_complete($course, $user, $mod, $scorm) {
                             }
                         } else {
                             if ($sco->scormtype == 'sco') {
-                                $report .= '<img src="'.$OUTPUT->mod_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
+                                $report .= '<img src="'.$OUTPUT->old_icon_url('pix/notattempted', 'scorm').'" alt="'.get_string('notattempted','scorm').'" title="'.get_string('notattempted','scorm').'" />';
                             } else {
-                                $report .= '<img src="'.$OUTPUT->mod_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
+                                $report .= '<img src="'.$OUTPUT->old_icon_url('pix/asset', 'scorm').'" alt="'.get_string('asset','scorm').'" title="'.get_string('asset','scorm').'" />';
                             }
                         }
                         $report .= "&nbsp;$sco->title $score$totaltime</li>\n";
diff --git a/mod/scorm/loadSCO.php b/mod/scorm/loadSCO.php
index f15cc7e428..705c32ec84 100755
--- a/mod/scorm/loadSCO.php
+++ b/mod/scorm/loadSCO.php
@@ -171,7 +171,7 @@
                 location = "<?php echo $result ?>";
             }
             else {
-                document.body.innerHTML = "<p><?php echo get_string('activityloading', 'scorm');?> <span id='countdown'><?php echo $delayseconds ?></span> <?php echo get_string('numseconds');?>. &nbsp; <img src='<?php echo $OUTPUT->mod_icon_url('pix/wait', 'scorm') ?>'><p>";
+                document.body.innerHTML = "<p><?php echo get_string('activityloading', 'scorm');?> <span id='countdown'><?php echo $delayseconds ?></span> <?php echo get_string('numseconds');?>. &nbsp; <img src='<?php echo $OUTPUT->old_icon_url('pix/wait', 'scorm') ?>'><p>";
                 var e = document.getElementById("countdown");
                 var cSeconds = parseInt(e.innerHTML);
                 var timer = setInterval(function() {
diff --git a/mod/scorm/pix/icon.gif b/mod/scorm/pix/icon.gif
new file mode 100755
index 0000000000000000000000000000000000000000..2e0c099a7d9fe6a0b638823cd43b1afc9a49dbe6
GIT binary patch
literal 378
zcmZ?wbhEHb6krfw_-ep#`S8XCW!6vcTv^$ZzP3HQJ;`!fp5>$6y;b4n^UAEwuBd!<
zWNKNM*{!YZH4*0XOKqzoEzfP5(im?(tH87=({E0h)AIw9DniX3Ufg$bb?58?i|TOG
zi)-6wm)I2g=~RXqRfL+(DYh*RG%O1=+%mJaEW~(vv2~8W(Y#{ol0f~EP>b8=4-^EM
zRL41fK0W){;hF#c|7RctDE?$&WneI1&;e-z`H6vTy2FeD4H1rx6N+kw9=b5BPEjeg
zh!7L={(AL90Nawb?8d!%d|XY(4*aT7VLqC8(Ifj^{{*f^hE4||QAJ^4P7O{*4W61F
zRUv*xPX5W9vfVwktP?mVO_(-=Pl1(j;u1!FSuMU9;)|Cq;TPrMTV1nu!vw}`bxrB5
n+n4hTvoSjh$Vqc-*Er1LX`m~o%qpdJ^t`i3!HqkfjttfS^N)b6

literal 0
HcmV?d00001

diff --git a/mod/scorm/report.php b/mod/scorm/report.php
index 10b6560b1b..3ac337e853 100755
--- a/mod/scorm/report.php
+++ b/mod/scorm/report.php
@@ -267,7 +267,7 @@
                                     $detailslink = '&nbsp;';
                                 }
                                 $strstatus = get_string($trackdata->status,'scorm');
-                                $row[] = '<img src="'.$OUTPUT->mod_icon_url('pix/' . $trackdata->status, 'scorm').'" alt="'.$strstatus.'" title="'.
+                                $row[] = '<img src="'.$OUTPUT->old_icon_url('pix/' . $trackdata->status, 'scorm').'" alt="'.$strstatus.'" title="'.
                                          $strstatus.'" />&nbsp;'.format_string($sco->title);
                                 $row[] = get_string($trackdata->status,'scorm');
                                 $row[] = $trackdata->total_time;
@@ -310,7 +310,7 @@
                 $trackdata->total_time = '';
             }
             $strstatus = get_string($trackdata->status,'scorm');
-            echo '<img src="'.$$OUTPUT->mod_icon_url('pix/'.$trackdata->status, 'scorm').'" alt="'.$strstatus.'" title="'.
+            echo '<img src="'.$$OUTPUT->old_icon_url('pix/'.$trackdata->status, 'scorm').'" alt="'.$strstatus.'" title="'.
             $strstatus.'" />&nbsp;'.$trackdata->total_time.'<br />'.$scoreview.'<br />';
             echo '</div>'."\n";
             echo '<hr /><h2>'.get_string('details','scorm').'</h2>';
diff --git a/mod/survey/icon.gif b/mod/survey/pix/icon.gif
similarity index 100%
rename from mod/survey/icon.gif
rename to mod/survey/pix/icon.gif
diff --git a/mod/upgrade.txt b/mod/upgrade.txt
index df03cfe523..30df086fd0 100644
--- a/mod/upgrade.txt
+++ b/mod/upgrade.txt
@@ -19,6 +19,10 @@ required changes in code:
 * migrate custom resource module subtypes into separate modules
 * migrate to new comments subsystem
 * use new $PAGE and $OUTPUT instead of old weblib functions
+* theme changes: move plugin styles into mod/xxx/styles.css and use new css markers for images,
+                 move all images into new mod/xxx/pix/ directory and use new outputlib api
+                 move module icon to mod/xxx/pix/icon.gif
+
 
 optional - no changes needed in older code:
 * portfolio support
diff --git a/mod/url/locallib.php b/mod/url/locallib.php
index d3dad2c1f0..f914a3062d 100644
--- a/mod/url/locallib.php
+++ b/mod/url/locallib.php
@@ -139,7 +139,7 @@ function url_display_frame($url, $cm, $course) {
     $frame = optional_param('frameset', 'main', PARAM_ALPHA);
 
     if ($frame === 'top') {
-        $PAGE->set_generaltype('topframe');
+        $PAGE->set_pagelayout('frametop');
         url_print_header($url, $cm, $course);
         url_print_heading($url, $cm, $course);
         url_print_intro($url, $cm, $course);
diff --git a/mod/url/pix/icon.gif b/mod/url/pix/icon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..547358b953db293a217a1d0bfaa534d505203565
GIT binary patch
literal 371
zcmZ?wbhEHb6krfw_^QvK=u~2qvd*sZpkMb586zK;pcDq<G~=|HX*17w)~&Cby5i)G
z$Hi@ZX%#hTGiNHQtIS;0wR!9MGiTD$(u|v%DpszTclBgzXrR@n2NP#bZCSi<=F-VQ
z>8Wuom67|mFMav=T2w^H-)H+?-PqY$nSN$w+KXpTetr4y|Ns9pXU-TK8_UYd%E-uw
zii!#f3Nnxd6o0a?GBD^f=zw&C{KUXE;lT8451oB|C$46mjNzN;9-2PcQb20yWN+@&
z1Ow5I!vO}8@$6GPQxr{^SlBL?`qW$#YExkFSUAU>iCa-likZ1aQ?x;!i9=9;gSom^
zs)vz-gNsLmoq?sRhk>bGT3VciUqP-%pMjB4R#=>0Q?l4Ymt{BqR>?JMb<`DP6qLJt
WOWdP<&&HfSch<$p^{SgAgEask2X(su

literal 0
HcmV?d00001

diff --git a/mod/wiki/icon.gif b/mod/wiki/pix/icon.gif
similarity index 100%
rename from mod/wiki/icon.gif
rename to mod/wiki/pix/icon.gif
diff --git a/my/index.php b/my/index.php
index 4fea5a2f26..27ef6d3ed8 100644
--- a/my/index.php
+++ b/my/index.php
@@ -22,6 +22,7 @@
 
     $PAGE->set_context(get_context_instance(CONTEXT_USER, $USER->id));
     $PAGE->set_url('my/index.php');
+    $PAGE->set_pagelayout('my');
     $PAGE->set_blocks_editing_capability('moodle/my:manageblocks');
 
     if (($edit != -1) and $PAGE->user_allowed_editing()) {
diff --git a/pix/smartpix.php b/pix/smartpix.php
deleted file mode 100644
index dcebbefd9b..0000000000
--- a/pix/smartpix.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-// Outputs pictures from theme or core pix folder. Only used if $CFG->smartpix is
-// turned on.
-
-$matches=array(); // Reusable array variable for preg_match
-
-// This does NOT use config.php. This is because doing that makes database requests
-// which cause this to take longer (I benchmarked this at 16ms, 256ms with config.php)
-// A version using normal Moodle functions is included in comment at end in case we
-// want to switch to it in future.
-
-function error($text,$notfound=false) {
-    header($notfound ? 'HTTP/1.0 404 Not Found' : 'HTTP/1.0 500 Internal Server Error');
-    header('Content-Type: text/plain');
-    print $text;
-    exit;
-}
-
-// Nicked from moodlelib clean_param
-function makesafe($param) {
-    $param = str_replace('\\\'', '\'', $param);
-    $param = str_replace('\\"', '"', $param);
-    $param = str_replace('\\', '/', $param);
-    $param = preg_replace('/[[:cntrl:]]|[<>"`\|\':]/', '', $param);
-    $param = preg_replace('/\.\.+/', '', $param);
-    $param = preg_replace('~//+~', '/', $param);
-    return preg_replace('~/(\./)+~', '/', $param);
-}
-
-// Nicked from weblib
-/**
- * Remove query string from url
- *
- * Takes in a URL and returns it without the querystring portion
- *
- * @param string $url the url which may have a query string attached
- * @return string
- */
-function strip_querystring($url) {
-
-    if ($commapos = strpos($url, '?')) {
-        return substr($url, 0, $commapos);
-    } else {
-        return $url;
-    }
-}
-
-// get query string
-function get_query($name) {
-    if (!empty($_SERVER['REQUEST_URI'])) {
-        return explode($name, $_SERVER['REQUEST_URI']);
-    } else if (!empty($_SERVER['QUERY_STRING'])) {
-        return array('', '?'. $_SERVER['QUERY_STRING']);
-    } else {
-        return false;
-    }
-}
-// Nicked from weblib then cutdown
-/**
- * Extracts file argument either from file parameter or PATH_INFO.
- * @param string $scriptname name of the calling script
- * @return string file path (only safe characters)
- */
-function get_file_argument_limited($scriptname) {
-    $relativepath = FALSE;
-
-    // first try normal parameter (compatible method == no relative links!)
-    if(isset($_GET['file'])) {
-        return makesafe($_GET['file']);
-    }
-
-    // then try extract file from PATH_INFO (slasharguments method)
-    if (!empty($_SERVER['PATH_INFO'])) {
-        $path_info = $_SERVER['PATH_INFO'];
-        // check that PATH_INFO works == must not contain the script name
-        if (!strpos($path_info, $scriptname)) {
-            return makesafe(rawurldecode($path_info));
-        }
-    }
-
-    // now if both fail try the old way
-    // (for compatibility with misconfigured or older buggy php implementations)
-    $arr = get_query($scriptname);
-    if (!empty($arr[1])) {
-        return makesafe(rawurldecode(strip_querystring($arr[1])));
-    }
-
-    error('Unexpected PHP set up. Turn off the smartpix config option.');
-}
-
-// We do need to get dirroot from config.php
-if(!$config=@file_get_contents(dirname(__FILE__).'/../config.php')) {
-    error("Can't open config.php");
-}
-$configlines=preg_split('/[\r\n]+/',$config);
-foreach($configlines as $configline) {
-    if(preg_match('/^\s?\$CFG->dirroot\s*=\s*[\'"](.*?)[\'"]\s*;/',$configline,$matches)) {
-        $dirroot=$matches[1];
-    }
-    if(preg_match('/^\s?\$CFG->dataroot\s*=\s*[\'"](.*?)[\'"]\s*;/',$configline,$matches)) {
-        $dataroot=$matches[1];
-    }
-    if(isset($dirroot) && isset($dataroot)) {
-        break;
-    }
-}
-if(!(isset($dirroot) && isset($dataroot))) {
-    error('No line in config.php like $CFG->dirroot=\'/somewhere/whatever\';');
-}
-
-// Split path - starts with theme name, then actual image path inside pix
-$path=get_file_argument_limited('smartpix.php');
-$match=array();
-if(!preg_match('|^/([a-zA-Z0-9_\-.]+)/([a-zA-Z0-9/_\-.]+)$|',$path,$match)) {
-    error('Unexpected request format');
-}
-list($junk,$theme,$path)=$match;
-
-// Check file type
-if(preg_match('/\.png$/',$path)) {
-    $mimetype='image/png';
-} else if(preg_match('/\.gif$/',$path)) {
-    $mimetype='image/gif';
-} else if(preg_match('/\.jpe?g$/',$path)) {
-    $mimetype='image/jpeg';
-} else {
-    // Note that this is a security feature as well as a lack of mime type
-    // support :) Means this can't accidentally serve files from places it
-    // shouldn't. Without it, you can actually access any file inside the
-    // module code directory.
-    error('Request for non-image file');
-}
-
-// Find actual location of image as $file
-$file=false;
-if(file_exists($possibility="$dirroot/theme/$theme/pix/$path")) {
-    // Found the file in theme, stop looking
-    $file=$possibility;
-} else {
-    // Is there a parent theme?
-    while(true) {
-        require("$dirroot/theme/$theme/config.php"); // Sets up $THEME
-        if(!$THEME->parent) {
-            break;
-        }
-        $theme=$THEME->parent;
-        if(file_exists($possibility="$dirroot/theme/$theme/pix/$path")) {
-            $file=$possibility;
-            // Found in parent theme
-            break;
-        }
-    }
-    if(!$file) {
-        if(preg_match('|^mod/|',$path)) {
-            if(!file_exists($possibility="$dirroot/$path")) {
-                error('Requested image not found.',true);
-            }
-        } else {
-            if(!file_exists($possibility="$dirroot/pix/$path")) {
-                error('Requested image not found.',true);
-            }
-        }
-        $file=$possibility;
-    }
-}
-
-// Now we have a file that exists. Not using send_file since it requires
-// proper $CFG etc.
-
-// Handle If-Modified-Since
-$filedate=filemtime($file);
-$ifmodifiedsince=isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
-if($ifmodifiedsince && strtotime($ifmodifiedsince)>=$filedate) {
-    header('HTTP/1.0 304 Not Modified');
-    exit;
-}
-header('Last-Modified: '.gmdate('D, d M Y H:i:s',$filedate).' GMT');
-
-// As I'm not loading config table from DB, this is hardcoded here; expiry
-// 4 hours, unless the hacky file reduceimagecache.dat exists in dataroot
-if(file_exists($reducefile=$dataroot.'/reduceimagecache.dat')) {
-    $lifetime=file_read_contents($reducefile);
-} else {
-    $lifetime=4*60*60;
-}
-
-// Send expire headers
-header('Cache-Control: max-age='.$lifetime);
-header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
-
-// Type
-header('Content-Type: '.$mimetype);
-header('Content-Length: '.filesize($file));
-
-// Output file
-$handle=fopen($file,'r');
-fpassthru($handle);
-fclose($handle);
-
-// Slower Moodle-style version follows:
-
-//// Outputs pictures from theme or core pix folder. Only used if $CFG->smartpix is
-//// turned on.
-//
-//define('NO_MOODLE_COOKIES', true); // session not used here
-//require_once('../config.php');
-//require_once('../lib/filelib.php');
-//global $CFG;
-//
-//$matches=array(); // Reusable array variable for preg_match
-//
-//// Split path - starts with theme name, then actual image path inside pix
-//$path=get_file_argument('smartpix.php');
-//$match=array();
-//if(!preg_match('|^/([a-z0-9_\-.]+)/([a-z0-9/_\-.]+)$|',$path,$match)) {
-//    error('Unexpected request format');
-//}
-//list($junk,$theme,$path)=$match;
-//
-//// Check file type - this is not needed for the MIME types as we could
-//// get those by the existing function, but it provides an extra layer of security
-//// as otherwise this script could be used to view all files within dirroot/mod
-//if(preg_match('/\.png$/',$path)) {
-//    $mimetype='image/png';
-//} else if(preg_match('/\.gif$/',$path)) {
-//    $mimetype='image/gif';
-//} else if(preg_match('/\.jpe?g$/',$path)) {
-//    $mimetype='image/jpeg';
-//} else {
-//    error('Request for non-image file');
-//}
-//
-//// Find actual location of image as $file
-//$file=false;
-//if(file_exists($possibility="$CFG->dirroot/theme/$theme/pix/$path")) {
-//    // Found the file in theme, stop looking
-//    $file=$possibility;
-//} else {
-//    // Is there a parent theme?
-//    while(true) {
-//        require("$CFG->dirroot/theme/$theme/config.php"); // Sets up $THEME
-//        if(!$THEME->parent) {
-//            break;
-//        }
-//        $theme=$THEME->parent;
-//        if(file_exists($possibility="$CFG->dirroot/theme/$theme/pix/$path")) {
-//            $file=$possibility;
-//            // Found in parent theme
-//            break;
-//        }
-//    }
-//    if(!$file) {
-//        if(preg_match('|^mod/|',$path)) {
-//            if(!file_exists($possibility="$CFG->dirroot/$path")) {
-//                error('Requested image not found.');
-//            }
-//        } else {
-//            if(!file_exists($possibility="$CFG->dirroot/pix/$path")) {
-//                error('Requested image not found.');
-//            }
-//        }
-//        $file=$possibility;
-//    }
-//}
-//
-//// Handle If-Modified-Since because send_file doesn't
-//$filedate=filemtime($file);
-//$ifmodifiedsince=isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
-//if($ifmodifiedsince && strtotime($ifmodifiedsince)>=$filedate) {
-//    header('HTTP/1.0 304 Not Modified');
-//    exit;
-//}
-//// Don't need to set last-modified, send_file does that
-//
-//if (empty($CFG->filelifetime)) {
-//    $lifetime = 86400;     // Seconds for files to remain in caches
-//} else {
-//    $lifetime = $CFG->filelifetime;
-//}
-//send_file($file,preg_replace('|^.*/|','',$file),$lifetime);
diff --git a/question/edit.php b/question/edit.php
index 01f5936c1d..53d1a010f0 100644
--- a/question/edit.php
+++ b/question/edit.php
@@ -60,8 +60,6 @@
 
     // TODO log this page view.
 
-    $localcss = '<link rel="stylesheet" type="text/css" href="'.$CFG->wwwroot.
-            '/lib/yui/container/assets/container.css" />';
     $context = $contexts->lowest();
     $streditingquestions = get_string('editquestions', "quiz");
     if ($cm!==null) {
diff --git a/question/preview.php b/question/preview.php
index 0b27383d43..2d5b356b05 100644
--- a/question/preview.php
+++ b/question/preview.php
@@ -32,7 +32,7 @@
         $pageurl->param('quizid', $quizid);
     }
     $PAGE->set_url($pageurl);
-    $PAGE->set_generaltype('popup');
+    $PAGE->set_pagelayout('popup');
 
     // Test if we are continuing an attempt at a question
     $continue = optional_param('continue', 0, PARAM_BOOL);
diff --git a/question/type/questiontype.php b/question/type/questiontype.php
index 7559e1dacd..a380815e61 100644
--- a/question/type/questiontype.php
+++ b/question/type/questiontype.php
@@ -875,13 +875,6 @@ class default_questiontype {
         if (file_exists($plugindir . '/script.php')) {
             $PAGE->requires->js($plugindirrel . '/script.php');
         }
-
-        if (file_exists($plugindir . '/styles.css')) {
-            $PAGE->requires->css($plugindirrel . '/styles.css');
-        }
-        if (file_exists($plugindir . '/styles.php')) {
-            $PAGE->requires->css($plugindirrel . '/styles.php');
-        }
     }
 
     /**
diff --git a/repository/filepicker.php b/repository/filepicker.php
index 1d04d9bcde..f7e703441e 100755
--- a/repository/filepicker.php
+++ b/repository/filepicker.php
@@ -35,7 +35,7 @@ set_time_limit(0);
 require_login();
 
 // disable blocks in this page
-$PAGE->set_generaltype('embedded');
+$PAGE->set_pagelayout('embedded');
 
 // general parameters
 $action      = optional_param('action', '',        PARAM_ALPHA);
diff --git a/repository/lib.php b/repository/lib.php
index 7d8d303b8d..2e7cee78f3 100644
--- a/repository/lib.php
+++ b/repository/lib.php
@@ -1777,12 +1777,9 @@ function repository_head_setup() {
     $PAGE->requires->yui_lib('button')->in_head();
     $PAGE->requires->yui_lib('selector')->in_head();
 
-    //TODO: remove following after we moe the content of file
-    //      proper place (==themes)
-    $PAGE->requires->css('repository/repository.css');
-
     //TODO: remove the ->in_head() once we refactor the inline script tags in repo code
     $PAGE->requires->js('repository/repository.src.js')->in_head();
+
 }
 
 /**
diff --git a/repository/local/repository.class.php b/repository/local/repository.class.php
index c1c45c266d..c119096584 100755
--- a/repository/local/repository.class.php
+++ b/repository/local/repository.class.php
@@ -120,7 +120,7 @@ class repository_local extends repository {
                             'size' => 0,
                             'date' => '',
                             'source'=> $params,
-                            'thumbnail' => $OUTPUT->old_icon_url($icon)
+                            'thumbnail' => $OUTPUT->old_icon_url($icon),
                         );
                         $list[] = $node;
                     }
diff --git a/repository/repository.css b/repository/repository.css
deleted file mode 100644
index cc4937fbd8..0000000000
--- a/repository/repository.css
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */
-/* copy from yui/examples/treeview/assets/css/folders/tree.css */
-/* first or middle sibling, no children */
-.ygtvtn { background: url(../pix/y/tn.gif) 0 0 no-repeat; width:17px; height:22px; }
-/* first or middle sibling, collapsable */
-.ygtvtm { background: url(../pix/y/tm.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* first or middle sibling, collapsable, hover */
-.ygtvtmh { background: url(../pix/y/tmh.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* first or middle sibling, expandable */
-.ygtvtp { background: url(../pix/y/tp.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* first or middle sibling, expandable, hover */
-.ygtvtph { background: url(../pix/y/tph.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* last sibling, no children */
-.ygtvln { background: url(../pix/y/ln.gif) 0 0 no-repeat; width:17px; height:22px; }
-/* Last sibling, collapsable */
-.ygtvlm { background: url(../pix/y/lm.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* Last sibling, collapsable, hover */
-.ygtvlmh { background: url(../pix/y/lmh.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* Last sibling, expandable */
-.ygtvlp { background: url(../pix/y/lp.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* Last sibling, expandable, hover */
-.ygtvlph { background: url(../pix/y/lph.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
-/* Loading icon */
-.ygtvloading { background: url(../pix/y/loading.gif) 0 0 no-repeat; width:16px; height:22px; }
-/* the style for the empty cells that are used for rendering the depth
- * of the node */
-.ygtvdepthcell { background: url(../pix/y/vline.gif) 0 0 no-repeat; width:17px; height:22px; }
-.ygtvblankdepthcell { width:17px; height:22px; }
-/* the style of the div around each node */
-.ygtvitem { }
-.ygtvitem  table{ margin-bottom:0; }
-.ygtvitem  td { border:none;padding:0; }
-/* the style of the div around each node's collection of children */
-.ygtvchildren { }
-* html .ygtvchildren { height:1%; }
-/* the style of the text label in ygTextNode */
-.ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover { margin-left:2px; text-decoration: none; }
-
-
-.file-picker{font-size:12px;}
-.file-picker strong{background:#FFFFCC}
-.file-picker a{color: #336699}
-.file-picker a:hover{background:#003366;color:white}
-.fp-panel{padding:0;margin:0; text-align:left;}
-.fp-login-form{text-align:center}
-.fp-searchbar{float:right}
-.fp-viewbar{width:300px;float:left}
-.fp-toolbar{padding: .8em;background: #FFFFCC;text-align:center;margin: 3px}
-.fp-toolbar a{padding: 0 .5em}
-.fp-list{list-style-type:none;padding:0;float:left;width:100%;margin:0;}
-.fp-list li{border-bottom:1px dotted gray;margin-bottom: 1em;}
-.fp-repo-name{display:block;padding: .5em;margin-bottom: .5em}
-.fp-pathbar{margin: .4em;border-bottom: 1px dotted gray;}
-.fp-pathbar a{padding: .4em;}
-.fp-rename-form{text-align:center}
-.fp-rename-form p{margin: 1em;}
-.fp-upload-form{margin: 2em 0;text-align:center}
-.fp-upload-btn{clear:both;margin-top: 2em;}
-.fp-upload-btn a{cursor: default;background: white;border:1px solid gray;color:black;padding: .5em}
-.fp-upload-btn a:hover {background: grey;color:white}
-.fp-paging{margin:1em .5em; clear:both;text-align:center;line-height: 2.5em;}
-.fp-paging a{padding: .5em;border: 1px solid #CCC}
-.fp-paging a.cur_page{border: 1px solid blue}
-.fp-popup{text-align:center}
-.fp-grid{float:left;text-align:center;}
-.fp-grid div{overflow: hidden}
-.fp-grid p{margin:0;padding:0;background: #FFFFCC}
-.fp-grid .label{height:48px;text-align:center}
-.fp-grid span{color:gray}
-.fp-error {padding: 2em 0; margin: 3em 5px;text-align:center;background: #FFBBBB}
-.fp-msg {padding: 2em 0; margin: 3em 5px;text-align:center;background: green}
-/* file picker search dialog */
-div.bd{text-align:left}
-
-
-/* TODO: Fix IE6 somehow
-.yui-skin-sam .yui-panel .hd{}
-*/
diff --git a/search/query.php b/search/query.php
index f05f1d60fb..4c302d0c11 100644
--- a/search/query.php
+++ b/search/query.php
@@ -345,10 +345,10 @@
                 if ($listing->doctype == 'user'){ // A special handle for users
                     $icon = $OUTPUT->user_picture(moodle_user_picture($listing->userid, 0));
                 } else {
-                    $iconpath = $OUTPUT->mod_icon_url('icon', $listing->doctype);
+                    $iconpath = $OUTPUT->old_icon_url('icon', $listing->doctype);
                     $icon = "<img align=\"top\" src=\"".$iconpath."\" class=\"activityicon\" alt=\"\"/>";
                 }
-              	$coursename = $DB->get_field('course', 'fullname', array('id' => $listing->courseid));
+                $coursename = $DB->get_field('course', 'fullname', array('id' => $listing->courseid));
                 $courseword = mb_convert_case(get_string('course', 'moodle'), MB_CASE_LOWER, 'UTF-8');
                 $course = ($listing->doctype != 'user') ? '<strong> ('.$courseword.': \''.$coursename.'\')</strong>' : '' ;
 
diff --git a/tag/edit.php b/tag/edit.php
index a282b8f554..4a04427392 100644
--- a/tag/edit.php
+++ b/tag/edit.php
@@ -31,7 +31,7 @@ $PAGE->set_url('tag/index.php', array('id' => $tag->id));
 $PAGE->set_subpage($tag->id);
 $PAGE->set_context($systemcontext);
 $PAGE->set_blocks_editing_capability('moodle/tag:editblocks');
-$PAGE->set_generaltype('form');
+$PAGE->set_pagelayout('form');
 
 $PAGE->requires->yui_lib('animation');
 $PAGE->requires->yui_lib('autocomplete');
diff --git a/theme/anomaly/styles.php b/theme/anomaly/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/anomaly/styles.php
+++ b/theme/anomaly/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/base/config.php b/theme/base/config.php
new file mode 100644
index 0000000000..d3a626e6ac
--- /dev/null
+++ b/theme/base/config.php
@@ -0,0 +1,123 @@
+<?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/>.
+
+
+/**
+ * Configuration for Moodle's standard theme.
+ *
+ * DO NOT COPY THIS INTO NEW THEMES! Instead use some other theme as a base
+ * for your experiments.
+ *
+ * Options related to theme customisations can be found at
+ * http://phpdocs.moodle.org/HEAD/moodlecore/theme_config.html
+ *
+ * For an overview of how Moodle themes work, Please see
+ * http://docs.moodle.org/en/Developement:How_Moodle_outputs_HTML
+ *
+ * @package   moodlecore
+ * @copyright 2009 Tim Hunt
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+
+$THEME->parents = array();
+
+$THEME->sheets = array(
+    'pagelayout',
+    'core',
+    'blocks',
+    'course',
+    'block_calendar_month',
+);
+
+$THEME->editor_sheets = array();
+
+$THEME->layouts = array(
+    // Most pages - if we encounter an unknown or a missing page type, this one is used.
+    'normal' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array('side-pre', 'side-post'),
+        'defaultregion' => 'side-post'
+    ),
+    // Course page
+    'course' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array('side-pre', 'side-post'),
+        'defaultregion' => 'side-post'
+    ),
+    // The site home page.
+    'home' => array(
+        'theme' => 'base',
+        'file' => 'home.php',
+        'regions' => array('side-pre', 'side-post'),
+        'defaultregion' => 'side-post'
+    ),
+    // Server administration scripts.
+    'admin' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array('side-pre'),
+        'defaultregion' => 'side-pre'
+    ),
+    // My moodle page
+    'my' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array('side-pre', 'side-post'),
+        'defaultregion' => 'side-post'
+    ),
+
+    // Settings form pages, like course of module settings.
+    'form' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array(),
+    ),
+    // Pages that appear in pop-up windows - no navigation, no blocks, no header.
+    'popup' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array(),
+        'options' => array('nofooter'=>true),
+    ),
+    // No blocks and minimal footer - used for legacy frame layouts only!
+    'frametop' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array(),
+        'options' => array('nofooter'),
+    ),
+    // Embeded pages, like iframe embeded in moodleform
+    'embedded' => array(
+        'theme' => 'base',
+        'file' => 'embedded.php',
+        'regions' => array(),
+        'options' => array('nofooter'=>true, 'nonavbar'=>true),
+    ),
+    // Used during upgrade and install, and for the 'This site is undergoing maintenance' message.
+    // This must not have any blocks, and it is good idea if it does not have links to
+    // other places - for example there should not be a home link in the footer...
+    'maintenance' => array(
+        'theme' => 'base',
+        'file' => 'general.php',
+        'regions' => array(),
+        'options' => array('nofooter'=>true, 'nonavbar'=>true),
+    ),
+);
+
diff --git a/theme/standard/layout-embedded.php b/theme/base/layout/embedded.php
similarity index 72%
rename from theme/standard/layout-embedded.php
rename to theme/base/layout/embedded.php
index 663db71b4f..250da5714a 100644
--- a/theme/standard/layout-embedded.php
+++ b/theme/base/layout/embedded.php
@@ -2,22 +2,22 @@
 <html <?php echo $OUTPUT->htmlattributes() ?>>
 <head>
     <title><?php echo $PAGE->title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
     <?php echo $OUTPUT->standard_head_html() ?>
 </head>
 <body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
 <?php echo $OUTPUT->standard_top_of_body_html() ?>
 
 <div id="page">
+
 <!-- END OF HEADER -->
+
     <div id="content" class="clearfix">
-        [MAIN CONTENT GOES HERE]
+        <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
     </div>
 
 <!-- START OF FOOTER -->
-    <div id="footer" class="clearfix">
-    </div>
 </div>
 <?php echo $OUTPUT->standard_end_of_body_html() ?>
 </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/theme/base/layout/general.php b/theme/base/layout/general.php
new file mode 100644
index 0000000000..5fc4ee5532
--- /dev/null
+++ b/theme/base/layout/general.php
@@ -0,0 +1,77 @@
+<?php
+
+$regionsinfo = 'pagelayout';
+if ($PAGE->blocks->region_has_content('side-pre', $OUTPUT)) {
+    $regionsinfo .= '-pre';
+}
+if ($PAGE->blocks->region_has_content('side-post', $OUTPUT)) {
+    $regionsinfo .= '-post';
+}
+
+echo $OUTPUT->doctype() ?>
+<html <?php echo $OUTPUT->htmlattributes() ?>>
+<head>
+    <title><?php echo $PAGE->title ?></title>
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
+    <?php echo $OUTPUT->standard_head_html() ?>
+</head>
+<body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
+<?php echo $OUTPUT->standard_top_of_body_html() ?>
+
+<div id="page"  class="<?php echo $regionsinfo ?>">
+
+<?php if ($PAGE->heading) { ?>
+    <div id="header" class="clearfix">
+        <h1 class="headermain"><?php echo $PAGE->heading ?></h1>
+        <div class="headermenu"><?php echo $PAGE->headingmenu ?></div>
+    </div>
+<?php } ?>
+
+<?php if (empty($PAGE->layout_options['nonavbar']) and $PAGE->has_navbar()) { // This is the navigation bar with breadcrumbs  ?>
+    <div class="navbar clearfix">
+        <div class="breadcrumb"><?php echo $OUTPUT->navbar(); ?></div>
+        <div class="navbutton"><?php echo $PAGE->button; ?></div>
+    </div>
+<?php } ?>
+<!-- END OF HEADER -->
+
+    <div class="regions-outer clearfix">
+        <div id="regions">
+            <div class="regions-inner">
+                <div class="contentwrap">
+                    <div id="content">
+                        <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
+                    </div>
+                </div>
+                <?php if ($PAGE->blocks->region_has_content('side-pre', $OUTPUT)) { ?>
+                <div id="region-side-pre" class="block-region">
+                    <?php echo $OUTPUT->blocks_for_region('side-pre') ?>
+                </div>
+                <?php } ?>
+                <?php if ($PAGE->blocks->region_has_content('side-post', $OUTPUT)) { ?>
+                <div id="region-side-post" class="block-region">
+                    <?php echo $OUTPUT->blocks_for_region('side-post') ?>
+                </div>
+                <?php } ?>
+            </div>
+        </div>
+    </div>
+
+<!-- START OF FOOTER -->
+    <?php if (empty($PAGE->layout_options['nofooter'])) { ?>
+    <div id="footer" class="clearfix">
+        <p class="helplink">
+        <?php echo page_doc_link(get_string('moodledocslink')) ?>
+        </p>
+
+        <?php
+        echo $OUTPUT->login_info();
+        echo $OUTPUT->home_link();
+        echo $OUTPUT->standard_footer_html();
+        ?>
+    </div>
+    <?php } ?>
+</div>
+<?php echo $OUTPUT->standard_end_of_body_html() ?>
+</body>
+</html>
\ No newline at end of file
diff --git a/theme/base/layout/home.php b/theme/base/layout/home.php
new file mode 100644
index 0000000000..965c61882e
--- /dev/null
+++ b/theme/base/layout/home.php
@@ -0,0 +1,73 @@
+<?php
+
+$regionsinfo = 'pagelayout';
+if ($PAGE->blocks->region_has_content('side-pre', $OUTPUT)) {
+    $regionsinfo .= '-pre';
+}
+if ($PAGE->blocks->region_has_content('side-post', $OUTPUT)) {
+    $regionsinfo .= '-post';
+}
+
+echo $OUTPUT->doctype() ?>
+<html <?php echo $OUTPUT->htmlattributes() ?>>
+<head>
+    <title><?php echo $PAGE->title ?></title>
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
+    <meta name="description" content="<?php echo strip_tags(format_text($SITE->summary, FORMAT_HTML)) ?>" />
+    <?php echo $OUTPUT->standard_head_html() ?>
+</head>
+<body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
+<?php echo $OUTPUT->standard_top_of_body_html() ?>
+
+<div id="page" class="<?php echo $regionsinfo ?>">
+
+    <div id="header-home" class="clearfix">
+        <h1 class="headermain"><?php echo $PAGE->heading ?></h1>
+        <div class="headermenu"><?php
+        if ($PAGE->headingmenu) {
+            echo $PAGE->headingmenu;
+        } else {
+            echo $OUTPUT->login_info();
+        }
+        ?></div>
+    </div>
+<!-- END OF HEADER -->
+
+    <div class="regions-outer clearfix">
+        <div id="regions">
+            <div class="regions-inner">
+                <div class="contentwrap">
+                    <div id="content">
+                        <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
+                    </div>
+                </div>
+                <?php if ($PAGE->blocks->region_has_content('side-pre', $OUTPUT)) { ?>
+                <div id="region-side-pre" class="block-region">
+                    <?php echo $OUTPUT->blocks_for_region('side-pre') ?>
+                </div>
+                <?php } ?>
+                <?php if ($PAGE->blocks->region_has_content('side-post', $OUTPUT)) { ?>
+                <div id="region-side-post" class="block-region">
+                    <?php echo $OUTPUT->blocks_for_region('side-post') ?>
+                </div>
+                <?php } ?>
+            </div>
+        </div>
+    </div>
+
+<!-- START OF FOOTER -->
+    <div id="footer" class="clearfix">
+        <p class="helplink">
+        <?php echo page_doc_link(get_string('moodledocslink')) ?>
+        </p>
+
+        <?php
+        echo $OUTPUT->login_info();
+        echo $OUTPUT->home_link();
+        echo $OUTPUT->standard_footer_html();
+        ?>
+    </div>
+</div>
+<?php echo $OUTPUT->standard_end_of_body_html() ?>
+</body>
+</html>
\ No newline at end of file
diff --git a/theme/standard/favicon.ico b/theme/base/pix/favicon.ico
similarity index 100%
rename from theme/standard/favicon.ico
rename to theme/base/pix/favicon.ico
diff --git a/theme/base/pix/screenshot.jpg b/theme/base/pix/screenshot.jpg
new file mode 100755
index 0000000000000000000000000000000000000000..de80b0ef13cd712d54319b47b67a43781df4989f
GIT binary patch
literal 156176
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%0AkO&X^
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

literal 0
HcmV?d00001

diff --git a/theme/base/style/block_calendar_month.css b/theme/base/style/block_calendar_month.css
new file mode 100644
index 0000000000..ab9b05f92b
--- /dev/null
+++ b/theme/base/style/block_calendar_month.css
@@ -0,0 +1,29 @@
+.block_calendar_month table.minicalendar {
+ width: 100%;
+}
+
+.block_calendar_month table.minicalendar td {
+  text-align: center;
+}
+
+/*Accessibility: controls now div and span, 20:60:20% or 12:76:12% */
+.block_calendar_month .calendar-controls .previous,
+.block_calendar_month .calendar-controls .next,
+.block_calendar_month .calendar-controls .current {
+  display: block;
+  float: left;
+  width: 12%;
+}
+
+.block_calendar_month .calendar-controls .previous {
+  text-align: left;
+}
+
+.block_calendar_month .calendar-controls .current {
+  text-align: center;
+  width: 76%;
+}
+
+.block_calendar_month .calendar-controls .next {
+  text-align: right;
+}
diff --git a/theme/base/style/blocks.css b/theme/base/style/blocks.css
new file mode 100644
index 0000000000..f37f39bcb4
--- /dev/null
+++ b/theme/base/style/blocks.css
@@ -0,0 +1,134 @@
+
+/** General **/
+
+.block-region .hidden .content {
+  display: none;
+}
+
+.sideblock .header .hide-show-image {
+  float:right;
+}
+
+.sideblock div.column {
+  margin:0px;
+  margin-right:4px;
+  padding:0px;
+}
+
+.sideblock div.column.c0 {
+  float: left;
+}
+
+.sideblock div.column.c1 {
+  display: inline;
+}
+
+.sideblock .content .c0 img.icon {
+  margin:0px;
+}
+
+.sideblock .content .list, .unlist, .inline-list {
+  list-style:none;
+  padding:0;
+  margin:0;
+}
+
+.sideblock .content .list {
+  width: 100%;
+}
+
+.sideblock .content .list li {
+  clear: left;
+}
+
+.sideblock .content .inline-list li, .inline-list li {
+  display: inline;
+}
+
+.sideblock .content ul.list li.listentry {
+  clear:both;
+}
+
+.sideblock .content div.info {
+  text-align:center;
+}
+
+.sideblock .footer {
+  margin-bottom: 4px;
+  text-align:center;
+  clear:both;
+}
+
+.sideblock img.userpicture {
+  width:16px;
+  height:16px;
+  margin-right:4px;
+}
+
+.sideblock.beingmoved {
+  border-width: 2px;
+  border-style: dashed;
+}
+
+/** Navigation and settings block **/
+.ie6 .sideblock .block_tree,
+.ie7 .sideblock .block_tree {
+  overflow-x:scroll;
+}
+.block_tree {
+  list-style: none;
+  padding-left:0px;
+}
+.block_tree ul {
+  margin-left: 0px;
+  padding-left:16px;
+  list-style: none;
+}
+.sideblock .block_tree {
+  overflow-x:auto;
+  overflow-y:visible;
+}
+.block_tree .tree_item {
+  white-space:nowrap;
+  margin:2px 0px;
+  padding-left: 16px;
+  margin:3px 0px;
+  white-space:nowrap;
+  text-align:left;
+}
+.ie6 .block_tree .tree_item {
+  width:100%;
+}
+.block_tree .tree_item.branch {
+  background-image: url([[pix:t/expanded]]);
+  background-position: center left;
+  background-repeat: no-repeat;
+}
+.block_tree .root_node.leaf {
+  padding-left:0px;
+}
+.block_tree .current_branch {
+  font-weight:bold;
+}
+
+.jsenabled .sideblock_js_sidebarpopout,
+.jsenabled .block_tree .collapsed ul {
+  display: none;
+}
+.jsenabled .block_tree .tree_item.branch {
+  cursor:pointer;
+}
+.jsenabled .block_tree .collapsed .tree_item.branch {
+  background-image: url([[pix:t/collapsed]]);
+}
+.jsenabled .block_tree .tree_item.emptybranch {
+  background-image: url([[pix:t/collapsed_empty]]);
+  background-position: center left;
+  background-repeat: no-repeat;
+}
+.block_tree_box .requiresjs {
+  display:none;
+}
+.jsenabled .block_tree_box .requiresjs {
+  display:inline;
+}
diff --git a/theme/base/style/core.css b/theme/base/style/core.css
new file mode 100644
index 0000000000..be4b6bd3a2
--- /dev/null
+++ b/theme/base/style/core.css
@@ -0,0 +1,136 @@
+/***
+ * Accessibility features
+ **/
+
+/*Accessibility: text 'seen' by screen readers but not visual users. */
+.accesshide {
+  position:absolute;
+  top:-100000px;
+  left:10px;
+  font-weight:normal;
+  font-size:1em;
+}
+span.hide,
+div.hide {
+  display:none;
+}
+
+/*Accessibility: Skip block link, for keyboard-only users. */
+a.skip-block, a.skip {
+  position: absolute;
+  top: -1000em;
+  font-size: 0.85em;
+}
+a.skip-block:focus, a.skip-block:active,
+a.skip:focus, a.skip:active {
+  position: static;
+  display: block;
+}
+.skip-block-to {
+  display: block;
+  height: 1px;
+  overflow: hidden;
+}
+
+a.skip-block {
+  text-decoration:none;
+}
+
+/***
+ * General
+ **/
+
+.clearer {
+  clear:both;
+  margin:0;
+  padding:0;
+  height:1px;
+  border:none;
+  background:transparent;
+  display:block;
+}
+
+.clearfix:after {
+  min-width: 0;
+  content: ".";
+  display: block;
+  height: 0;
+  clear: both;
+  visibility: hidden;
+}
+
+.generalbox {
+  border-width: 1px;
+  border-style: solid;
+}
+
+.boxaligncenter {
+  margin-left:auto;
+  margin-right:auto;
+}
+
+.boxalignright {
+  margin-left:auto;
+  margin-right:0;
+}
+
+.boxalignleft {
+  margin-left:0;
+  margin-right:auto;
+}
+
+.boxwidthnarrow {
+  width: 30%
+}
+
+.boxwidthnormal {
+  width: 50%
+}
+
+.boxwidthwide {
+  width: 80%
+}
+
+.mdl-align {
+  text-align: center;
+}
+.mdl-left {
+  text-align: left;
+}
+.mdl-right {
+  text-align: right;
+}
+
+/***
+ * Header
+ **/
+
+.breadcrumb ul {
+  padding:0;
+  margin:0;
+  text-indent:0;
+  list-style:none;
+}
+.breadcrumb li {
+  display:inline;
+}
+
+.navbar .navbutton div,
+.navbar .navbutton form {
+  display:inline;
+}
+
+/***
+ ** Course stuff
+ **/
+
+.section_add_menus .horizontal div,
+.section_add_menus .horizontal form {
+  display:inline;
+}
+
+.course-content .section .activity img.activityicon {
+  vertical-align:middle;
+  height:16px;
+  width:16px;
+}
diff --git a/theme/base/style/pagelayout.css b/theme/base/style/pagelayout.css
new file mode 100644
index 0000000000..1a0caffdd7
--- /dev/null
+++ b/theme/base/style/pagelayout.css
@@ -0,0 +1,162 @@
+
+#page {
+ /* 100% page width */
+ margin: auto 0px;
+ width: auto;
+}
+
+/***
+ * Three column layout
+ * based on: http://matthewjamestaylor.com/blog/ultimate-3-column-holy-grail-pixels.htm
+ ***/
+
+.pagelayout-pre-post .regions-outer {
+    position:relative;      /* This fixes the IE7 overflow hidden bug and stops the layout jumping out of place */
+    clear:both;
+    float:left;
+    width:100%;             /* width of whole page */
+    overflow:hidden;        /* This chops off any overhanging divs */
+}
+
+.pagelayout-pre-post #regions {
+    float:left;
+    width:200%;
+    margin-left:-200px;     /* Width of right column */
+    position:relative;
+    right:100%;
+    /* content background colour goes here */
+}
+.pagelayout-pre-post .regions-inner {
+    float:left;
+    width:100%;
+    margin-left:-50%;
+    position:relative;
+    left:400px;             /* Left column width + right column width */
+    /* side-pre background colour goes here */
+}
+.pagelayout-pre-post .contentwrap {
+    float:left;
+    width:50%;
+    position:relative;
+    right:200px;            /* Width of left column */
+    padding-bottom:1em;     /* Centre column bottom padding. Leave it out if it's zero */
+}
+.pagelayout-pre-post #content {
+    margin:0 205px;         /* Centre column side padding:
+                            Left padding = left column width + centre column left padding width
+                            Right padding = right column width + centre column right padding width */
+    position:relative;
+    left:200%;
+    overflow:hidden;
+}
+.pagelayout-pre-post #region-side-pre {
+    float:left;
+    float:right;            /* This overrides the float:left above */
+    width:190px;            /* Width of left column content (left column width minus left and right padding) */
+    position:relative;
+    right:5px;             /* Width of the left-had side padding on the left column */
+}
+.pagelayout-pre-post #region-side-post {
+    float:left;
+    float:right;            /* This overrides the float:left above */
+    width:190px;            /* Width of right column content (right column width minus left and right padding) */
+    margin-right:15px;      /* Width of right column right-hand padding + left column left and right padding */
+    position:relative;
+    left:50%;
+    /* side-post background colour goes here */
+}
+
+/***
+ * Two column layout (blocks left)
+ * based on: http://matthewjamestaylor.com/blog/ultimate-2-column-left-menu-pixels.htm
+ ***/
+
+.pagelayout-pre .regions-outer {
+    width: 100%;
+}
+.pagelayout-pre #regions {
+    position:relative;      /* This fixes the IE7 overflow hidden bug and stops the layout jumping out of place */
+    clear:both;
+    float:left;
+    width:100%;         /* width of whole page */
+    overflow:hidden;    /* This chops off any overhanging divs */
+}
+.pagelayout-pre .regions-inner {
+    float:left;
+    width:200%;
+    position:relative;
+    left:200px;
+    /* content background colour goes here */
+}
+.pagelayout-pre .contentwrap {
+    float:right;
+    width:50%;
+    position:relative;
+    right:200px;
+    padding-bottom:1em;
+}
+.pagelayout-pre #content {
+    margin:0 5px 0 205px;
+    position:relative;
+    right:100%;
+    overflow:hidden;
+}
+.pagelayout-pre #region-side-pre {
+    float:left;
+    width:190px;
+    position:relative;
+    right:195px;
+    /* side-pre background colour goes here */
+}
+
+/***
+ * Two column layout (blocks right)
+ * based on: http://matthewjamestaylor.com/blog/ultimate-2-column-right-menu-pixels.htm
+ ***/
+
+.pagelayout-pre .regions-outer {
+    width: 100%;
+}
+.pagelayout-post #regions {
+    position:relative;      /* This fixes the IE7 overflow hidden bug and stops the layout jumping out of place */
+    clear:both;
+    float:left;
+    width:100%;         /* width of whole page */
+    overflow:hidden;    /* This chops off any overhanging divs */
+}
+.pagelayout-post .regions-inner {
+    float:left;
+    width:200%;
+    margin-left:-200px;
+    position:relative;
+    right:100%;
+    background:#fff;
+}
+.pagelayout-post .contentwrap {
+    float:left;
+    width:50%;
+    position:relative;
+    left:50%;
+    padding-bottom:1em;
+}
+.pagelayout-post #content {
+    margin:0 5px 0 205px;
+    overflow:hidden;
+}
+.pagelayout-post #region-side-post {
+    float:right;
+    width:190px;
+    position:relative;
+    left:195px;
+}
+
+/***
+ * One columns layout - no blocks
+ ***/
+
+.pagelayout .regions-outer {
+    width: 100%;
+}
+.pagelayout #content {
+    margin: 0 5px 0 5px;
+}
diff --git a/theme/chameleon/styles.php b/theme/chameleon/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/chameleon/styles.php
+++ b/theme/chameleon/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/colors/styles.php b/theme/colors/styles.php
index a941dadc6d..94a76f946d 100755
--- a/theme/colors/styles.php
+++ b/theme/colors/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/cornflower/styles.php b/theme/cornflower/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/cornflower/styles.php
+++ b/theme/cornflower/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/custom_corners/lib.php b/theme/custom_corners/lib.php
new file mode 100644
index 0000000000..91079b4f7c
--- /dev/null
+++ b/theme/custom_corners/lib.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * This is a slight variatoin on the standard_renderer_factory that uses
+ * custom_corners_core_renderer instead of moodle_core_renderer.
+ *
+ * This generates the slightly different HTML that the custom_corners theme expects.
+ *
+ * @copyright 2009 Tim Hunt
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @deprecated Required to make the old $THEME->customcorners setting work.
+ */
+class custom_corners_renderer_factory extends standard_renderer_factory {
+    public function __construct($theme) {
+        parent::__construct($theme);
+        global $CFG;
+        require_once($CFG->themedir . '/custom_corners/renderers.php');
+    }
+    /* Implement the subclass method. */
+    public function get_renderer($module, $page, $subtype=null) {
+        if ($module == 'core') {
+            return new custom_corners_core_renderer($page);
+        }
+        return parent::get_renderer($module, $page, $subtype);
+    }
+}
diff --git a/theme/custom_corners/styles.php b/theme/custom_corners/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/custom_corners/styles.php
+++ b/theme/custom_corners/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/formal_white/styles.php b/theme/formal_white/styles.php
index a941dadc6d..3147448de8 100644
--- a/theme/formal_white/styles.php
+++ b/theme/formal_white/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet');
\ No newline at end of file
diff --git a/theme/image.php b/theme/image.php
new file mode 100644
index 0000000000..27ccacf298
--- /dev/null
+++ b/theme/image.php
@@ -0,0 +1,175 @@
+<?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/>.
+
+/**
+ * This file is responsible for serving the one theme and plugin images.
+ *
+ * @package   moodlecore
+ * @copyright 2009 Petr Skoda (skodak)  {@link http://skodak.org}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+// we need just the values from config.php and minlib.php
+define('ABORT_AFTER_CONFIG', true);
+require('../config.php'); // this stops immediately at the beginning of lib/setup.php
+
+$themename = min_optional_param('theme', 'standard', 'SAFEDIR');
+$component = min_optional_param('component', 'moodle', 'SAFEDIR');
+$image     = min_optional_param('image', '', 'SAFEPATH');
+$rev       = min_optional_param('rev', -1, 'INT');
+
+if (empty($component) or empty($image)) {
+    image_not_found();
+}
+
+if (!file_exists("$CFG->dirroot/theme/$themename/config.php") and !file_exists("$CFG->dataroot/theme/$themename/config.php")) {
+    image_not_found();
+}
+
+$candidatelocation = "$CFG->dataroot/cache/theme/$themename/pix/$component";
+
+if ($rev > -1) {
+    if (file_exists("$candidatelocation/$image.error")) {
+        // this is a major speedup if there are multiple missing images,
+        // the only problem is that random requests may pollute our cache.
+        image_not_found();
+    }
+    $cacheimage = false;
+    if (file_exists("$candidatelocation/$image.gif")) {
+        $cacheimage = "$candidatelocation/$image.gif";
+    } else if (file_exists("$candidatelocation/$image.png")) {
+        $cacheimage = "$candidatelocation/$image.png";
+    } else if (file_exists("$candidatelocation/$image.jpg")) {
+        $cacheimage = "$candidatelocation/$image.jpg";
+    } else if (file_exists("$candidatelocation/$image.jpeg")) {
+        $cacheimage = "$candidatelocation/$image.jpeg";
+    } else if (file_exists("$candidatelocation/$image.ico")) {
+        $cacheimage = "$candidatelocation/$image.ico";
+    }
+    if ($cacheimage) {
+        if (!empty($_SERVER['HTTP_IF_NONE_MATCH'])) {
+            // we do not actually need to verify the etag value because our files
+            // never change in cache because we increment the rev parameter
+            header('HTTP/1.1 304 Not Modified');
+            die;
+        }
+        send_cached_image($cacheimage, $rev);
+    }
+}
+
+//=================================================================================
+// ok, now we need to start normal moodle script, we need to load all libs and $DB
+define('ABORT_AFTER_CONFIG_CANCEL', true);
+
+define('NO_MOODLE_COOKIES', true); // Session not used here
+define('NO_UPGRADE_CHECK', true);  // Ignore upgrade check
+
+require("$CFG->dirroot/lib/setup.php");
+
+$theme = theme_config::load($themename);
+$imagefile = $theme->resolve_image_location($image, $component);
+
+$rev = theme_get_revision();
+
+if (empty($imagefile) or !is_readable($imagefile)) {
+    if ($rev > -1) {
+        // make note we can not find this file
+        $cacheimage = "$candidatelocation/$image.error";
+        $fp = fopen($cacheimage, 'w');
+        fclose($fp);
+    }
+    image_not_found();
+}
+
+
+if ($rev > -1) {
+    $pathinfo = pathinfo($imagefile);
+    $cacheimage = "$candidatelocation/$image.".$pathinfo['extension'];
+    if (!file_exists($cacheimage)) {
+        check_dir_exists(dirname($cacheimage), true, true);
+        copy($imagefile, $cacheimage);
+    }
+    send_cached_image($cacheimage, $rev);
+
+} else {
+    send_uncached_image($imagefile);
+}
+
+
+//=================================================================================
+//=== utility functions ==
+// we are not using filelib because we need to fine tune all header
+// parameters to get the best performance.
+
+function send_cached_image($imagepath, $rev) {
+    $lifetime = 60*60*24*3;
+    $pathinfo = pathinfo($imagepath);
+    $imagename = $pathinfo['filename'].'.'.$pathinfo['extension'];
+
+    switch($pathinfo['extension']) {
+        case 'gif' : $mimetype = 'image/gif'; break;
+        case 'png' : $mimetype = 'image/png'; break;
+        case 'jpg' : $mimetype = 'image/jpeg'; break;
+        case 'jpeg' : $mimetype = 'image/jpeg'; break;
+        case 'ico' : $mimetype = 'image/vnd.microsoft.icon'; break;
+        default: $mimetype = 'document/unknown';
+    }
+
+    header('Etag: '.md5("$rev/$imagepath"));
+    header('Content-Disposition: inline; filename="'.$imagename.'"');
+    header('Last-Modified: '. gmdate('D, d M Y H:i:s', filemtime($imagepath)) .' GMT');
+    header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
+    header('Pragma: ');
+    header('Accept-Ranges: none');
+    header('Content-Type: '.$mimetype);
+    header('Content-Length: '.filesize($imagepath));
+
+    while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite
+    readfile($imagepath);
+    die;
+}
+
+function send_uncached_image($imagepath) {
+    $pathinfo = pathinfo($imagepath);
+    $imagename = $pathinfo['filename'].'.'.$pathinfo['extension'];
+
+    switch($pathinfo['extension']) {
+        case 'gif' : $mimetype = 'image/gif'; break;
+        case 'png' : $mimetype = 'image/png'; break;
+        case 'jpg' : $mimetype = 'image/jpeg'; break;
+        case 'jpeg' : $mimetype = 'image/jpeg'; break;
+        case 'ico' : $mimetype = 'image/vnd.microsoft.icon'; break;
+        default: $mimetype = 'document/unknown';
+    }
+
+    header('Content-Disposition: inline; filename="'.$imagename.'"');
+    header('Last-Modified: '. gmdate('D, d M Y H:i:s', time()) .' GMT');
+    header('Expires: '. gmdate('D, d M Y H:i:s', time() + 2) .' GMT');
+    header('Pragma: ');
+    header('Accept-Ranges: none');
+    header('Content-Type: '.$mimetype);
+    header('Content-Length: '.filesize($imagepath));
+
+    while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite
+    readfile($imagepath);
+    die;
+}
+
+function image_not_found() {
+    header('HTTP/1.0 404 not found');
+    die('Image was not found, sorry.');
+}
\ No newline at end of file
diff --git a/theme/index.php b/theme/index.php
index 139409e3ea..61dff8439c 100644
--- a/theme/index.php
+++ b/theme/index.php
@@ -22,38 +22,32 @@
 require_once(dirname(__FILE__) . '/../config.php');
 require_once($CFG->libdir . '/adminlib.php');
 
-$choose = optional_param('choose', '', PARAM_FILE);
+$choose = optional_param('choose', '', PARAM_SAFEDIR);
+$reset  = optional_param('reset', 0, PARAM_BOOL);
 
 admin_externalpage_setup('themeselector');
 
 unset($SESSION->theme);
 
-if ($choose and confirm_sesskey()) {
+if ($reset and confirm_sesskey()) {
+    theme_reset_all_caches();
+
+} else if ($choose and confirm_sesskey()) {
     // The user has chosen one theme from the list of all themes, show a
     // 'You have chosen a new theme' confirmation page.
 
-    if (!is_dir($CFG->themedir .'/'. $choose)) {
-        print_error('themenotinstall');
-    }
+    $theme = theme_config::load($choose);
+    $choose = $theme->name;
 
     set_config('theme', $choose);
 
     admin_externalpage_print_header();
     echo $OUTPUT->heading(get_string('themesaved'));
 
-    $readmehtml = $CFG->themedir . '/' . $choose . '/README.html';
-    $readmetxt = $CFG->themedir . '/' . $choose . '/README.txt';
-    if (is_readable($readmehtml)) {
-        echo $OUTPUT->box_start();
-        readfile($readmehtml);
-        echo $OUTPUT->box_end();
-
-    } else if (is_readable($readmetxt)) {
-        echo $OUTPUT->box_start();
-        $text = file_get_contents($readmetxt);
-        echo format_text($text, FORMAT_MOODLE);
-        echo $OUTPUT->box_end();
-    }
+    echo $OUTPUT->box_start();
+    $text = get_string('choosereadme', 'theme_'.$CFG->theme);
+    echo format_text($text, FORMAT_MOODLE);
+    echo $OUTPUT->box_end();
 
     echo $OUTPUT->continue_button($CFG->wwwroot . '/' . $CFG->admin . '/index.php');
 
@@ -65,71 +59,43 @@ if ($choose and confirm_sesskey()) {
 admin_externalpage_print_header('themeselector');
 echo $OUTPUT->heading(get_string('themes'));
 
+echo $OUTPUT->button(html_form::make_button('index.php', array('sesskey'=>sesskey(),'reset'=>1), get_string('themeresetcaches', 'admin')));
+
 $table = new html_table();
 $table->id = 'adminthemeselector';
 $table->head = array(get_string('theme'), get_string('info'));
 
 $themes = get_plugin_list('theme');
-$sesskey = sesskey();
+
 foreach ($themes as $themename => $themedir) {
 
     // Load the theme config.
     try {
         $theme = theme_config::load($themename);
-    } catch (coding_exception $e) {
+    } catch (Exception $e) {
         // Bad theme, just skip it for now.
         continue;
     }
+    if ($themename !== $theme->name) {
+        //obsoleted or broken theme, just skip for now
+        continue;
+    }
 
     // Build the table row, and also a list of items to go in the second cell.
     $row = array();
     $infoitems = array();
 
-    // Preview link.
-    $infoitems['preview'] = '<a href="preview.php?preview=' . $themename . '">' . get_string('preview') . '</a>';
 
-    // First cell (a preview) and also a link to the screenshot, if there is one.
-    $screenshotpath = '';
-    if (file_exists($theme->dir . '/screenshot.png')) {
-        $screenshotpath = $themename . '/screenshot.png';
-    } else if (file_exists($theme->dir . '/screenshot.jpg')) {
-        $screenshotpath = $themename . '/screenshot.jpg';
-    }
-    if ($screenshotpath) {
-        $infoitems['screenshot'] = '<a href="' . $CFG->themewww .'/'. $screenshotpath . '">' .
-                get_string('screenshot') . '</a>';
-    }
-
-    // Link to the themes's readme.
-    $readmeurl = '';
-    if (file_exists($theme->dir . '/README.html')) {
-        $readmeurl = $CFG->themewww .'/'. $themename .'/README.html';
-    } else if (file_exists($theme->dir . '/README.txt')) {
-        $readmeurl = $CFG->themewww .'/'. $themename .'/README.txt';
-    }
-    if ($readmeurl) {
-        $link = html_link::make($readmeurl, get_string('info'));
-        $link->add_action(new popup_action('click', $link->url, $themename));
-        $infoitems['readme'] = $OUTPUT->link($link);
-    }
+    // link to the screenshot, now mandatory - the image path is hardcoded because we need image from other themes, not the current one
+    $screenshotpath = "$CFG->wwwroot/theme/image.php?theme=$themename&image=screenshot&component=theme";
 
     // Contents of the first screenshot/preview cell.
-    if ($screenshotpath) {
-        $row[] = '<object type="text/html" data="' . $CFG->themewww .'/' . $screenshotpath .
-                '" height="200" width="400">' . $themename . '</object>';
-    } else {
-        $row[] = '<object type="text/html" data="preview.php?preview=' . $themename .
-                '" height="200" width="400">' . $themename . '</object>';
-    }
+    $row[] = "<img src=\"$screenshotpath\" alt=\"$themename\" />";
 
     // Contents of the second cell.
     $infocell = $OUTPUT->heading($themename, 3);
-    if ($infoitems) {
-        $infocell .= "<ul>\n<li>" . implode("</li>\n<li>", $infoitems) . "</li>\n</ul>\n";
-    }
     if ($themename != $CFG->theme) {
-        $infocell .= $OUTPUT->button(html_form::make_button('index.php', array('choose' => $themename, 'sesskey' => $sesskey),
-                get_string('choose'), 'get'));
+        $infocell .= $OUTPUT->button(html_form::make_button('index.php', array('choose' => $themename, 'sesskey' => sesskey()), get_string('choose'), 'get'));
 
     }
     $row[] = $infocell;
@@ -143,4 +109,4 @@ foreach ($themes as $themename => $themedir) {
 echo $OUTPUT->table($table);
 
 echo $OUTPUT->footer();
-?>
+
diff --git a/theme/lines/styles.php b/theme/lines/styles.php
index a941dadc6d..94a76f946d 100755
--- a/theme/lines/styles.php
+++ b/theme/lines/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/metal/styles.php b/theme/metal/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/metal/styles.php
+++ b/theme/metal/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/oceanblue/styles.php b/theme/oceanblue/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/oceanblue/styles.php
+++ b/theme/oceanblue/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/orangewhite/styles.php b/theme/orangewhite/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/orangewhite/styles.php
+++ b/theme/orangewhite/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/theme/orangewhitepda/styles.php b/theme/orangewhitepda/styles.php
index a941dadc6d..1f4e47d0ca 100644
--- a/theme/orangewhitepda/styles.php
+++ b/theme/orangewhitepda/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
\ No newline at end of file
diff --git a/theme/preview.php b/theme/preview.php
deleted file mode 100644
index 30fb709f9e..0000000000
--- a/theme/preview.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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/>.
-
-/**
- * This page alows you to preview an arbitrary theme before selecting it.
- */
-
-require_once("../config.php");
-
-$preview = optional_param('preview','standard',PARAM_FILE); // which theme to show
-
-if (!file_exists($CFG->themedir .'/'. $preview)) {
-    $preview = 'standard';
-}
-
-$PAGE->set_url(new moodle_url($CFG->wwwroot.'/theme/preview.php', array('preview'=>$preview)));
-
-require_login();
-
-require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
-
-$PAGE->force_theme($preview);
-
-$strthemes = get_string('themes');
-$strpreview = get_string('preview');
-
-$PAGE->navbar->add($strthemes);
-$PAGE->navbar->add($strpreview);
-$PAGE->set_title("$SITE->shortname: $strpreview");
-$PAGE->set_heading($SITE->fullname);
-
-echo $OUTPUT->header();
-echo $OUTPUT->box_start();
-echo $OUTPUT->heading($preview);
-echo $OUTPUT->box_end();
-echo $OUTPUT->footer();
diff --git a/theme/standard/README.html b/theme/standard/README.html
deleted file mode 100644
index c614124c51..0000000000
--- a/theme/standard/README.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<h3>STANDARD THEME</h3>
-<hr />
-
-<p>Moodle's default theme is a very neutral grey/white theme.</p>
-
-<p>This theme is always the most up-to date.</p>
-
-<p>Programmers working on Moodle should always design for this
-theme, and add new styles to this theme.</p>
-
-<p>By default, these styles are automatically loaded before any other
-themes, so that all custom themes need to do is to define their
-own styles to augment or overwrite particular standard styles.</p>
-
-<p>In this way custom themes are not "left behind" by Moodle upgrades.</p>
diff --git a/theme/standard/config.php b/theme/standard/config.php
index 1b64146664..1afa85babf 100644
--- a/theme/standard/config.php
+++ b/theme/standard/config.php
@@ -19,7 +19,10 @@
 /**
  * Configuration for Moodle's standard theme.
  *
- * There is documentation of all the things that can be configured here at
+ * DO NOT COPY THIS INTO NEW THEMES! Instead use some other theme as a base
+ * for your experiments.
+ *
+ * Options related to theme customisations can be found at
  * http://phpdocs.moodle.org/HEAD/moodlecore/theme_config.html
  *
  * For an overview of how Moodle themes work, Please see
@@ -30,83 +33,113 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$THEME->sheets = array('styles_layout', 'styles_fonts', 'styles_color');
-
-$THEME->parent = null;
-$THEME->parentsheets = false;
 
-$THEME->standardsheets = true;
-$THEME->pluginsheets = array('mod', 'block', 'format', 'gradereport');
+$THEME->parents = array();
 
-$THEME->metainclude = false;
-$THEME->parentmetainclude = false;
-$THEME->standardmetainclude = true;
+// TODO: All old styles are now moved into this standard theme because
+//       we need to go through all these and fix them.
+//       This means we will gradually put these back into plugins
+//       directories
+$THEME->sheets = array('styles_layout', 'styles_fonts', 'styles_color', 'styles_moz',
+    'block_blog_tags',
+    'block_calendar_month',
+    'block_calendar_upcoming',
+    'block_course_summary',
+    'block_login',
+    'block_news_items',
+    'block_quiz_results',
+    'block_rss_client',
+    'block_search_forums',
+    'block_tags',
+    'blog_tags',
+    'gradebook',
+    'mod_assignment',
+    'mod_chat',
+    'mod_choice',
+    'mod_data',
+    'mod_feedback',
+    'mod_folder',
+    'mod_forum',
+    'mod_glossary',
+    'mod_lesson',
+    'mod_page',
+    'mod_quiz',
+    'mod_resource',
+    'mod_scorm',
+    'mod_survey',
+    'mod_wiki',
+);
 
-$THEME->custompix = false;
+$THEME->editor_sheets = array('styles_tinymce');
 
 $THEME->layouts = array(
-    // Most pages. Put this first, so if we encounter an unknown page type, this is used.
+    // Most pages - if we encounter an unknown or a missing page type, this one is used.
     'normal' => array(
-        'layout' => 'layout.php',
+        'theme' => 'standard',
+        'file' => 'normal.php',
+        'regions' => array('side-pre', 'side-post'),
+        'defaultregion' => 'side-post'
+    ),
+    // Course page
+    'course' => array(
+        'theme' => 'standard',
+        'file' => 'normal.php',
         'regions' => array('side-pre', 'side-post'),
         'defaultregion' => 'side-post'
     ),
     // The site home page.
     'home' => array(
-        'layout' => 'layout-home.php',
+        'theme' => 'standard',
+        'file' => 'home.php',
         'regions' => array('side-pre', 'side-post'),
         'defaultregion' => 'side-post'
     ),
+    // Server administration scripts.
+    'admin' => array(
+        'theme' => 'standard',
+        'file' => 'normal.php',
+        'regions' => array('side-pre'),
+        'defaultregion' => 'side-pre'
+    ),
+    // My moodle page
+    'my' => array(
+        'theme' => 'standard',
+        'file' => 'normal.php',
+        'regions' => array('side-pre', 'side-post'),
+        'defaultregion' => 'side-post'
+    ),
+
     // Settings form pages, like course of module settings.
     'form' => array(
-        'layout' => 'layout.php',
+        'theme' => 'standard',
+        'file' => 'normal.php',
         'regions' => array(),
     ),
-    // Pages that appear in pop-up windows.
+    // Pages that appear in pop-up windows - no navigation, no blocks, no header.
     'popup' => array(
-        'layout' => 'layout-popup.php',
+        'theme' => 'standard',
+        'file' => 'minimal.php',
         'regions' => array(),
     ),
-    // Legacy frameset pages
-    'topframe' => array(
-        'layout' => 'layout-topframe.php',
+    // No blocks and minimal footer - used for legacy frame layouts only!
+    'frametop' => array(
+        'theme' => 'standard',
+        'file' => 'frametop.php',
+        'regions' => array(),
+    ),
+    // Embeded pages, like iframe embeded in moodleform
+    'embedded' => array(
+        'theme' => 'standard',
+        'file' => 'embedded.php',
         'regions' => array(),
     ),
     // Used during upgrade and install, and for the 'This site is undergoing maintenance' message.
     // This must not have any blocks, and it is good idea if it does not have links to
-    // other places - for example there should not be a home link in the footer..
+    // other places - for example there should not be a home link in the footer...
     'maintenance' => array(
-        'layout' => 'layout-popup.php',
+        'theme' => 'standard',
+        'file' => 'minimal.php',
         'regions' => array(),
     ),
-    // Embeded pages, like iframe embeded in moodleform
-    'embedded' => array(
-        'layout' => 'layout-embedded.php',
-        'regions' => array(),
-    )
 );
 
-$THEME->resource_mp3player_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'font=Arial&fontColour=3333FF&buffer=10&waitForPlay=no&autoPlay=yes';
-$THEME->filter_mediaplugin_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'waitForPlay=yes';
-
-//$THEME->rarrow = '&#x25BA;' //OR '&rarr;';
-//$THEME->larrow = '&#x25C4;' //OR '&larr;';
-//$CFG->block_search_button = link_arrow_right(get_string('search'), $url='', $accesshide=true);
-
-$THEME->navmenuwidth = 50;
-// You can use this to control the cutoff point for strings
-// in the navmenus (list of activities in popup menu etc)
-// Default is 50 characters wide.
-
-$THEME->makenavmenulist = false;
-// By setting this to true, then you will have access to a
-// new variable in your header.html and footer.html called
-// $navmenulist ... this contains a simple XHTML menu of
-// all activities in the current course, mostly useful for
-// creating popup navigation menus and so on.
diff --git a/theme/standard/footer.html b/theme/standard/footer.html
deleted file mode 100644
index eedcbdeca2..0000000000
--- a/theme/standard/footer.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-    echo $OUTPUT->container_end(); // content container
-
-    echo $OUTPUT->container_start('footer');
-
-    echo '<p class="helplink">';
-    echo page_doc_link(get_string('moodledocslink'));
-    echo '</p>';
-
-
-    if ($navigation and false) { ?>
-    <div class="navbar clearfix">
-        <div class="breadcrumb"><?php print_navigation($navigation); ?></div>
-        <div class="menu"><?php echo $menu; ?></div>
-    </div>
-<?php }
-
-    echo $loggedinas;
-    echo $homelink;
-
-    if (!empty($performanceinfo)) {
-        echo $performanceinfo;
-    }
-
-    if (debugging()) { ?>
-        <div class="validators"><ul>
-          <li><a href="http://validator.w3.org/check?verbose=1&amp;ss=1&amp;uri=<?php echo urlencode(qualified_me()) ?>">Validate HTML</a></li>
-          <li><a href="http://www.contentquality.com/mynewtester/cynthia.exe?rptmode=-1&amp;url1=<?php echo urlencode(qualified_me()) ?>">Section 508 Check</a></li>
-          <li><a href="http://www.contentquality.com/mynewtester/cynthia.exe?rptmode=0&amp;warnp2n3e=1&amp;url1=<?php echo urlencode(qualified_me()) ?>">WCAG 1 (2,3) Check</a></li>
-        </ul></div>
-<?php }
-
-    echo $OUTPUT->container_end();
-?>
-
-</div>
-</body>
-</html>
diff --git a/theme/standard/gradient.jpg b/theme/standard/gradient.jpg
deleted file mode 100755
index e389b3c6199b6e73fec8c0596040991d48ed37a2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 354
zcmex=<NpH&0WUXCHwH!~28I+MWcYuZ!I^=b6$F4JI~O|}I~NZpJ3A*2A2&A-H#eUk
z4;TpY2?z=b3h;@Fii?Yi%FD^g$t%MF$Ph*j4h}wEK4~E#X*qEbaXGjov5fx*7z8;O
z0vI%y83h@b1R0qH8UG()kYHeBU}j`M28_%s93UA1Oc^0zL7<E%BO|H~1_qE(B7*3m
z4F7L2@BmF`5@Z%+uxEJ5&6vS-fwf_S#ttdQ1wdr<f~_F~h<L6uJ&56MEC{~IQs(ex
S!Mqh^jvUA?g0SuX-vj^?@iqwn

diff --git a/theme/standard/header.html b/theme/standard/header.html
deleted file mode 100644
index 86dac6328d..0000000000
--- a/theme/standard/header.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html<?php echo $direction ?>>
-<head>
-    <?php echo $meta ?>
-    <meta name="keywords" content="moodle, <?php echo $title ?> " />
-    <title><?php echo $title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
-    <?php include("$CFG->javascript"); ?>
-</head>
-
-<body<?php
-    echo " $bodytags";
-    if ($focus) {
-        echo " onload=\"setfocus()\"";
-    }
-    ?>>
-
-<div id="page">
-
-<?php //Accessibility: 'headermain' is now H1, see theme/standard/styles_layout.css: .headermain
-      if ($home) {  // This is what gets printed on the home page only
-?>
-    <?php echo $OUTPUT->container_start('clearfix header-home'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } else if ($heading) {  // This is what gets printed on any other page with a heading
-?>
-    <?php echo $OUTPUT->container_start('clearfix header'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } ?>
-<?php //Accessibility: breadcrumb trail/navbar now a DIV, not a table.
-      if ($navigation) { // This is the navigation bar with breadcrumbs  ?>
-    <div class="navbar clearfix">
-        <div class="breadcrumb"><?php print_navigation($navigation); ?></div>
-        <div class="navbutton"><?php echo $button; ?></div>
-    </div>
-<?php } else if ($heading) { // If no navigation, but a heading, then print a line
-?>
-        <hr />
-<?php } ?>
-    <!-- END OF HEADER -->
-    <?php echo $OUTPUT->container_start('content'); ?>
diff --git a/theme/standard/layout-popup.php b/theme/standard/layout/embedded.php
similarity index 85%
rename from theme/standard/layout-popup.php
rename to theme/standard/layout/embedded.php
index 8eaf1d9be3..94cde55734 100644
--- a/theme/standard/layout-popup.php
+++ b/theme/standard/layout/embedded.php
@@ -2,7 +2,7 @@
 <html <?php echo $OUTPUT->htmlattributes() ?>>
 <head>
     <title><?php echo $PAGE->title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
     <?php echo $OUTPUT->standard_head_html() ?>
 </head>
 <body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
@@ -28,12 +28,11 @@
 <!-- END OF HEADER -->
 
     <div id="content" class="clearfix">
-        [MAIN CONTENT GOES HERE]
+        <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
     </div>
 
 <!-- START OF FOOTER -->
     <div id="footer" class="clearfix">
-        <?php echo $OUTPUT->standard_footer_html() ?>
     </div>
 </div>
 <?php echo $OUTPUT->standard_end_of_body_html() ?>
diff --git a/theme/standard/layout-topframe.php b/theme/standard/layout/frametop.php
similarity index 85%
rename from theme/standard/layout-topframe.php
rename to theme/standard/layout/frametop.php
index 8eaf1d9be3..94cde55734 100644
--- a/theme/standard/layout-topframe.php
+++ b/theme/standard/layout/frametop.php
@@ -2,7 +2,7 @@
 <html <?php echo $OUTPUT->htmlattributes() ?>>
 <head>
     <title><?php echo $PAGE->title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
     <?php echo $OUTPUT->standard_head_html() ?>
 </head>
 <body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
@@ -28,12 +28,11 @@
 <!-- END OF HEADER -->
 
     <div id="content" class="clearfix">
-        [MAIN CONTENT GOES HERE]
+        <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
     </div>
 
 <!-- START OF FOOTER -->
     <div id="footer" class="clearfix">
-        <?php echo $OUTPUT->standard_footer_html() ?>
     </div>
 </div>
 <?php echo $OUTPUT->standard_end_of_body_html() ?>
diff --git a/theme/standard/layout-home.php b/theme/standard/layout/home.php
similarity index 90%
rename from theme/standard/layout-home.php
rename to theme/standard/layout/home.php
index eef0391605..fd5ceb9f7b 100644
--- a/theme/standard/layout-home.php
+++ b/theme/standard/layout/home.php
@@ -1,10 +1,10 @@
 <?php echo $OUTPUT->doctype() ?>
 <html <?php echo $OUTPUT->htmlattributes() ?>>
 <head>
-    <?php echo $OUTPUT->standard_head_html() ?>
     <title><?php echo $PAGE->title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
     <meta name="description" content="<?php echo strip_tags(format_text($SITE->summary, FORMAT_HTML)) ?>" />
+    <?php echo $OUTPUT->standard_head_html() ?>
 </head>
 <body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
 <?php echo $OUTPUT->standard_top_of_body_html() ?>
@@ -14,10 +14,9 @@
     <div id="header-home" class="clearfix">
         <h1 class="headermain"><?php echo $PAGE->heading ?></h1>
         <div class="headermenu"><?php
+        echo $OUTPUT->login_info();
         if ($PAGE->headingmenu) {
             echo $PAGE->headingmenu;
-        } else {
-            echo $OUTPUT->login_info();
         }
         ?></div>
     </div>
@@ -35,7 +34,7 @@
             </td>
             <?php } ?>
             <td id="content">
-                [MAIN CONTENT GOES HERE]
+                <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
             </td>
             <?php if ($PAGE->blocks->region_has_content('side-post', $OUTPUT)) { ?>
             <td id="region-side-post" class="block-region">
diff --git a/theme/standard/layout/minimal.php b/theme/standard/layout/minimal.php
new file mode 100644
index 0000000000..309fd9b8e9
--- /dev/null
+++ b/theme/standard/layout/minimal.php
@@ -0,0 +1,33 @@
+<?php echo $OUTPUT->doctype() ?>
+<html <?php echo $OUTPUT->htmlattributes() ?>>
+<head>
+    <title><?php echo $PAGE->title ?></title>
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
+    <?php echo $OUTPUT->standard_head_html() ?>
+</head>
+<body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
+<?php echo $OUTPUT->standard_top_of_body_html() ?>
+
+<div id="page">
+
+<?php if ($PAGE->heading) { ?>
+    <div id="header" class="clearfix">
+        <h1 class="headermain"><?php echo $PAGE->heading ?></h1>
+        <div class="headermenu"><?php echo $PAGE->headingmenu ?></div>
+    </div>
+    <hr />
+<?php } ?>
+<!-- END OF HEADER -->
+
+    <div id="content" class="clearfix">
+        <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
+    </div>
+
+<!-- START OF FOOTER -->
+    <div id="footer" class="clearfix">
+        <?php echo $OUTPUT->standard_footer_html() ?>
+    </div>
+</div>
+<?php echo $OUTPUT->standard_end_of_body_html() ?>
+</body>
+</html>
\ No newline at end of file
diff --git a/theme/standard/layout.php b/theme/standard/layout/normal.php
similarity index 93%
rename from theme/standard/layout.php
rename to theme/standard/layout/normal.php
index c379ee32bc..c00eeab82f 100644
--- a/theme/standard/layout.php
+++ b/theme/standard/layout/normal.php
@@ -2,7 +2,7 @@
 <html <?php echo $OUTPUT->htmlattributes() ?>>
 <head>
     <title><?php echo $PAGE->title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
+    <link rel="shortcut icon" href="<?php echo $OUTPUT->old_icon_url('favicon', 'theme')?>" />
     <?php echo $OUTPUT->standard_head_html() ?>
 </head>
 <body id="<?php echo $PAGE->pagetype ?>" class="<?php echo $PAGE->bodyclasses ?>">
@@ -38,7 +38,7 @@
             </td>
             <?php } ?>
             <td id="content">
-                [MAIN CONTENT GOES HERE]
+                <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
             </td>
             <?php if ($PAGE->blocks->region_has_content('side-post', $OUTPUT)) { ?>
             <td id="region-side-post" class="block-region">
diff --git a/theme/standard/meta.php b/theme/standard/meta.php
deleted file mode 100644
index a333f1998b..0000000000
--- a/theme/standard/meta.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--[if IE 7]>
-    <link rel="stylesheet" type="text/css" href="<?php echo $CFG->httpsthemewww ?>/standard/styles_ie7.css" />
-<![endif]-->
-<!--[if IE 6]>
-    <link rel="stylesheet" type="text/css" href="<?php echo $CFG->httpsthemewww ?>/standard/styles_ie6.css" />
-<![endif]-->
diff --git a/theme/standardblue/favicon.ico b/theme/standard/pix/favicon.ico
similarity index 100%
rename from theme/standardblue/favicon.ico
rename to theme/standard/pix/favicon.ico
diff --git a/theme/standard/gradient_vertical.jpg b/theme/standard/pix/gradient_vertical.jpg
similarity index 100%
rename from theme/standard/gradient_vertical.jpg
rename to theme/standard/pix/gradient_vertical.jpg
diff --git a/theme/standard/screenshot.jpg b/theme/standard/pix/screenshot.jpg
similarity index 100%
rename from theme/standard/screenshot.jpg
rename to theme/standard/pix/screenshot.jpg
diff --git a/theme/standard/shadow_corners.png b/theme/standard/pix/shadow_corners.png
similarity index 100%
rename from theme/standard/shadow_corners.png
rename to theme/standard/pix/shadow_corners.png
diff --git a/theme/standard/shadow_left_right.png b/theme/standard/pix/shadow_left_right.png
similarity index 100%
rename from theme/standard/shadow_left_right.png
rename to theme/standard/pix/shadow_left_right.png
diff --git a/theme/standard/shadow_top_bottom.png b/theme/standard/pix/shadow_top_bottom.png
similarity index 100%
rename from theme/standard/shadow_top_bottom.png
rename to theme/standard/pix/shadow_top_bottom.png
diff --git a/theme/standard/rtl.css b/theme/standard/rtl.css
deleted file mode 100755
index a143847eb5..0000000000
--- a/theme/standard/rtl.css
+++ /dev/null
@@ -1,643 +0,0 @@
-/*******************************************************************
- rtl.css
-
- This CSS file contains all layout definitions that are required for
- right-to-left languages. It overrides definitions in other fils to
- move right-floating blocks to the left, align text to the right,
- swap left and right margins, etc.
-
- *******************************************************************/
-
-body, td, li, div {
-    direction: rtl;
-}
-
-/* required for chat windows */
-
-.ltr-input {
-    direction: ltr;
-}
-
-/* for input that require LTR, e.g. filenames or URLs */
-
-.headermain, h1.headermain {
-    float: right;
-}
-
-.headermenu {
-    float: left;
-    text-align: left;
-}
-
-.navbar .breadcrumb {
-    float: right;
-}
-
-.breadcrumb {
-    padding-left: 0px;
-    padding-right: 3px;
-}
-
-.navbar .navbutton, .navbar .menu {
-    float: left;
-}
-
-.navbar .navbutton {
-    padding-left: 3px;
-    padding-right: 0px;
-}
-
-/* login window */
-
-.loginbox.twocolumns .signuppanel {
-    float: left;
-}
-
-.loginbox.twocolumns .loginpanel {
-    float: right;
-}
-
-.loginbox .loginform .form-label {
-    float: right;
-    text-align: left;
-}
-
-.loginbox .loginform .form-input {
-    float: left;
-}
-
-.loginbox .loginform {
-    text-align: right;
-}
-
-.loginbox .signuppanel .subcontent {
-    text-align: right;
-}
-
-.categorylist .category.number {
-	text-align: left;
-}
-
-.calendar-controls .previous, .calendar-controls .current, .calendar-controls .next {
-    float: right;
-}
-
-.coursebox .summary {
-    float: left;
-    text-align: right;
-}
-
-.coursebox .info {
-    float: right;
-    text-align: right;
-}
-
-.categorylist .category.number {
-    text-align:left;
-}
-
-.calendar-controls .previous {
-    text-align: right;
-}
-
-.calendar-controls .next {
-    text-align: left;
-}
-
-.reportlink {
-    text-align: left;
-}
-
-form.mform fieldset legend {
-    margin-left: 0px;
-    margin-right: 0.5em;
-}
-
-form.mform div.felement, form.mform fieldset.felement {
-    margin: 5px 10pt 0pt 0px;
-}
-
-form.mform .fitemtitle {
-    margin: 5px 10pt 0pt 0px;
-}
-
-.advancedbutton {
-    text-align: left;
-}
-
-form.mform .fdescription.required {
-    text-align: left;
-}
-
-/* language selectors */
-
-#chooselang_jump {
-    direction: ltr;
-}
-
-/* on firefox the main layout-table might be pushed to the right by editing buttons **** */
-
-#layout-table {
-	clear: both;
-}
-
-/* admin > appearance > themes > theme settings */
-
-#adminsettings .form-label {
-	float: right;
-	text-align: left;
-}
-
-#adminsettings .form-setting {
-	text-align: right;
-	margin-right: 13em;
-	margin-left: 0px;
-}
-
-#adminsettings .form-description {
-	margin: 0.5em 13em 0em 0pt;
-	text-align: right;
-}
-
-#id_lang {
-    direction: ltr;
-}
-
-/* admin > lang > language pack selection */
-
-select#pack {
-    direction: ltr;
-}
-
-select#uninstalllang {
-    direction: ltr;
-}
-
-/* in forums, fix top and bottom navigation bars' buttons */
-li form .invisiblefieldset {
-	display: inline;
-}
-
-.mod-forum .indent {
-    margin-right: 30px;
-    margin-left: 0px;
-}
-
-.glossarypost {
-    text-align: right;
-}
-
-.glossarypost .entryheader {
-    text-align: right;
-}
-
-h1, h2, h3, h4 {
-    text-align: right;
-    padding-left: 0px;
-    padding-right: 5px;
-}
-
-/* lessons */
-
-.mod-lesson .invisiblefieldset.fieldsetfix tr {
-    text-align: right;
-}
-
-.mod-lesson .contents {
-    text-align: right;
-}
-
-.sideblock .header .hide-show {
-    float: left;
-}
-
-.sideblock .content h3, .sideblock .content h2 {
-    text-align: right;
-}
-
-.sideblock .footer {
-    text-align: right;
-}
-
-.mod-lesson .skip {
-    left: 10em;
-    top: -1000em;
-}
-
-/* blocks */
-
-h1.main, h2.main, h3.main, h4.main, h5.main, h6.main {
-    text-align: right;
-}
-
-.entrylowersection .icons, .entrylowersection .ratings {
-    text-align: left;
-    padding-left: 5px;
-    padding-right: 0px;
-}
-
-.block_calendar_upcoming .event .date {
-    text-align: left;
-    direction: ltr;
-}
-
-.block_admin_tree .admintree .depth1 {
-	padding-right:16px;
-}
-
-.block_admin_tree .admintree .depth2 {
-	padding-right:32px;
-}
-
-.block_admin_tree .admintree .depth3 {
-	padding-right:48px;
-}
-
-.block_admin_tree .admintree .depth4 {
-	padding-right:64px;
-}
-
-.block_admin_tree .admintree {
-    text-align: right;
-}
-
-/* online users block */
-.sideblock img.userpicture {
-  margin-right:inherit;
-  margin-left:4px;
-}
-
-.block_online_users .listentry div.user,
-.block_messages .listentry div.user {
-  float:right;
-}
-
-body#admin-blocks table.generaltable th.c0, body#admin-blocks table.generaltable td.c0, body#admin-filters table.generaltable th.c0, body#admin-filters table.generaltable td.c0, body#admin-modules table.generaltable th.c0, body#admin-modules table.generaltable td.c0, body#admin-auth table.generaltable th.c0, body#admin-auth table.generaltable td.c0 {
-    text-align: right;
-}
-
-#mod-chat-gui_header_js-jsupdate
-.chat-event,
-#mod-chat-gui_header_js-jsupdate
-.fdate_time_selector {
-    direction: ltr;
-}
-
-.chat-event .text, .chat-message .text {
-    text-align: right;
-}
-
-/* participants */
-
-body#user-index table#participants td, body#user-index table#participants th {
-    text-align: right;
-}
-
-/* Admin > Security */
-
-#adminsettings label {
-    text-align: left;
-}
-
-#adminsettings select, #adminsettings input {
-    margin: 0pt 5pt 0pt 5pt;
-}
-
-#adminsettings .description {
-    margin: 0pt 160px 0pt 1em;
-}
-
-#adminsettings .form-group {
-    float: right;
-}
-
-/* Courses backup */
-
-#admin-backup_sche_hour .form-group {
-    direction: ltr;
-    float: right;
-}
-
-/* backup_sche_hour */
-
-form.mform div.felement, form.mform fieldset.felement {
-    float: right;
-    text-align: right;
-    margin-right: 10px;
-	margin-left: 0px;
-}
-
-.que .info {
-    float: right;
-}
-
-.que .prompt {
-    float: right;
-}
-
-.que {
-    text-align: right;
-}
-
-.invisiblefieldset {
-	display: block;
-}
-
-body#mod-quiz-report table#attempts .header {
-    text-align: right;
-}
-
-#mod-quiz-mod #reviewoptionshdr fieldset.fgroup span {
-	clear: right;
-	float: right;
-}
-
-#mod-quiz-mod #reviewoptionshdr .fitemtitle {
-    text-align: right;
-}
-
-#mod-quiz-edit div.sideblock{
-    float:left;
-}
-#mod-quiz-edit div.quizcontents {
-    clear:none;
-}
-#mod-quiz-edit div.quizpage span.pagetitle{
-    float:right;
-}
-#mod-quiz-edit div.question div.qnum{
-    float:right;
-    padding-right:0;
-    padding-left:0.3em;
-}
-
-#mod-quiz-edit div.question div.content div.points,
-        #mod-quiz-edit div.question div.content div.qorder{
-    left:50px;
-    right:auto;
-
-}
-#mod-quiz-edit div.question div.content div.questioncontrols{
-    right:auto;
-    left:0.3em;
-}
-#mod-quiz-edit div.question div.content div.questioncontrols{
-    text-align:left;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols .moveselectedonpage{
-    clear:left;
-    float:left;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols .addnewpagesafterselected,#mod-quiz-edit .repaginatecommand{
-    float:left;
-    clear:left;
-    padding-right:auto;
-    padding-left:1em;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols .deleteselected{
-    float:left;
-    margin-right:auto;
-    margin-left:1em;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols{
-    padding-right:auto;
-    padding-left:1em;
-}
-#mod-quiz-edit div.reorder .reordercontrols .moveselectedonpage{
-    text-align:left;
-}
-#mod-quiz-edit div.question div.qnum{
-    text-align:left;
-}
-#mod-quiz-edit div.reorder div.question div.qnum{
-    text-align:left;
-}
-
-
-
-#mod-quiz-edit .editq div.question div.content .randomquestioncategory a{
-    float:right;
-}
-#mod-quiz-edit div.editq div.question div.content .singlequestion a .questionname,
-#mod-quiz-edit div.editq div.question div.content .singlequestion a .questiontext{
-    float:right;
-}
-#mod-quiz-edit div.question div.content .questiontype{
-    clear:right;
-    float:right;
-}
-#mod-quiz-edit .editq div.questioncontentcontainer  div.singlequestion img{
-    float:right;
-    padding-left:0.3em;
-}
-#mod-quiz-edit .editq div.question div.content .questionpreview{
-    float:right;
-}
-#mod-quiz-edit div.quizpage .pagecontent{
-    float:right;
-    margin-left:auto;
-    margin-right:0.3em;
-
-    border-left:none;
-    -webkit-border-radius:0.6em;
-    border-radius:0.6em;
-    -moz-border-radius:0.6em;
-
-    margin-right:0.3em;
-    border-right:solid #777 thin;
-    -webkit-border-radius-bottomright:0;
-    -webkit-border-radius-topright:0;
-    border-radius-bottomright:0;
-    border-radius-topright:0;
-    -moz-border-radius-bottomright:0;
-    -moz-border-radius-topright:0;
-}
-#mod-quiz-edit div.editq div.question div.content{
-    float:right;
-    -webkit-border-radius:0.6em;
-    border-radius:0.6em;
-    -moz-border-radius:0.6em;
-    -webkit-border-radius-bottomright:0;
-    -webkit-border-radius-topright:0;
-    border-radius-bottomright:0;
-    border-radius-topright:0;
-    -moz-border-radius-bottomright:0;
-    -moz-border-radius-topright:0;
-
-}
-
-#mod-quiz-edit .reorder div.question div.content{
-    float:right;
-    -webkit-border-radius:0.3em;
-    border-radius:0.3em;
-    -moz-border-radius:0.3em;
-    -webkit-border-radius-bottomright:0;
-    -webkit-border-radius-topright:0;
-    border-radius-bottomright:0;
-    border-radius-topright:0;
-    -moz-border-radius-bottomright:0;
-    -moz-border-radius-topright:0;
-}
-#mod-quiz-edit div.quizpage .pagecontent .pagestatus{
-    -webkit-border-radius:0.3em;
-    border-radius:0.3em;
-    -moz-border-radius:0.3em;
-    -webkit-border-radius-bottomright:0;
-    -webkit-border-radius-topright:0;
-    border-radius-bottomright:0;
-    border-radius-topright:0;
-    -moz-border-radius-bottomright:0;
-    -moz-border-radius-topright:0;
-}
-#mod-quiz-edit .pagecontrols{
-    margin-left:auto;
-    margin-right:0.5em;
-}
-#mod-quiz-edit .pagecontrols .singlebutton{
-    float:right;
-}
-#mod-quiz-edit div.quizpage .pagecontent form.randomquestionform{
-    padding-right:1em;
-}
-#mod-quiz-edit div.question{
-    clear:right;
-}
-
-#mod-quiz-edit h2.main{
-    padding-left:1em;
-    padding-right:inherit;
-}
-
-#mod-quiz-edit .quizpagedelete{
-    right:auto;
-    left:0.2em;
-}
-
-
-/* survey */
-#surveyform th {
-  text-align: right;
-}
-
-.logtable th {
-    text-align: right;
-}
-
-form.mform .fitemtitle {
-    float: right;
-    text-align: left;
-    margin-right: 10px;
-	margin-left: 0px;
-}
-
-.course-view .section td.right {
-    border-left-width: 1px;
-    border-left-style: solid;
-    border-right-width: 0px;
-    border-right-style: none;
-}
-
-.form-setting .form-time {
-    direction: ltr;
-	float:right;
-}
-
-/* ========================
-	for tabs support
-   ======================== */
-
-.tabrow0 a span {
-  background: transparent url(pix/tab/right.gif) no-repeat right top !important;
-}
-
-.tabrow0 a {
-  background: transparent url(pix/tab/left.gif) no-repeat left top !important;
-}
-
-.tabrow0 a:hover {
-  background-image: transparent url(pix/tab/left_hover.gif) no-repeat left top !important;
-}
-
-.tabrow0 a:hover span {
-  background-image: transparent url(pix/tab/right_hover.gif) no-repeat right top !important;
-}
-
-.tabrow1 li a {
-  background: none !important;
-}
-
-.tabrow0 a span {
-  padding-left: 0px !important;
-  padding-right: 14px !important;
-  #padding-left: 14px !important;   /* IE only. The # hides from firefox */
-  #padding-right: 0px !important;   /* IE only. The # hides from firefox */
-}
-
-* html body .tabrow0 a {            /* IE6 only. Exploit IE's "star html selector bug" to apply to IE6 ONLY */
-  #display: inline-block !important;
-  #padding: 8px 0 0 13px !important;
-}
-
-.tabrow0 div,
-.tabrow0 ul {                       /* IE7 only. The # hides from firefox. The following rule will override this for IE6 */
-  #top: 2.6em !important;
-}
-
-* html body .tabrow0 div,
-* html body .tabrow0 ul {           /* IE6 only. Exploit IE's "star html selector bug" to apply to IE6 ONLY */
-  top: 4.2em !important;
-}
-
-@media all and (min-width: 0px) {   /* Opera only, the floating # will hide this from Safari */
-    .tabrow0 a {
-        padding-right: 14px;
-        padding-left: 0;
-    }
-
-    .tabrow0 a span {
-    padding-left: 14px !important;
-    padding-right: 0 !important;
-    }
-    #
-}
-
-
-
-/* ========================
-	overrides styles_ie6
-   ======================== */
-
-FORM.mform INPUT {
-    margin-left: 5px !important;
-    margin-right: -5px !important;
-}
-
-/* ========================
-	for htmlarea editor
-   ======================== */
-
-.htmlarea {
-    direction: rtl;
-}
-
-.htmlarea * select {
-	max-width: 100px;
-}
-
-.navigation option {
-  text-align:right;
-}
-
-#navmenupopup option,
-#navmenufooterpopup option {
-  padding: 2px 20px 2px 5px;
-  background-position: center right;
-}
-
-.grade-report-grader table#user-grades  th.user {
-  text-align:right;
-}
diff --git a/blocks/blog_tags/styles.php b/theme/standard/style/block_blog_tags.css
similarity index 100%
rename from blocks/blog_tags/styles.php
rename to theme/standard/style/block_blog_tags.css
diff --git a/theme/standard/style/block_calendar_month.css b/theme/standard/style/block_calendar_month.css
new file mode 100644
index 0000000000..9ae6d96e69
--- /dev/null
+++ b/theme/standard/style/block_calendar_month.css
@@ -0,0 +1,23 @@
+.block_calendar_month .cal_popup_caption,
+.block_calendar_month .cal_popup_fg div {
+    font-size: 0.85em !important;
+}
+
+.block_calendar_month .filters {
+    font-size:0.75em;
+    padding: 5px;
+}
+
+.block_calendar_month .filters table {
+    border-collapse:separate;
+    border-spacing: 2px;
+    padding: 2px;
+}
+
+.block_calendar_month .event_global,
+.block_calendar_month .event_course,
+.block_calendar_month .event_group,
+.block_calendar_month .event_user {
+    border-width: 2px;
+    border-style: solid;
+}
diff --git a/blocks/calendar_upcoming/styles.php b/theme/standard/style/block_calendar_upcoming.css
similarity index 100%
rename from blocks/calendar_upcoming/styles.php
rename to theme/standard/style/block_calendar_upcoming.css
diff --git a/theme/standard/style/block_course_summary.css b/theme/standard/style/block_course_summary.css
new file mode 100644
index 0000000000..0c71c3d38f
--- /dev/null
+++ b/theme/standard/style/block_course_summary.css
@@ -0,0 +1,7 @@
+.block_course_summary .content {
+    padding:10px;
+}
+
+.block_course_summary .editbutton {
+    text-align:right;
+}
diff --git a/blocks/login/styles.php b/theme/standard/style/block_login.css
similarity index 100%
rename from blocks/login/styles.php
rename to theme/standard/style/block_login.css
diff --git a/blocks/news_items/styles.php b/theme/standard/style/block_news_items.css
similarity index 100%
rename from blocks/news_items/styles.php
rename to theme/standard/style/block_news_items.css
diff --git a/blocks/quiz_results/styles.php b/theme/standard/style/block_quiz_results.css
similarity index 99%
rename from blocks/quiz_results/styles.php
rename to theme/standard/style/block_quiz_results.css
index 0261174706..db797442e2 100644
--- a/blocks/quiz_results/styles.php
+++ b/theme/standard/style/block_quiz_results.css
@@ -23,4 +23,4 @@
     margin: 4px;
     font-weight: bold;
     font-size: 1.1em;
-}
+}
\ No newline at end of file
diff --git a/theme/standard/style/block_rss_client.css b/theme/standard/style/block_rss_client.css
new file mode 100644
index 0000000000..35298cfd20
--- /dev/null
+++ b/theme/standard/style/block_rss_client.css
@@ -0,0 +1,54 @@
+.block_rss_client .link {
+  border-top:1px solid;
+  border-top-color:#DDDDDD;
+  padding-bottom:5px;
+  font-size:0.82em;
+}
+
+.block_rss_client .description {
+  color:#555555;
+  font-size:0.78em;
+  padding-left:10px;
+  padding-bottom:8px;
+}
+
+.block_rss_client .title {
+  font-size:1.0em;
+}
+
+.block_rss_client .image {
+}
+
+.blockconfigtable #rssfeeds {
+    margin-left: auto;
+    margin-right: auto;
+    background-color: blue;
+}
+
+.blockconfigtable #rssfeeds td.actions {
+    text-align: center;
+    vertical-align: middle;
+    padding: 10px;
+}
+
+.blockconfigtable #rssfeeds td.feed {
+    vertical-align: middle;
+    padding: 5px;
+}
+
+.blockconfigtable #rssfeeds .title {
+    font-weight: bold;
+    margin-bottom: 2px;
+}
+
+.blockconfigtable #rssfeeds .url, .blockconfigtable #rssfeeds .description {
+    font-size: 0.8em;
+}
+
+.blockconfigtable #rssfeeds tr.r0 {
+  background-color: #ffffff;
+}
+
+.blockconfigtable #rssfeeds tr.r1 {
+  background-color: #f0f0f0;
+}
diff --git a/blocks/search_forums/styles.php b/theme/standard/style/block_search_forums.css
similarity index 100%
rename from blocks/search_forums/styles.php
rename to theme/standard/style/block_search_forums.css
diff --git a/theme/standard/style/block_tags.css b/theme/standard/style/block_tags.css
new file mode 100644
index 0000000000..e7344b1844
--- /dev/null
+++ b/theme/standard/style/block_tags.css
@@ -0,0 +1,116 @@
+/*
+ * CSS for course tags
+ * @author j.beedell@open.ac.uk July07
+ *
+ * Styles for block_tags.php
+ */
+
+.coursetag_form_wrapper {
+    margin: auto;
+    width: 13em;
+}
+
+.coursetag_form_positioner {
+    position: relative;
+    margin: 5px 0 0 0;
+    height: 25px;
+}
+
+.coursetag_form_input1 {
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 1;
+}
+
+.coursetag_form_input2 {
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 2;
+}
+
+.coursetag_form_input3 {
+    position: absolute;
+    top: 3px;
+    left: 12.8em;
+    display: none;
+}
+
+.coursetag_form_input1a {
+    background-color: white;
+    border: 1px solid #999;
+    width: 12em;
+    padding: 2px;
+}
+
+.coursetag_form_input2a {
+    background: transparent;
+    color: #669954;
+    border: 1px solid #999;
+    width: 12em;
+    padding: 2px;
+}
+
+.coursetag_morelink {
+    float: right;
+    font-size: 0.8em;
+    margin: -5px 5px 5px 0;
+}
+
+.coursetag_list {
+    padding-top: 4px;
+}
+
+/* Styles for coursetag_edit.php */
+
+.coursetag_edit_centered {
+    position: relative;
+    width: 600px;
+    margin: 20px auto;
+}
+
+.coursetag_edit_row {
+    margin: 5px 0 5px 0;
+    height: 30px;
+}
+
+.coursetag_edit_left {
+    position: relative;
+    float: left;
+    padding: 3px 5px;
+}
+
+.coursetag_edit_right {
+    position: relative;
+    float: left;
+    padding: 3px 0px;
+}
+
+.coursetag_edit_input3 {
+    position: relative;
+    left: 10.5em;
+    display: none;
+}
+
+/* Styles for coursetag_more.php */
+
+.coursetag_more_title {
+    margin: 30px 30px -25px 30px;
+}
+
+.coursetag_more_tags {
+    margin: 30px;
+}
+
+.coursetag_more_large {
+    font-size: 120%
+}
+
+.coursetag_more_small {
+    font-size: 80%
+}
+
+.coursetag_more_link {
+    font-size: 80%;
+}
diff --git a/theme/standard/style/blog_tags.css b/theme/standard/style/blog_tags.css
new file mode 100644
index 0000000000..15594fbe36
--- /dev/null
+++ b/theme/standard/style/blog_tags.css
@@ -0,0 +1,68 @@
+.block_blog_tags .s20 {
+  font-size: 1.5em;
+  font-weight: bold;
+}
+
+.block_blog_tags .s19 {
+  font-size: 1.5em;
+}
+
+.block_blog_tags .s18 {
+  font-size: 1.4em;
+  font-weight: bold;
+}
+
+.block_blog_tags .s17 {
+  font-size: 1.4em;
+}
+
+.block_blog_tags .s16 {
+  font-size: 1.3em;
+  font-weight: bold;
+}
+
+.block_blog_tags .s15 {
+  font-size: 1.3em;
+}
+
+.block_blog_tags .s14 {
+  font-size: 1.2em;
+  font-weight: bold;
+}
+
+.block_blog_tags .s13 {
+  font-size: 1.2em;
+}
+
+.block_blog_tags .s12,
+.block_blog_tags .s11 {
+  font-size: 1.1em;
+  font-weight: bold;
+}
+
+.block_blog_tags .s10,
+.block_blog_tags .s9 {
+  font-size: 1.1em;
+}
+
+.block_blog_tags .s8,
+.block_blog_tags .s7 {
+  font-size: 1em;
+  font-weight: bold;
+}
+
+.block_blog_tags .s6,
+.block_blog_tags .s5 {
+  font-size: 1em;
+}
+
+.block_blog_tags .s4,
+.block_blog_tags .s3 {
+  font-size: 0.9em;
+  font-weight: bold;
+}
+
+.block_blog_tags .s2,
+.block_blog_tags .s1 {
+  font-size: 0.9em;
+}
diff --git a/grade/edit/tree/tree.css b/theme/standard/style/gradebook.css
similarity index 85%
rename from grade/edit/tree/tree.css
rename to theme/standard/style/gradebook.css
index 69a67be50d..10e35e7f58 100755
--- a/grade/edit/tree/tree.css
+++ b/theme/standard/style/gradebook.css
@@ -27,21 +27,21 @@
     width: 80px;
 }
 
-.child {
+grade-edit-tree .child {
     background-image: url(img/ln.gif);
 }
 
-.hidden {
+grade-edit-tree .hidden {
     display: none;
 }
-.shown {
+grade-edit-tree .shown {
 }
 
-img.iconsmall {
+grade-edit-tree img.iconsmall {
     margin-left: 4px;
 }
 
-img.icon {
+grade-edit-tree img.icon {
     margin-right: 5px;
 }
 
@@ -58,13 +58,13 @@ img.icon {
     margin-right: auto;
 }
 
-.buttons {
+grade-edit-tree .buttons {
     margin: 20px;
     text-align: center;
     width: 100%;
 }
 
-.buttons .singlebutton {
+grade-edit-tree .buttons .singlebutton {
     display: inline;
     padding: 5px;
 }
@@ -103,23 +103,23 @@ img.icon {
     background-color: #EEEEEE !important;
 }
 
-.level1 {
+grade-edit-tree .level1 {
     background-color: #f3dfd0 !important;
     width: 10px;
 }
-.level2 {
+grade-edit-tree .level2 {
     background-color: #d0dbf3 !important;
     width: 10px;
 }
-.level3 {
+grade-edit-tree .level3 {
     background-color: #d0f3d6 !important;
     width: 10px;
 }
-.level4 {
+grade-edit-tree .level4 {
     background-color: #f0f0aa !important;
     width: 10px;
 }
-.level5 {
+grade-edit-tree .level5 {
     background-color: #ebdef6 !important;
     width: 10px;
 }
diff --git a/theme/standard/style/mod_assignment.css b/theme/standard/style/mod_assignment.css
new file mode 100644
index 0000000000..05a16f3937
--- /dev/null
+++ b/theme/standard/style/mod_assignment.css
@@ -0,0 +1,202 @@
+.userpicture,
+.picture user,
+.picture teacher {
+  width:35px;
+  height: 35px;
+  vertical-align:top;
+}
+.modform {
+  text-align:center;
+}
+#wordcount {
+  text-align: right;
+}
+
+#mod-assignment-submissions .feedback .content,
+#mod-assignment-submissions .feedback .topic,
+#mod-assignment-submissions .feedback .picture
+{
+  padding: 10px;
+  border-width:1px;
+  border-style:solid;
+  border-color:#DDDDDD;
+}
+
+#mod-assignment-submissions form#options div {
+  text-align:right;
+  margin-left:auto;
+  margin-right:20px;
+}
+
+.mod-assignment .feedback .files {
+  float: right;
+  background-color: #EFEFEF;
+  padding:5px;
+}
+
+.mod-assignment .feedback .grade,
+.mod-assignment .feedback .outcome,
+.mod-assignment .feedback .finalgrade {
+  float: right;
+}
+
+.mod-assignment .feedback .disabledfeedback {
+  width: 500px;
+  height: 250px;
+}
+
+.mod-assignment .feedback .from {
+  float: left;
+}
+
+.mod-assignment .feedback .time {
+  font-size: 0.8em;
+}
+
+.mod-assignment .late {
+  color: red;
+}
+
+.mod-assignment .files img {
+  margin-right: 4px;
+}
+
+.mod-assignment .files a {
+  white-space:nowrap;
+}
+
+#mod-assignment-submissions .generaltable .r1 {
+  background-color: #FFFFFF;
+}
+
+#mod-assignment-submissions .header .commands {
+  display: inline;
+}
+
+#mod-assignment-submissions .s0 {
+  background: #FFD991;
+}
+
+#mod-assignment-submissions table.submissions td,
+#mod-assignment-submissions table.submissions th
+{
+  border-width: 1px;
+  border-style: solid;
+  border-color: #DDDDDD;
+  vertical-align: middle;
+  padding-left: 5px;
+  padding-right: 5px;
+}
+
+#mod-assignment-submissions .submissions .grade {
+  text-align: right;
+  font-weight:bold;
+}
+
+#mod-assignment-submissions .picture {
+  width: 35px;
+}
+
+#mod-assignment-submissions .fullname {
+  text-align: left;
+}
+
+#mod-assignment-submissions .timemodified,
+#mod-assignment-submissions .timemarked
+{
+  text-align: left;
+  font-size: 0.9em;
+}
+
+#mod-assignment-submissions .status {
+  text-align: center;
+}
+
+#mod-assignment-submissions .submissions .outcome,
+#mod-assignment-submissions .submissions .finalgrade {
+  text-align: right;
+}
+
+#mod-assignment-view #online .singlebutton {
+  text-align: center;
+}
+
+#mod-assignment-view #dates {
+  font-size: 0.8em;
+  margin-top: 30px;
+  margin-bottom: 30px;
+}
+
+#mod-assignment-view #dates .c0{
+  text-align:right;
+  font-weight:bold;
+}
+
+#mod-assignment-view .feedback {
+  border-width:1px;
+  border-style:solid;
+  border-color:#DDDDDD;
+  margin-top: 15px;
+  width: 80%;
+  margin-left: 10%;
+  margin-right: 10%;
+}
+
+#mod-assignment-view .feedback .topic {
+  padding: 4px;
+  border-style:solid;
+  border-width: 0px;
+  border-bottom-width: 1px;
+  border-color:#DDDDDD;
+}
+
+#mod-assignment-view .feedback .fullname {
+  font-weight: bold;
+}
+
+#mod-assignment-view .feedback .date {
+  font-size: 0.8em;
+}
+
+#mod-assignment-view .feedback .content {
+  padding: 4px;
+}
+
+#mod-assignment-view .feedback .grade {
+  text-align: right;
+  font-weight:bold;
+}
+
+#mod-assignment-view .feedback .left {
+  width: 35px;
+  padding: 4px;
+  text-align: center;
+  vertical-align: top;
+}
+
+#mod-assignment-submissions .qgprefs #optiontable {
+  text-align:right;
+  margin-left:auto;
+}
+
+#mod-assignment-submissions .fgcontrols {
+  margin-top: 1em;
+  text-align:center;
+}
+
+#mod-assignment-submissions .fgcontrols .fastgbutton{
+  margin-top: 0.5em;
+}
+
+/***
+ *** Modules: Assignment
+ ***/
+
+#mod-assignment-index .cell {
+  font-size:0.8em;
+}
+
+#wordcount {
+  font-size: 0.8em;
+}
+
diff --git a/theme/standard/style/mod_chat.css b/theme/standard/style/mod_chat.css
new file mode 100644
index 0000000000..60e82c758b
--- /dev/null
+++ b/theme/standard/style/mod_chat.css
@@ -0,0 +1,164 @@
+
+/***
+ *** Modules: Chat
+ ***/
+
+#messages-list, #users-list{list-style-type:none;padding:0;margin:0}
+#chat-header {
+    background: transparent;
+    font-size: 200%;
+    overflow: hidden;
+}
+#chat-header p {
+    display:inline;
+    font-size: 50%;
+    color: grey;
+}
+.mod-lesson .time{
+    font-weight: bold;
+}
+.mod-lesson .user{
+    color:blue;
+}
+.mod-lesson .chat-event{
+    text-align:center;
+    color:grey;
+}
+.mod-lesson .yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd {
+    background: transparent;
+}
+.mod-lesson .yui-layout-unit-top {
+    background: #FFE39D;
+}
+.mod-lesson .yui-layout-unit-right {
+    border-top: 5px solid white;
+    background: #FFD46B;
+}
+.mod-lesson .yui-layout-unit-bottom {
+    border-top: 5px solid white;
+    background: #FFCB44;
+}
+.mod-lesson .yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-unit-right {
+    background: white;
+}
+.mod-lesson .yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd {
+    border:0;
+}
+.mod-lesson .yui-skin-sam .yui-layout .yui-layout-hd {
+    border:0;
+}
+
+
+.nextchatsession {
+  text-align:center;
+}
+
+#mod-chat-gui_header_js-jsupdate {
+  margin:10px
+}
+#mod-chat-gui_header_js-jsupdate .chat-event,
+#mod-chat-gui_header_js-jsupdate .chat-message {
+  width:100%;
+  padding:0;
+  margin-top:7px
+}
+
+#mod-chat-view #chatcurrentusers .chatuserdetails {
+  vertical-align: middle;
+}
+
+#mod-chat-view #enterlink {
+  text-align: center;
+  margin-left: auto;
+  margin-right: auto;
+  width: 50%;
+}
+
+.chat-event .picture,
+.chat-message .picture {
+  width:40px;
+  vertical-align:top;
+}
+.chat-event .text,
+.chat-message .text {
+  text-align: left;
+}
+
+#mod-chat-gui_basic #participants ul {
+  margin:0px;
+  padding:0px;
+  list-style-type:none;
+}
+
+#mod-chat-gui_basic #participants ul li {
+  display:inline;
+  margin-right:10px;
+}
+
+#mod-chat-gui_basic #participants ul li .userinfo {
+  display:inline;
+}
+
+#mod-chat-gui_basic #messages dl {
+  padding:0px;
+  margin:1px;
+}
+
+#mod-chat-gui_basic #messages dd,
+#mod-chat-gui_basic #messages dt {
+  margin-left:0px;
+  margin-right:5px;
+  padding:0px;
+  display:inline;
+}
+
+body.mod-chat-gui_ajax .yui-layout-doc .yui-layout-unit .yui-layout-wrap .yui-layout-hd h2 {
+  font-size:100%;
+  padding:0px;
+  font-weight:normal;
+}
+
+/***
+ *** Modules: Chat
+ ***/
+
+#mod-chat-index .cell {
+  font-size:0.8em;
+}
+
+
+#mod-chat-gui_basic h1 {
+  font-size:1.4em;
+}
+
+#mod-chat-gui_basic #participants .idle {
+  font-size:0.6em;
+}
+
+#mod-chat-view #chatcurrentusers .chatuserdetails {
+  font-size: 0.6em;
+}
+
+/***
+ *** Modules: Chat
+ ***/
+
+#mod-chat-gui_basic .text,
+#mod-chat-gui_header_js-jsupdate .text {
+  color:#000
+}
+
+#mod-chat-gui_basic .event,
+#mod-chat-gui_basic .title,
+#mod-chat-gui_header_js-jsupdate .event,
+#mod-chat-gui_header_js-jsupdate .title {
+  color:#888
+}
+
+#mod-chat-gui_header_js-chatinput .wait {
+    background: #dddddd;
+}
+
+#mod-chat-view #chatcurrentusers .idletime {
+  color: #888888;
+}
diff --git a/theme/standard/style/mod_choice.css b/theme/standard/style/mod_choice.css
new file mode 100644
index 0000000000..90654975d5
--- /dev/null
+++ b/theme/standard/style/mod_choice.css
@@ -0,0 +1,56 @@
+.mod-choice .results {
+  border-collapse: separate;
+}
+
+.mod-choice .results .data {
+  border-width:1px;
+  border-style:solid;
+  border-color:#999;
+}
+
+.mod-choice .button {
+  text-align:center;
+}
+
+.mod-choice .attemptcell {
+  width:5px;
+  white-space: nowrap;
+}
+
+.mod-choice .anonymous,
+.mod-choice .names {
+  margin-left:auto;
+  margin-right:auto;
+}
+
+.mod-choice .downloadreport {
+  border:0px;
+  margin-left:auto;
+  margin-right:auto;
+}
+
+.mod-choice .choiceresponse {
+  width:100%;
+}
+.mod-choice .choiceresponse .picture {
+  width:10px;
+  white-space: nowrap;
+}
+
+.mod-choice .choiceresponse .fullname {
+  width:100%;
+  white-space: nowrap;
+}
+
+.mod-choice .results.data {
+  vertical-align:top;
+  white-space: nowrap;
+}
+
+
+#mod-choice-index .cell {
+  font-size:0.8em;
+}
+
+
+
diff --git a/theme/standard/style/mod_data.css b/theme/standard/style/mod_data.css
new file mode 100644
index 0000000000..2ff3cc6862
--- /dev/null
+++ b/theme/standard/style/mod_data.css
@@ -0,0 +1,63 @@
+.fieldadd,
+.sortdefault,
+.defaulttemplate {
+  text-align:center;
+}
+.datapreferences {
+  text-align:center;
+}
+
+table.presets {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+#mod-data-view #sortsearch .c0 {
+  text-align: right;
+}
+
+#mod-data-view .approve img.icon {
+  width:34px;
+  height:34px;
+}
+
+#mod-data-preset .presetmapping {
+  text-align: center;
+}
+
+#mod-data-preset .presetmapping table {
+  text-align: left;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+#mod-data-preset .overwritesettings {
+  margin-bottom: 1em;
+}
+
+.mod-data-field .c0 {
+  text-align: right;
+}
+
+.mod-data-field .fieldadd,
+.mod-data-field .sortdefault {
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+.mod-data-field .fieldadd select,
+.mod-data-field .sortdefault select {
+  margin-left: 1em;
+}
+
+.mod-data-field .fieldname {
+  width:300px;
+}
+
+.mod-data-field .fielddescription {
+  width:300px;
+}
+
+.presetcontrols form {
+  display: inline;
+}
diff --git a/theme/standard/style/mod_feedback.css b/theme/standard/style/mod_feedback.css
new file mode 100644
index 0000000000..2cfc1968d8
--- /dev/null
+++ b/theme/standard/style/mod_feedback.css
@@ -0,0 +1,9 @@
+/* styles using by feedback */
+.feedback_required_mark {
+    color: #FF0000;
+}
+
+.feedback_switchrequired img{
+}
+
+
diff --git a/theme/standard/style/mod_folder.css b/theme/standard/style/mod_folder.css
new file mode 100644
index 0000000000..e178a38fb0
--- /dev/null
+++ b/theme/standard/style/mod_folder.css
@@ -0,0 +1,10 @@
+/***
+ ***
+ *** Modules: Folder
+ ***/
+
+#mod-folder-view .foldertree {
+  width: 90%;
+  margin-left: auto;
+  margin-right: auto;
+}
diff --git a/theme/standard/style/mod_forum.css b/theme/standard/style/mod_forum.css
new file mode 100644
index 0000000000..3c652995a4
--- /dev/null
+++ b/theme/standard/style/mod_forum.css
@@ -0,0 +1,361 @@
+
+/***
+ *** Modules: Forum
+ ***/
+
+#mod-forum-subscribers .subscriberdiv,
+#mod-forum-subscribers .subscribertable {
+    width:100%;
+    background-color:#EEEEEE;
+    border:1px solid #BBBBBB;
+}
+#mod-forum-subscribers .subscriberdiv,
+#mod-forum-subscribers .subscribertable tr td {
+    vertical-align:top;
+    padding:0.2em 0.3em;
+}
+#mod-forum-subscribers .subscribertable tr td.existing {
+    width:42%;
+}
+#mod-forum-subscribers .subscribertable tr td.actions {
+    width:16%;
+    padding-top:3em;
+}
+#mod-forum-subscribers .subscribertable tr td.actions .actionbutton {
+    margin:0.3em 0;
+    padding:0.5em 0;
+    width:100%;
+}
+#mod-forum-subscribers .subscribertable tr td.potential {
+    width:42%;
+}
+
+
+#mod-forum-view .forummode {
+  text-align:center;
+}
+
+.forumheaderlist,
+.forumpost {
+  border-width:1px;
+  border-style:solid;
+  border-collapse:separate;
+}
+
+.forumpost {
+  margin-top: 15px;
+}
+
+.forumpost .topic {
+  padding: 4px;
+  border-style:solid;
+  border-width: 0px;
+  border-bottom-width: 1px;
+}
+
+.forumpost .commands {
+  padding-top: 0.5em;
+  text-align:right;
+  clear: both;
+}
+
+.forumpost .ratings {
+  padding-top: 1em;
+  text-align:right;
+}
+
+.forumpost .attachments {
+  padding: 7px;
+  text-align:right;
+}
+
+.forumpost .content {
+  padding: 4px;
+}
+
+.forumpost .footer {
+  padding-top: 0.5em;
+  text-align:right;
+}
+
+.forumpost .link {
+  padding-top: 0.5em;
+  text-align:right;
+}
+
+.forumpost .left {
+  width: 35px;
+  padding: 4px;
+  text-align: center;
+  vertical-align: top;
+}
+
+.mod-forum .indent {
+  margin-left: 30px;
+}
+
+body#user-view .forumpost,
+.course .forumpost {
+  width: 100%;
+}
+
+body#mod-forum-search .c0 {
+  text-align: right;
+}
+
+body#mod-forum-search .introcontent {
+  padding: 15px;
+}
+
+.forumolddiscuss {
+  text-align: right;
+}
+
+.forumheaderlist {
+  width: 100%;
+}
+
+.forumheaderlist td {
+  border-width:1px 0px 0px 1px;
+  border-style:solid;
+}
+
+.forumheaderlist .replies {
+  text-align: center;
+  white-space: nowrap;
+}
+
+.forumheaderlist .picture {
+  width: 35px;
+}
+
+.forumheaderlist .discussion .starter {
+  vertical-align: middle;
+}
+
+.forumheaderlist .lastpost {
+  white-space: nowrap;
+  text-align: right;
+}
+
+.forumheaderlist .discussion .author {
+  white-space: nowrap;
+}
+.forumolddiscuss {
+  text-align:right;
+}
+.forumaddnew,
+.forumnodiscuss,
+.noticeboxcontent {
+  text-align:center;
+}
+
+#mod-forum-view .forumaddnew {
+  margin-bottom: 20px;
+}
+
+#mod-forum-view .forumcontrol .groupmenu {
+  float: left;
+  text-align:left;
+  white-space: nowrap;
+}
+
+#mod-forum-view .groupmenu {
+  float: left;
+  text-align:left;
+  white-space: nowrap;
+}
+
+#mod-forum-view .forumcontrol .subscription {
+  float: right;
+  text-align:right;
+  white-space: nowrap;
+}
+
+#mod-forum-view .subscription {
+  float: right;
+  text-align:right;
+  white-space: nowrap;
+}
+
+#mod-forum-index .subscription {
+  float: right;
+  text-align:right;
+  white-space: nowrap;
+}
+
+#mod-forum-view .unread {
+  padding-left: 3px;
+  padding-right: 3px;
+}
+#mod-forum-discuss .forumpost.unread .content {
+  border-style: solid;
+  border-width: 2px;
+}
+#mod-forum-discuss .ratingsubmit {
+  text-align:center;
+  padding:10px;
+}
+#mod-forum-index .unread img,
+#mod-forum-view .unread img
+{
+  margin-left: 5px;
+}
+
+#mod-forum-discuss .discussioncontrols td {
+  width: 33%;
+  text-align:center;
+}
+
+#email .unsubscribelink {
+  margin-top:20px;
+  border-width: 0px 1px 0px 0px;
+  border-style: solid;
+  text-align:center;
+}
+
+#mod-forum-view .subscription {
+  margin: 5px 0;
+}
+
+
+
+/***
+ *** Modules: Forum
+ ***/
+
+.forumnodiscuss{
+  font-weight:bold;
+}
+.forumpost .topic .subject {
+  font-weight: bold;
+}
+.forumpost .topic .author {
+  font-size: 0.8em;
+}
+.forumpost .commands,
+.forumpost .link,
+.forumpost .footer {
+  font-size: 0.9em;
+}
+.forumheaderlist .discussion .lastpost {
+  font-size: 0.7em;
+}
+body#mod-forum-search .introcontent {
+  font-weight:bold;
+}
+body#mod-forum-index .generalbox .cell {
+  font-size: 0.80em;
+}
+
+.forumpost .edited {
+  font-style: italic;
+}
+
+
+/***
+ *** Modules: Forum
+ ***/
+
+/**
+ * Patch MDL-18971 version 3 puts the forum classes
+ * in page sequence. Also added one course class (above)
+ * for course/view.php
+ **/
+
+/** The location of these classes is unknown
+ * Commented out with patch MDL-18971 version 3
+ **/
+/*.sideblock .post .head {
+  color:#555555;
+}*/
+
+/** Unread Posts count background on
+ * mod/forum/index.php
+ **/
+#mod-forum-index .unread {
+    background: #9EBEFF;
+}
+
+/** wire frame around cells in
+ * mod/forum/view.php
+ **/
+.forumheaderlist td {
+  border-color: #FFFFFF;
+}
+
+/** Discussion column background in
+ * mod/forum/view.php
+ * The inner class is actually "topic starter"
+ **/
+.forumheaderlist .discussion .starter {
+  background:#DDDDDD;
+}
+
+/** unread column background on
+ * mod/forum/view.php
+ **/
+#mod-forum-view .unread{
+    background: #9EBEFF;
+}
+
+/** border around posts in
+ * mod/forum/view.php (forumheaderlist) and
+ * mod/forum/discuss.php (forumpost)
+ **/
+.forumheaderlist,
+.forumpost {
+  border-color:#DDDDDD;
+}
+
+/** post body color in
+ * mod/forum/discuss.php
+ **/
+.forumpost .content {
+  background: #FFFFFF;
+}
+
+/** left photo section of each post in
+ * mod/forum/discuss.php
+ **/
+.forumpost .left {
+  background:#EEEEEE;
+}
+
+/** line between header and post body in
+ * mod/forum/discuss.php
+ **/
+.forumpost .topic {
+  border-bottom-color: #EEEEEE;
+}
+
+/** header of the first post in
+ * mod/forum/discuss.php
+ **/
+.forumpost .starter {
+  background:#DDDDDD;
+}
+
+/** header of reply posts and
+ * lower corners of all posts in
+ * mod/forum/discuss.php
+ **/
+#mod-forum-discuss .forumpost {
+  background: none;
+}
+
+/** inside border of unread posts in nested format in
+ * mod/forum/discuss.php
+ **/
+#mod-forum-discuss .forumpost.unread .content {
+  border-width:2px;
+  border-color: #0046C7;
+}
+
+/** headers of unread posts in threaded format in
+ * mod/forum/discuss.php
+ **/
+#mod-forum-discuss .forumthread.unread {
+  background: #9EBEFF;
+}
+
diff --git a/theme/standard/style/mod_glossary.css b/theme/standard/style/mod_glossary.css
new file mode 100644
index 0000000000..ed5588aef9
--- /dev/null
+++ b/theme/standard/style/mod_glossary.css
@@ -0,0 +1,262 @@
+
+
+/***
+ *** Modules: Glossary
+ ***/
+
+.glossarypost .commands {
+  width: 200px;
+  white-space: nowrap;
+}
+
+#mod-glossary-comments .glossarypost,
+#mod-glossary-comment .glossarypost {
+  margin-top: 15px;
+}
+
+.entryboxheader {
+  border-width: 1px 1px 0px 1px;
+  border-style: solid;
+}
+
+.entrybox {
+  width: 100%;
+  border-width: 0px 1px 1px 1px;
+  border-style: solid;
+}
+
+.entrybox hr {
+  border-left:none;
+  border-right:none;
+}
+
+.glossarypost {
+  width: 95%;
+  border-width:1px;
+  border-style:solid;
+  border-collapse:separate;
+  margin-left:auto;
+  margin-right:auto;
+  margin-bottom: 5px;
+  text-align: left;
+}
+
+.entrylist {
+  border-width:0px;
+}
+
+.entrylowersection {
+  padding-top: 10px;
+}
+
+.entrylowersection table{
+  width: 100%;
+}
+
+.entrylowersection .aliases {
+  text-align:center;
+}
+
+.entrylowersection .icons,
+.entrylowersection .ratings {
+  text-align:right;
+  padding-right: 5px;
+}
+
+.entrylowersection .ratings {
+  padding-bottom: 2px;
+}
+
+.glossarycategoryheader {
+  width: 95%;
+  margin-left:auto;
+  margin-right:auto;
+}
+
+.glossaryformatheader {
+  width: 90%;
+}
+
+.glossarypost .entry {
+  padding: 3px;
+}
+
+.glossarypost .picture {
+  width: 35px;
+}
+
+.glossarycomment {
+  border-width:1px;
+  border-style:solid;
+  border-collapse:separate;
+  margin-bottom: 5px;
+  text-align: left;
+}
+
+.glossarycomment .entry {
+  padding: 3px;
+}
+
+.glossarycomment .picture {
+  width: 35px;
+}
+
+.glossarycomment .icons {
+  text-align: right;
+}
+
+.glossarydisplay {
+  width: 90%;
+  margin-left:auto;
+  margin-right:auto;
+  text-align:center;
+}
+
+.glossarydisplay .tabs {
+  width: 100%;
+}
+
+.glossarydisplay .separator {
+  width: 4px;
+}
+
+.glossarydisplay .tabs .selected,
+.glossarydisplay .tabs .inactive,
+.glossarydisplay .tabs .general {
+}
+
+.glossaryimportexport {
+  margin-left:auto;
+  margin-right:auto;
+  text-align:center;
+}
+
+.glossarypopup {
+  width: 95%;
+}
+
+.glossaryapproval {
+  width: 100%;
+}
+
+.mod-glossary .glossarydisplay .tabs {
+  margin-bottom: 0px;
+}
+
+.mod-glossary .glossarydisplay .tabs .side {
+  border-style: none;
+  border-width: 0px;
+  width: auto;
+}
+
+.glossaryexplain,
+.glossaryaddentry {
+  text-align: center;
+}
+
+.mod-glossary .tabrow0 {
+  padding-bottom: 5px;
+}
+
+#mod-glossary-view .glossarycontrol {
+  float: right;
+  text-align:right;
+  white-space: nowrap;
+  margin: 5px 0;
+}
+
+
+/***
+ *** Modules: Glossary
+ ***/
+
+.glossarypost .commands {
+  font-size: 0.8em;
+}
+.glossarypost .author {
+  font-size: 0.8em;
+}
+.glossarypost .time {
+  font-size: 0.8em;
+}
+.glossarycategoryheader h2,
+.glossarypost .concept h3 {
+  font-size: 1em;
+  margin: 0;
+}
+.glossarypost div.concept h3,
+.glossarypost.continuous .concept {
+  display: inline;
+}
+.glossarypost .entryheader {
+  font-weight: normal;
+  text-align: left;
+}
+.glossarycomment .author {
+  font-size: 0.8em;
+}
+.entrylowersection .aliases {
+  font-size: 0.8em;
+}
+.entrylowersection .icons,
+.entrylowersection .ratings {
+  font-size: 0.8em;
+}
+
+#mod-glossary-index .cell {
+  font-size:0.8em;
+}
+
+
+
+
+
+/***
+ *** Modules: Glossary
+ ***/
+
+.entryboxheader {
+  border-color: #BBBBBB;
+}
+
+.entrybox {
+  border-color: #BBBBBB;
+}
+
+.entry {
+}
+
+.glossarypost {
+  border-color: #DDDDDD;
+}
+
+.glossarypost .entryheader,
+.glossarypost .entryapproval,
+.glossarypost .picture,
+.glossarypost .entryattachment,
+.glossarypost .left {
+  background-color: #F0F0F0;
+}
+
+.glossarycomment {
+  border-color: #DDDDDD;
+}
+
+.glossarycomment .entryheader,
+.glossarycomment .picture,
+.glossarycomment .left {
+  background-color: #F0F0F0;
+
+}
+
+#mod-glossary-report .generalbox .teacher {
+  background: #F0F0F0;
+}
+
+.glossarycategoryheader {
+  background-color: #dddddd;
+}
+
+.glossaryformatheader {
+  background-color: #dddddd;
+}
diff --git a/mod/lesson/lesson.css b/theme/standard/style/mod_lesson.css
similarity index 91%
rename from mod/lesson/lesson.css
rename to theme/standard/style/mod_lesson.css
index d2739a27e5..e18f94a0fd 100644
--- a/mod/lesson/lesson.css
+++ b/theme/standard/style/mod_lesson.css
@@ -223,12 +223,22 @@
 }
 
 .mod-lesson .progress_bar_completed {
+    /*  Example Use of Image
+    background-image: url([[pix:mod_lesson|completed]]);
+    background-position: center;
+    background-repeat: repeat-x;
+    */
     background-color: green;
     padding: 0px;
     margin: 0px;
 }
 
 .mod-lesson .progress_bar_todo {
+    /*  Example Use of Image
+    background-image: url([[pix:mod_lesson|todo]]);
+    background-repeat: repeat-x;
+    background-position: center;
+    */
     background-color: red;
     text-align: left;
     padding: 0px;
@@ -236,6 +246,10 @@
 }
 
 .mod-lesson .progress_bar_token {
+    /*  Example Use of Image
+    background-image: url([[pix:mod_lesson|token]]);
+    background-repeat: repeat-none;
+    */
     background-color: #000000;
     height: 20px;
     width: 5px;
diff --git a/theme/standard/style/mod_page.css b/theme/standard/style/mod_page.css
new file mode 100644
index 0000000000..9c7655200c
--- /dev/null
+++ b/theme/standard/style/mod_page.css
@@ -0,0 +1,8 @@
+/***
+ *** Modules: Resource
+ ***/
+
+.mod-page .modified {
+  font-size:0.6em;
+}
+
diff --git a/theme/standard/style/mod_quiz.css b/theme/standard/style/mod_quiz.css
new file mode 100644
index 0000000000..fd2769dd92
--- /dev/null
+++ b/theme/standard/style/mod_quiz.css
@@ -0,0 +1,1206 @@
+
+/***
+ *** Modules: Quiz
+ ***/
+
+#quiznavigation .qnbutton.flagged {
+  background-image: url([[pix:i/ne_red_mark]]);
+}
+
+#mod-quiz-view .quizinfo {
+  text-align: center;
+}
+#mod-quiz-view #page .quizgradefeedback,
+#mod-quiz-view #page .quizattempt
+{
+  text-align: center;
+}
+#mod-quiz-view #page .quizattemptsummary td p {
+  margin-top: 0;
+}
+#mod-quiz-view .generalbox#feedback {
+  width:70%;
+  margin-left:auto;
+  margin-right:auto;
+  padding-bottom:15px;
+}
+#mod-quiz-view .generalbox#feedback h2 {
+  margin: 0 0;
+}
+#mod-quiz-view .generalbox#feedback .overriddennotice {
+  text-align: center;
+  font-size: 0.7em;
+}
+#mod-quiz-view .generalbox#feedback h3 {
+  text-align: left;
+}
+
+.generalbox#passwordbox { /* Should probably match .generalbox#intro above */
+  width:70%;
+  margin-left:auto;
+  margin-right:auto;
+}
+#passwordform {
+  margin: 1em 0;
+}
+#mod-quiz-attempt .submitbtns,
+#mod-quiz-review .submitbtns {
+  text-align: left;
+  margin-top: 1.5em;
+}
+#mod-quiz-summary .submitbtns {
+  margin-top: 1.5em;
+}
+#mod-quiz-summary #content {
+  text-align: center;
+}
+#mod-quiz-summary .questionflag {
+  width: 16px;
+  height: 16px;
+  vertical-align: middle;
+}
+#mod-quiz-attempt #quiz-timer,
+#mod-quiz-summary #quiz-timer {
+  display: none; /* Revealed by JavaScript if applicable */
+}
+#mod-quiz-summary #quiz-timer {
+  margin-top: 1em;
+}
+#mod-quiz-attempt #quiz-time-left {
+  font-weight: bold;
+}
+
+body#question-preview .quemodname,
+body#question-preview .controls
+{
+  text-align: center;
+}
+body#question-preview .quemodname, body#question-preview .controls {
+  text-align: center;
+}
+
+#mod-quiz-attempt #page .controls,
+#mod-quiz-summary #page .controls,
+#mod-quiz-review #page .controls {
+  text-align: center;
+  margin: 8px auto;
+}
+#mod-quiz-review .pagingbar {
+  margin: 1.5em auto;
+}
+#mod-quiz-review .pagingbar {
+  margin: 1.5em auto;
+}
+table.quizreviewsummary {
+  width: 100%;
+}
+table.quizreviewsummary tr {
+}
+table.quizreviewsummary th.cell {
+  padding: 1px 0.5em 1px 1em;
+  font-weight: bold;
+  text-align: right;
+  width: 10em;
+}
+table.quizreviewsummary td.cell {
+  padding: 1px 1em 1px 0.5em;
+  text-align: left;
+}
+
+#mod-quiz-mod #reviewoptionshdr .fitem,
+#adminquizreviewoptions .group {
+  float: left;
+  width: 33%;
+  clear: none;
+}
+#mod-quiz-mod #reviewoptionshdr .fitem {
+  width: 30%;
+  margin-left: 10px;
+}
+#mod-quiz-mod #reviewoptionshdr .fitemtitle,
+#adminquizreviewoptions .fitemtitle {
+  width: 100%;
+  font-weight: bold;
+  text-align: left;
+  height: 2.5em;
+  margin-left: 0;
+}
+#mod-quiz-mod #reviewoptionshdr fieldset.fgroup {
+  width: 100%;
+  text-align: left;
+  margin-left: 0;
+}
+#mod-quiz-mod #reviewoptionshdr fieldset.fgroup span,
+#adminquizreviewoptions span {
+  float: left;
+  clear: left;
+}
+#adminquizreviewoptions {
+  margin-bottom: 0.5em;
+}
+
+.quizquestionlistcontrols {
+  text-align: center;
+}
+
+#mod-quiz-report table#attempts,
+#mod-quiz-report div#commands,
+#mod-quiz-report table#itemanalysis
+{
+  width: 80%;
+  margin: auto;
+}
+#mod-quiz-report table.titlesleft td.c0
+{
+  font-weight: bold;
+}
+#mod-quiz-report table#attempts,
+#mod-quiz-report h2.main {
+  clear: both;
+}
+#mod-quiz-report table#attempts {
+  margin: 20px auto;
+}
+#mod-quiz-report table#attempts .header,
+#mod-quiz-report table#attempts .cell
+{
+  padding: 4px;
+}
+#mod-quiz-report table#attempts .header .commands {
+  display: inline;
+}
+#mod-quiz-report table#attempts .picture {
+  width: 40px;
+}
+#mod-quiz-report table#attempts td {
+  border-left-width: 1px;
+  border-right-width: 1px;
+  border-left-style: solid;
+  border-right-style: solid;
+  vertical-align: middle;
+}
+#mod-quiz-report table#attempts .header {
+  text-align: left;
+}
+#mod-quiz-report table#attempts .picture {
+  text-align: center !important;
+}
+#mod-quiz-report .controls {
+  text-align: center;
+}
+
+#mod-quiz-report table#itemanalysis {
+  margin: 20px auto;
+}
+#mod-quiz-report table#itemanalysis .header,
+#mod-quiz-report table#itemanalysis .cell
+{
+  padding: 4px;
+}
+#mod-quiz-report table#itemanalysis .header .commands {
+  display: inline;
+}
+#mod-quiz-report table#itemanalysis td {
+  border-width: 1px;
+  border-style: solid;
+}
+#mod-quiz-report table#itemanalysis .header {
+  text-align: left;
+}
+#mod-quiz-report table .numcol {
+  text-align: center;
+  vertical-align : middle !important;
+}
+
+#mod-quiz-report table#itemanalysis .uncorrect {
+  color: red;
+}
+
+#mod-quiz-report table#itemanalysis .correct {
+  color: blue;
+  font-weight : bold;
+}
+
+#mod-quiz-report table#itemanalysis .partialcorrect {
+  color: green !important;
+}
+
+#mod-quiz-report table#itemanalysis .qname {
+  color: green !important;
+}
+
+/* manual grading */
+#mod-quiz-grading table#grading
+{
+  width: 80%;
+  margin: auto;
+}
+
+#mod-quiz-grading table#grading
+{
+  margin: 20px auto;
+}
+
+#mod-quiz-grading table#grading .header,
+#mod-quiz-grading table#grading .cell
+{
+  padding: 4px;
+}
+
+#mod-quiz-grading table#grading .header .commands
+{
+  display: inline;
+}
+
+#mod-quiz-grading table#grading .picture
+{
+  width: 40px;
+}
+
+#mod-quiz-grading table#grading td
+{
+  border-left-width: 1px;
+  border-right-width: 1px;
+  border-left-style: solid;
+  border-right-style: solid;
+  vertical-align: bottom;
+}
+
+.mod-quiz .gradingdetails {
+  font-size: small;
+}
+.quizattemptcounts {
+  clear : left;
+  text-align: center;
+  margin: 6px 0;
+}
+#quiznavigation .qnbutton {
+  display: block;
+  float: left;
+  width: 1.5em;
+  height: 1.5em;
+  overflow: hidden;
+  margin: 0.3em 0.3em 0.3em 0;
+  padding: 0;
+  border: 1px solid #bbb;
+  background: #eee no-repeat top right;
+  text-align: center;
+  vertical-align: middle;
+  cursor: pointer;
+  white-space: normal;
+}
+#quiznavigation #user-picture {
+  margin: 0.5em 0;
+}
+#quiznavigation #user-picture img {
+  width: auto;
+  height: auto;
+  float: left;
+}
+#quiznavigation .othernav {
+  clear: both;
+}
+#quiznavigation .othernav a,
+#quiznavigation .othernav input {
+  display: block;
+  margin: 0.5em 0;
+}
+#quiznojswarning {
+  font-size: 0.7em;
+  line-height: 1.1;
+}
+.jsenabled #quiznojswarning {
+  display: none;
+}
+.mod-quiz div.tabtree a span img.iconsmall {
+  vertical-align: baseline;
+}
+#mod-quiz-edit div.sideblock{
+  float:right;
+  width:30%;
+  right:0.3em;
+  padding-bottom:0.5em;
+  display:block;
+}
+
+#mod-quiz-edit div.quizcontents{
+  float:left;
+  width:70%;
+  display:block;
+}
+
+#mod-quiz-edit div.quizwhenbankcollapsed{
+  width:100%;
+}
+
+#mod-quiz-edit div.quizcontents,h2.main{
+  clear:left;
+}
+
+#mod-quiz-edit .addpage{
+  clear:both;
+  padding-top:0.3em;
+  float:right;
+  margin-right:2em;
+}
+
+#mod-quiz-edit h2.main{
+  display:inline;
+  padding-right:1em;
+}
+
+#mod-quiz-edit .statusdisplay {
+  clear: both;
+  margin: 0.3em 1em 0.3em 0;
+  padding: 1px ; /* Stop margin collapse. */
+}
+#mod-quiz-edit .statusdisplay p {
+  margin: 0.4em;
+}
+
+#mod-quiz-edit div.quizpage{
+  display:block;
+  clear:both;
+  width:100%;
+}
+
+#mod-quiz-edit div.quizpage span.pagetitle{
+  margin-top:0.3em;
+  float:left;
+  display:block;
+}
+
+#mod-quiz-edit div.reorder .reordercontrols .moveselectedonpage{
+  clear:right;
+  float:right;
+  padding:0.5em 0.3em;
+}
+
+#mod-quiz-edit div.reorder .reordercontrols .addnewpagesafterselected,#mod-quiz-edit .repaginatecommand{
+  float:right;
+  clear:right;
+  padding-right:1em;
+}
+
+#mod-quiz-edit div.reorder .reordercontrols .deleteselected{
+  float:right;
+  margin-right:1em;
+}
+
+#mod-quiz-edit div.reorder .reordercontrols{
+  clear:both;
+  padding-right:1em;
+  margin-top:0.5em;
+  padding-top:0.5em;
+  padding-bottom:0.5em;
+}
+
+#mod-quiz-edit div.quizpage .pagecontent{
+  margin-top:0.3em;
+  display:block;
+  float:left;
+  position:relative;
+  margin-left:0.3em;
+  margin-bottom:0.2em;
+  border-left:solid #777 thin;
+  line-height:1.3em;
+  -webkit-border-radius:0.6em;
+  -webkit-border-radius-bottomleft:0;
+  -webkit-border-radius-topleft:0;
+  border-radius:0.6em;
+  border-radius-bottomleft:0;
+  border-radius-topleft:0;
+  width:88%;
+  padding:0.15em 0 0.3em;
+}
+
+#mod-quiz-edit div.question{
+  clear:left;
+  width:100%;
+}
+
+#mod-quiz-edit div.question div.qnum{
+  display:block;
+  float:left;
+  width:1.4em;
+  padding-right:0.3em;
+  padding-left:0;
+  z-index:99;
+}
+
+#mod-quiz-edit div.reorder div.question div.qnum{
+  width:2.9em;
+  padding-top:0.1em;
+}
+/*edit tab*/
+#mod-quiz-edit div.editq div.question div.qnum{
+  padding-top:0.2em;
+}
+
+#mod-quiz-edit div.editq div.question{
+  padding-top:0.3em;
+}
+
+#mod-quiz-edit div.reorder div.question{
+  padding-top:0.2em;
+}
+
+#mod-quiz-edit div.question div.questioncontainer{
+  background-color:#ffc;
+}
+
+#mod-quiz-edit div.editq div.question div.content{
+  width:87%;
+  float:left;
+  position:relative;
+  -webkit-border-radius:0.6em;
+  -webkit-border-radius-bottomleft:0;
+  -webkit-border-radius-topleft:0;
+  border-radius:0.6em;
+  border-radius-bottomleft:0;
+  border-radius-topleft:0;
+  line-height:1.4em;
+  padding:0.5em;
+}
+
+#mod-quiz-edit .reorder div.question div.content{
+  width:87%;
+  float:left;
+  position:relative;
+  -webkit-border-radius:0.3em;
+  -webkit-border-radius-bottomleft:0;
+  -webkit-border-radius-topleft:0;
+  border-radius:0.3em;
+  border-radius-bottomleft:0;
+  border-radius-topleft:0;
+  line-height:1.2em;
+  padding:0.1em;
+}
+
+#mod-quiz-edit div.question div.content div.points{
+  top:0.5em;
+  border-left:#FFF solid 0.4em;
+  width:8.5em;
+  padding:0.2em;
+}
+#mod-quiz-edit div.question div.content div.points input{
+  width:2em;
+  padding:0;
+}
+#mod-quiz-edit div.question div.content div.points input.pointssubmitbutton{
+  width:auto;
+}
+
+#mod-quiz-edit .questionbankwindow select#catmenu_jump{
+  /* In Opera9, IE6 the width of the
+  select obeys the width of its content
+  by default. This prevents that. */
+  width:100%;
+}
+
+#mod-quiz-edit .collapsed .container{
+  display: none;
+}
+
+#mod-quiz-edit .collapsed .container{
+  display: none;
+}
+#mod-quiz-edit .questionbankwindow #showbankcmd{
+  display:none;
+}
+#mod-quiz-edit .collapsed #showbankcmd{
+  display:inline;
+}
+#mod-quiz-edit .questionbankwindow #hidebankcmd{
+  display:inline;
+}
+#mod-quiz-edit .collapsed #hidebankcmd{
+  display:none;
+}
+
+#mod-quiz-edit .questionbankwindow div.header{
+  padding-top:0.2em;
+}
+
+#randomquestiondialog_c select{
+  width:100%;
+}
+
+
+#mod-quiz-edit div.question div.content div.points,
+#mod-quiz-edit div.question div.content div.qorder{
+  line-height:1em;
+  max-width:30%;
+  position:absolute;
+  right:50px;
+  -webkit-border-radius:0.2em;
+  -webkit-border-radius-bottomleft:0;
+  -webkit-border-radius-topleft:0;
+  border-radius:0.2em;
+  border-radius-bottomleft:0;
+  border-radius-topleft:0;
+  z-index:900;
+  display:block;
+  margin:0;
+}
+
+
+#mod-quiz-edit div.question div.content .editicon{
+  width:15px;
+}
+
+#mod-quiz-edit .editq div.questioncontentcontainer  div.singlequestion img{
+  float:left;
+  padding-top:0.3em;
+  padding-right:0.3em;
+}
+
+#categoryquestions .header {
+  text-align: center;
+  padding: 0 2px;
+}
+
+#categoryquestions th.modifiername .sorters,
+#categoryquestions th.creatorname .sorters {
+  font-weight: normal;
+  font-size: 0.8em;
+}
+
+#mod-quiz-edit div.question div.content .questionname,
+#categoryquestions .questionname{
+  white-space:nowrap;
+  overflow:hidden;
+  zoom:1;
+  position:relative;
+  max-width:20%;
+}
+#mod-quiz-edit div.question div.content .singlequestion .questionname,
+#mod-quiz-edit div.question div.content .singlequestion .questiontext{
+  display:inline-block;
+}
+
+#mod-quiz-edit div.editq div.question div.content .singlequestion a .questionname,
+#mod-quiz-edit div.editq div.question div.content .singlequestion a .questiontext{
+  float:left;
+}
+
+#mod-quiz-edit .quizquestionlistcontrols{
+  display:inline;
+}
+
+#mod-quiz-edit div.question div.content .questiontext,
+#categoryquestions .questiontext{
+  -o-text-overflow:ellipsis;
+  text-overflow:ellipsis;
+  position:relative;
+  zoom:1;
+  padding-left:0.3em;
+  max-width:40%;
+  overflow:hidden;
+  white-space:nowrap;
+  text-overflow:ellipsis;
+}
+#mod-quiz-edit div.editq div.question div.description div.content .questiontext {
+  max-width: 75%;
+}
+
+#mod-quiz-edit div.quizpage .pagecontent .pagestatus{
+  -webkit-border-radius-bottomright:0.3em;
+  -webkit-border-radius-topright:0.3em;
+  border-radius-bottomright:0.3em;
+  border-radius-topright:0.3em;
+  margin:0.3em;
+  padding:0.1em 0.1em 0.1em 0.3em;
+}
+
+#mod-quiz-edit div.question div.content .questiontype{
+  display:block;
+  clear:left;
+  float:left;
+}
+
+#mod-quiz-edit div.question div.content .questionpreview{
+  display:block;
+  float:left;
+  margin-left:0.3em;
+  padding-left:0.2em;
+  padding-right:0.2em;
+}
+
+#mod-quiz-edit div.question div.content div.quiz_randomquestion .questionpreview{
+  display:inline;
+  float:none;
+}
+
+#mod-quiz-edit div.question div.content div.questioncontrols{
+  float:right;
+  width:45px;
+  position:absolute;
+  right:0.3em;
+  top:0;
+  z-index:900;
+  display:block;
+  padding:0.2em;
+}
+
+#mod-quiz-edit div.question div.content div.questioncontrols img.upwithoutdown{
+  padding-right:12px;
+  display:inline;
+}
+
+#mod-quiz-edit .quizpagedelete{
+  position:absolute;
+  top:0.2em;
+  right:0.2em;
+  display:inline;
+  z-index:900;
+}
+
+#mod-quiz-edit .quizpagedelete img {
+  background-color:#d6d6d6;
+  padding:0.6em;
+}
+
+#mod-quiz-edit .pagecontrols {
+  clear:both;
+  margin-left:0.5em;
+  padding-top:0.5em;
+}
+
+#mod-quiz-edit .pagecontrols .singlebutton {
+  float:left;
+  margin-left: 1em;
+}
+#mod-quiz-edit .pagecontrols .helplink {
+  float:left;
+}
+
+#mod-quiz-edit div.quizpage .pagecontent form.randomquestionform div{
+  /* it is a mystery why this has to be inline-table but
+     otherwise the layout gets screwed, even if
+     it is "inline" */
+  display: inline-table;
+}
+
+#mod-quiz-edit div.quizpage .pagecontent form.randomquestionform div input{
+  display: inline;
+}
+
+/* a CSS class YUI container creates on the fly: */
+#mod-quiz-edit div#randomquestiondialog_c{
+  width:90%;
+}
+
+
+#mod-quiz-edit div#randomquestiondialog_c .mform,
+#mod-quiz-edit div#repaginatedialog .mform{
+  margin-left:auto;
+  margin-right:auto;
+}
+
+#mod-quiz-edit div.container div.generalbox{
+  position:relative;
+  display:block;
+  border:0 none;
+  margin:0;
+  padding:0;
+}
+
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist{
+  padding-left:0.2em;
+  padding-right:0.2em;
+  clear:both;
+  margin:0.5em;
+  margin-top:0.8em;
+}
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist .totalquestionsinrandomqcategory{
+  overflow:auto;
+  white-space:normal;
+}
+
+
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul{
+  list-style-type:none;
+  margin:0;
+  padding:0;
+}
+#mod-quiz-edit .reorder .questioncontentcontainer .quiz_randomquestion{
+
+  position:relative;
+}
+
+#mod-quiz-edit .reorder div.question div.content div.quiz_randomquestion{
+  line-height:1em;
+}
+
+#mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory label{
+  max-width: 25%;
+  overflow:hidden;
+  padding-left:0.3em;
+  white-space:nowrap;
+  display:inline-block;
+}
+#mod-quiz-edit .reorder .questioncontentcontainer .randomquestionfromcategory label{
+  overflow:hidden;
+  white-space:nowrap;
+  display:inline-block;
+}
+
+#mod-quiz-edit .editq div.question div.content .randomquestioncategory{
+  margin-top:0.4em;
+  position:relative;
+  display:inline-block;
+
+}
+
+#mod-quiz-edit .editq div.question div.content .randomquestioncategory a{
+  display:block;
+  max-width:15em;
+  overflow: hidden;
+  text-overflow:ellipsis;
+  -o-text-overflow:ellipsis;
+  white-space: nowrap;
+  float:left;
+  position:relative;
+}
+#mod-quiz-edit .editq div.question div.content .questionpreview{
+  float:left;
+}
+#mod-quiz-edit .editq div.question div.content .questionpreview a{
+  font-weight:normal;
+  margin-left:0em;
+  display:inline;
+  float:none;
+}
+#mod-quiz-edit .editq div.question div.content .randomquestioncategory .questionpreview img{
+  padding-right:0.3em;
+}
+
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul li img{
+  padding-right:0.3em;
+}
+
+
+#mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory,
+#mod-quiz-edit .reorder .questioncontentcontainer .randomquestionfromcategory,
+#mod-quiz-edit .reorder div.question div.content .questionpreview{
+  display:inline;
+  float:none;
+}
+
+#mod-quiz-edit .reorder .questioncontentcontainer{
+  position:relative;
+  overflow:hidden;
+  white-space:nowrap;
+}
+
+#mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory{
+  overflow:hidden;
+  white-space:nowrap;
+}
+
+#mod-quiz-edit .reorder fieldset{
+  display:inline;
+}
+
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul li{
+  clear:left;
+  width:100%;
+  overflow:hidden;
+  white-space:nowrap;
+}
+
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul li span{
+  display:inline;
+}
+
+/*start question bank*/
+.questionbankwindow .choosecategory,
+.questionbankwindow .createnewquestion {
+  padding: 0.3em;
+}
+.questionbankwindow .createnewquestion .singlebutton {
+  display: inline;
+}
+.questionbankwindow #catmenu_jump {
+  display: block;
+}
+#mod-quiz-edit .questionbankwindow .createnewquestion select,
+#mod-quiz-edit .questionbankwindow #catmenu select,
+#mod-quiz-edit .questionbankwindow #menucategory {
+  width: 100%;
+}
+table#categoryquestions {
+  width: 100%;
+  overflow: hidden;
+  table-layout: fixed;
+}
+
+table#categoryquestions td,#mod-quiz-edit table#categoryquestions th{
+  overflow:hidden;
+  white-space:nowrap;
+}
+
+#categoryquestions .iconcol {
+  width: 15px;
+  text-align: center;
+  padding: 0;
+}
+
+#categoryquestions .checkbox {
+  width: 19px;
+  text-align: center;
+  padding: 0;
+}
+
+#categoryquestions .qtype {
+  text-align: center;
+}
+
+#categoryquestions .qtype {
+  width: 24px;
+  padding: 0;
+}
+
+#categoryquestions .questiontext p {
+  margin: 0;
+}
+.categoryinfo {
+  padding: 0.3em;
+}
+
+#mod-quiz-edit .paging{
+  margin-top:0;
+  margin-bottom:0;
+  display:block;
+}
+
+#mod-quiz-edit .pagingbottom{
+  padding-bottom:0.3em;
+}
+
+#mod-quiz-edit div.questionbank form .invisiblefieldset{
+  clear:both;
+}
+
+#mod-quiz-edit .sideblock .content{
+  padding:0;
+}
+
+#mod-quiz-edit .questionbank .categorysortopotionscontainer{
+  padding-top:0.5em;
+  margin-top:0.3em;
+}
+
+.questionbank div.categoryquestionscontainer,
+.questionbank .categorysortopotionscontainer,
+.questionbank .categorypagingbarcontainer,
+.questionbank .categoryselectallcontainer{
+  padding-left:0.3em;
+  padding-right:0.3em;
+}
+
+.noquestionsincategory{
+  clear:both;
+  padding-top:1em;
+  padding-bottom:1em;
+}
+
+.modulespecificbuttonscontainer{
+  padding-left:0.3em;
+  padding-right:0.3em;
+}
+
+#mod-quiz-edit div#footer{
+  clear:both;
+  padding-top:1em;
+}
+
+
+/* these will toggle if js is enabled */
+body #quizcontentsblock #repaginatedialog{
+  display: none;
+}
+body.jsenabled #quizcontentsblock #repaginatedialog{
+  display: block;
+}
+body.jsenabled #quizcontentsblock #repaginatedialog .hd{
+  display:block;
+}
+body.jsenabled #quizcontentsblock #repaginatedialog .bd{
+  padding:1em;
+}
+body.jsenabled #quizcontentsblock  .repaginatecommand #repaginatecommand{
+  display:block;
+}
+
+
+.ie7.mod-quiz div.tabtree a span img.iconsmall {
+  margin: 0;
+  vertical-align: baseline;
+  position: relative;
+  top: 2px;
+}
+
+#mod-quiz-edit.ie6 div.question div.content .questiontext,
+#mod-quiz-edit.ie6 #categoryquestions .questionname{
+    /*ie6 shows this as an arrow if this is not specified*/
+    cursor: pointer;
+}
+#mod-quiz-edit.ie6 div.question div.content .questionname,
+#mod-quiz-edit.ie6 #categoryquestions .questiontext{
+    /*ie6 shows this as an arrow if this is not specified*/
+    cursor: pointer;
+}
+.mod-quiz.ie6 div.tabtree a span img.iconsmall {
+  margin: 0;
+  vertical-align: baseline;
+  position: relative;
+  top: 1px;
+}
+#mod-quiz-edit.ie6 div.question div.content .questiontext,#categoryquestions .questiontext{
+    width:50%;
+}
+#mod-quiz-edit.ie6 div.question div.content .questionname,#categoryquestions .questionname{
+    width:20%;
+}
+#mod-quiz-edit.ie6 .editq div.question div.content .randomquestioncategory a{
+    width:40%;
+}
+#mod-quiz-edit.ie6 .reorder .questioncontentcontainer .randomquestioncategory label{
+    width: 35%;
+}
+
+
+
+
+/***
+ *** Modules: Quiz
+ ***/
+
+#quiznavigation .qnbutton {
+  font: inherit;
+  line-height: 1.5em;
+  font-weight: bold;
+}
+#quiznavigation .qnbutton:hover {
+  text-decoration: underline;
+}
+
+#mod-quiz-edit div.reorder .reordercontrols .moveselectedonpage{
+    text-align:right;
+}
+#mod-quiz-edit div.question div.qnum{
+    text-align:right;
+}
+#mod-quiz-edit div.reorder div.question div.qnum{
+    text-align:right;
+    font-size:1em;
+}
+#mod-quiz-edit div.editq div.question div.qnum{
+    font-size:1.5em;
+}
+#mod-quiz-edit .questionbankwindow div.header a{
+    text-decoration:underline;
+}
+#mod-quiz-edit div.questioncontentcontainer a{
+    text-decoration:underline;
+}
+
+#mod-quiz-edit div.questioncontentcontainer div.singlequestion a{
+    text-decoration:underline;
+}
+#mod-quiz-edit div.editq div.question div.content .singlequestion a .questionname,div.editq div.question div.content .singlequestion a .questiontext{
+    text-decoration:underline;
+}
+#mod-quiz-edit div.question div.content .questiontext,
+#mod-quiz-edit #categoryquestions .questiontext {
+    font-weight:bold;
+}
+#mod-quiz-edit div.question div.content div.questioncontrols{
+    text-align:right;
+}
+#mod-quiz-edit div.quizpage .pagecontent .pagestatus{
+    font-weight:bold;
+}
+#mod-quiz-edit div.question div.content .questiontype{
+    font-style:italic;
+}
+#mod-quiz-edit .questioncontentcontainer .randomquestioncategory{
+    font-weight:bold;
+}
+#mod-quiz-edit .categoryinfofield{
+    font-style:italic;
+}
+#mod-quiz-edit .categorynamefield{
+    font-weight:bold;
+}
+#mod-quiz-edit .questionbankwindow div.header{
+    font-weight:bold;
+}
+#mod-quiz-edit a.configurerandomquestion{
+    font-size:small;
+    text-decoration:underline;
+}
+
+
+
+
+/***
+ *** Modules: Quiz
+ ***/
+
+table.quizattemptsummary .bestrow td {
+    background-color: #e8e8e8;
+}
+table.quizattemptsummary .noreviewmessage {
+    color: gray;
+}
+
+#mod-quiz-attempt #quiz-timer-outer {
+    border-color: #dddddd;
+    background: white;
+}
+
+table.quizreviewsummary th.cell {
+    background: #f0f0f0;
+}
+table.quizreviewsummary td.cell {
+    background: #fafafa;
+}
+.mod-quiz .highlightgraded {
+    background:yellow;
+}
+
+#quiznavigation .qnbutton {
+  color: #00f;
+  border-color: #bbb;
+  background-color: #ddd;
+}
+#quiznavigation .qnbutton:hover {
+  color: #f00;
+}
+#quiznavigation .qnbutton.thispage {
+  border-color: black;
+}
+#quiznavigation .qnbutton.open {
+  background-color: white;
+}
+#quiznavigation .qnbutton.correct {
+  background-color: #cfc;
+}
+#quiznavigation .qnbutton.partiallycorrect {
+  background-color: #ffa;
+}
+#quiznavigation .qnbutton.incorrect {
+  background-color: #fcc;
+}
+#quiznojswarning {
+  color: red;
+}
+#mod-quiz-report .dubious{
+  background-color: #fcc;
+}
+#mod-quiz-report .highlight{
+  border :medium solid yellow;
+  background-color:lightYellow;
+}
+#mod-quiz-report .negcovar{
+  border :medium solid pink;
+}
+#mod-quiz-edit .statusdisplay{
+    background-color: #ffc;
+}
+#mod-quiz-edit div.quizpage span.pagetitle{
+    color:#006;
+}
+#mod-quiz-edit div.quizpage .pagecontent{
+    background-color:#d6d6d6;
+}
+#mod-quiz-edit div.question div.qnum{
+    color:#333;
+}
+#mod-quiz-edit .questionbankwindow div.header{
+/*this color might need to be theme-specific,
+but in terms of usability, as testing showed,
+http://docs.moodle.org/en/Development:Quiz_UI_redesign/usability_testing_of_August_2008/Issues#Question_bank_.2F_question_adding_controls_visibility
+it must be ensured that the question
+bank window's title is prominent enough*/
+    background-color:#009;
+    color:#fff;
+    background-image:none;
+}
+
+#mod-quiz-edit div.question div.content div.points,
+        #mod-quiz-edit div.question div.content div.qorder{
+    background-color:#ddf;
+}
+
+#mod-quiz-edit div.quizpage .pagecontent .pagestatus{
+    background-color:#eee;
+}
+#mod-quiz-edit .quizpagedelete img{
+    background-color:#d6d6d6;
+}
+#mod-quiz-edit div.quizpage .pagecontent form#addquestion{
+    background-color:#fff;
+}
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist{
+    background-color:#eee;
+}
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul{
+    color:#555;
+}
+#mod-quiz-edit div.question div.content div.singlequestion .questionpreview{
+    background-color:#eee;
+}
+
+#mod-quiz-edit div.question div.content .questionpreview a{
+    background-color:#eee;
+}
+#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist .totalquestionsinrandomqcategory{
+    color:#000;
+}
+/*TODO: below applies to also question bank, so when
+question bank is adapted to the new UI, add the appropriate
+css id's of question bank*/
+#mod-quiz-edit .categoryinfo{
+    background-color:#eee;
+    border-bottom:1px solid #bbb;
+}
+#mod-quiz-edit .paging{
+    background-color:#ddd;
+}
+#mod-quiz-edit .questionsortoptions{
+    background-color:#ddd;
+}
+
+#mod-quiz-edit .paging a:hover{
+    background-color:#eef;
+}
+#mod-quiz-edit div.questionbank{
+    background-color:#e6e6ff;
+}
+#mod-quiz-edit .questionbank div.categoryquestionscontainer,.questionbank .categorysortopotionscontainer,.questionbank .categorypagingbarcontainer,.questionbank .categoryselectallcontainer{
+    background-color:#FFF;
+}
+#mod-quiz-edit div.question div.content div.questioncontrols{
+    background-color:#F9F9F9;
+}
+#mod-quiz-edit div.editq div.question div.content{
+    background-color:#F9F9F9;
+}
+#mod-quiz-edit .reorder div.question div.content{
+    background-color:#F9F9F9;
+}
+
+#mod-quiz-edit .questionbankwindow div.header a{
+    color:#FFF;
+}
+#categoryquestions .r1 {
+  background: #e4e4e4;
+}
+#categoryquestions .header {
+  border: 0 none;
+}
+
diff --git a/theme/standard/style/mod_resource.css b/theme/standard/style/mod_resource.css
new file mode 100644
index 0000000000..f77ce84e51
--- /dev/null
+++ b/theme/standard/style/mod_resource.css
@@ -0,0 +1,52 @@
+
+/***
+ *** Modules: Resource
+ ***/
+
+#mod-resource-view .resourcecontent {
+  text-align:center;
+  margin:20px;
+}
+
+#mod-resource-view .resourcepdf {
+  width: 100%;
+  padding-top: 15px;
+  text-align: center
+}
+
+.resourcecontent object {
+  height:480px;
+  width:600px;
+}
+
+.resourcepdf object{
+  height: 800px;
+  width: 800px;
+}
+
+.mod-resource .modified {
+  text-align:center;
+}
+
+.mod-resource .popupnotice {
+  text-align:center;
+  margin:40px;
+}
+
+#mod-resource-view div#footer {
+  margin-top: 5px;
+}
+
+
+/***
+ *** Modules: Resource
+ ***/
+
+#mod-resource-index .cell {
+  font-size:0.8em;
+}
+
+.mod-resource .modified {
+  font-size:0.6em;
+}
+
diff --git a/theme/standard/style/mod_scorm.css b/theme/standard/style/mod_scorm.css
new file mode 100644
index 0000000000..4d990c9d7b
--- /dev/null
+++ b/theme/standard/style/mod_scorm.css
@@ -0,0 +1,160 @@
+.structlist  {
+  list-style-type: none;
+  white-space: nowrap;
+  font-size: small;
+}
+
+.orgtitle {
+  font-weight: bold;
+  font-size: small;
+}
+
+.mod-scorm .top {
+  vertical-align: top;
+}
+
+.mod-scorm .scorm-left {
+  text-align: left;
+}
+
+.mod-scorm .scorm-center {
+  text-align: center;
+}
+
+.mod-scorm .scorm-right {
+  text-align: right;
+}
+
+.mod-scorm .scoframe {
+   position: relative;
+   width: 100%;
+   height: 100%;
+}
+
+#mod-scorm-player #scormpage {
+  position: relative;
+  width: 100%;
+}
+
+#mod-scorm-player #tochead {
+  position: relative;
+  text-align: center;
+  top: 3px;
+  height: 30px;
+}
+
+#mod-scorm-player .toc {
+  width: 80%;
+  margin-left: 20%;
+}
+
+#mod-scorm-player .no-toc {
+  width: 100%;
+}
+
+#mod-scorm-player #scormobject {
+  height: 400px;
+}
+
+#mod-scorm-player #scormtop {
+  position: relative;
+  width: 100%;
+  height: 30px;
+}
+
+#mod-scorm-player #scormbrowse {
+  position: absolute;
+  left: 5px;
+  top: 0px;
+}
+
+#mod-scorm-player #scormnav {
+  position: absolute;
+  right: 5px;
+  top: 0px;
+  text-align: center;
+  top: 3px;
+  width: 100%;
+}
+
+#mod-scorm-view .structurehead {
+  text-align: center;
+}
+
+#mod-scorm-view .structurelist  {
+  list-style-type: none;
+  white-space: nowrap;
+}
+
+#mod-scorm-player #scormbox {
+  width: 74%;
+  position: absolute;
+  right: 0px;
+  top: 0px;
+}
+
+#mod-scorm-player #tocbox {
+  position: relative;
+  left: 0px;
+  width: 24%;
+  font-size: 0.8em;
+}
+
+#mod-scorm-player #tochead {
+  position: relative;
+  text-align: center;
+  top: 3px;
+  height: 30px;
+}
+
+
+#toctree {
+  position:relative;
+  width:100%;
+  overflow-x: auto;
+  overflow-y: auto;
+}
+
+.structurelist  {
+  list-style-type: none;
+}
+
+#mod-scorm-player .structurelist {
+  position: relative;
+  list-style-type: none;
+  width: 96%;
+  margin-left:0;
+  padding-left: 0;
+  margin-right:0;
+  padding-right: 0;
+  padding-top: 0;
+  padding-bottom: 0;
+  margin-top:0;
+  margin-bottom:0;
+}
+
+#mod-scorm-player .structurelist ul{
+  padding-left: 0.5em;
+  margin-left: 0.5em;
+}
+
+#mod-scorm-view .structurelist  {
+  list-style-type: none;
+  white-space: nowrap;
+}
+
+a#mod-scorm-log-toggle {
+    font-size: 0.7em;
+    font-weight: bold;
+}
+
+
+
+/***
+ *** Modules: Scorm
+ ***/
+
+#mod-scorm-index .cell {
+  font-size:0.8em;
+}
+
diff --git a/theme/standard/style/mod_survey.css b/theme/standard/style/mod_survey.css
new file mode 100644
index 0000000000..8cf43fcc06
--- /dev/null
+++ b/theme/standard/style/mod_survey.css
@@ -0,0 +1,96 @@
+
+/***
+ *** Modules: Survey
+ ***/
+.resultgraph {
+  text-align:center;
+  border:1px solid;
+}
+
+.reportsummary,
+.studentreport,
+.reportbuttons {
+  text-align:center;
+}
+
+.centerpara {
+  text-align:center;
+}
+
+.fullnamecell {
+  width:10%;
+  vertical-align:top;
+  white-space: nowrap;
+}
+
+.questiontext {
+  font-size:1em;
+}
+
+.smalltext {
+  font-size: 0.75em;
+}
+
+#surveyform th {
+  font-weight: normal;
+  text-align: left;
+}
+#surveyform th.hresponse {
+  text-align: center;
+  width: 9%;
+}
+
+.rblock label {
+  display: block;
+  text-align: center;
+}
+
+.foundthat,
+.preferthat {
+  white-space: nowrap;
+}
+
+.qnummiddlecell {
+  vertical-align:middle;
+}
+
+.optioncell {
+  width: 50%;
+  vertical-align: top;
+}
+
+.buttoncell {
+  width:5%;
+}
+
+.questioncell {
+  width:50%;
+  vertical-align:top;
+}
+
+.whitecell {
+  background-color:white;
+}
+
+
+/***
+ *** Modules: Survey
+ ***/
+
+#mod-survey-index .cell {
+  font-size:0.8em;
+}
+
+
+
+/***
+ *** Modules: Survey
+ ***/
+
+#mod-survey-view .r0 {
+  background-color: #EEEEEE;
+}
+#mod-survey-view .r1 {
+  background-color: #DDDDDD;
+}
+
diff --git a/theme/standard/style/mod_wiki.css b/theme/standard/style/mod_wiki.css
new file mode 100644
index 0000000000..ed920b45f3
--- /dev/null
+++ b/theme/standard/style/mod_wiki.css
@@ -0,0 +1,35 @@
+
+/***
+ *** Modules: Wiki
+ ***/
+.sideblockheading,
+.howtowiki {
+  text-align:right;
+}
+
+.wikisearchform,
+.wikilinksblock,
+wikiadminactions {
+  text-align:center;
+}
+
+.wikilinkright{
+  text-align:right;
+  padding-bottom: 0.5em;
+}
+
+.wikiexportbox{
+  margin-left:auto;
+  margin-right:auto;
+}
+
+
+
+/***
+ *** Modules: Wiki
+ ***/
+
+#mod-wiki-index .cell {
+  font-size:0.8em;
+}
+
diff --git a/theme/standard/styles_color.css b/theme/standard/style/styles_color.css
similarity index 67%
rename from theme/standard/styles_color.css
rename to theme/standard/style/styles_color.css
index 1052720676..c1ff02eadf 100644
--- a/theme/standard/styles_color.css
+++ b/theme/standard/style/styles_color.css
@@ -21,8 +21,6 @@
   tabs
   user
 
-  various modules
-
 *******************************************************************/
 
 /***
@@ -62,7 +60,7 @@ img.grouppicture {
   border:#888
 }
 
-body, body#tinymce {
+html, body#tinymce {
   background-color:#FAFAFA;
   color:#000;
 }
@@ -757,7 +755,7 @@ body#course-user .section {
  * course/view.php
  **/
 #course-view .unread{
-	background: #9EBEFF;
+    background: #9EBEFF;
 }
 
 
@@ -944,402 +942,6 @@ table.message_search_results td {
   border-color:#DDDDDD;
 }
 
-/***
- *** Modules: Chat
- ***/
-
-#mod-chat-gui_basic .text,
-#mod-chat-gui_header_js-jsupdate .text {
-  color:#000
-}
-
-#mod-chat-gui_basic .event,
-#mod-chat-gui_basic .title,
-#mod-chat-gui_header_js-jsupdate .event,
-#mod-chat-gui_header_js-jsupdate .title {
-  color:#888
-}
-
-#mod-chat-gui_header_js-chatinput .wait {
-    background: #dddddd;
-}
-
-#mod-chat-view #chatcurrentusers .idletime {
-  color: #888888;
-}
-
-/***
- *** Modules: Choice
- ***/
-
-/***
- *** Modules: Forum
- ***/
-
-/**
- * Patch MDL-18971 version 3 puts the forum classes
- * in page sequence. Also added one course class (above)
- * for course/view.php
- **/
-
-/** The location of these classes is unknown
- * Commented out with patch MDL-18971 version 3
- **/
-/*.sideblock .post .head {
-  color:#555555;
-}*/
-
-/** Unread Posts count background on
- * mod/forum/index.php
- **/
-#mod-forum-index .unread {
-	background: #9EBEFF;
-}
-
-/** wire frame around cells in
- * mod/forum/view.php
- **/
-.forumheaderlist td {
-  border-color: #FFFFFF;
-}
-
-/** Discussion column background in
- * mod/forum/view.php
- * The inner class is actually "topic starter"
- **/
-.forumheaderlist .discussion .starter {
-  background:#DDDDDD;
-}
-
-/** unread column background on
- * mod/forum/view.php
- **/
-#mod-forum-view .unread{
-	background: #9EBEFF;
-}
-
-/** border around posts in
- * mod/forum/view.php (forumheaderlist) and
- * mod/forum/discuss.php (forumpost)
- **/
-.forumheaderlist,
-.forumpost {
-  border-color:#DDDDDD;
-}
-
-/** post body color in
- * mod/forum/discuss.php
- **/
-.forumpost .content {
-  background: #FFFFFF;
-}
-
-/** left photo section of each post in
- * mod/forum/discuss.php
- **/
-.forumpost .left {
-  background:#EEEEEE;
-}
-
-/** line between header and post body in
- * mod/forum/discuss.php
- **/
-.forumpost .topic {
-  border-bottom-color: #EEEEEE;
-}
-
-/** header of the first post in
- * mod/forum/discuss.php
- **/
-.forumpost .starter {
-  background:#DDDDDD;
-}
-
-/** header of reply posts and
- * lower corners of all posts in
- * mod/forum/discuss.php
- **/
-#mod-forum-discuss .forumpost {
-  background: none;
-}
-
-/** inside border of unread posts in nested format in
- * mod/forum/discuss.php
- **/
-#mod-forum-discuss .forumpost.unread .content {
-  border-width:2px;
-  border-color: #0046C7;
-}
-
-/** headers of unread posts in threaded format in
- * mod/forum/discuss.php
- **/
-#mod-forum-discuss .forumthread.unread {
-  background: #9EBEFF;
-}
-
-
-/***
- *** Modules: Glossary
- ***/
-
-.entryboxheader {
-  border-color: #BBBBBB;
-}
-
-.entrybox {
-  border-color: #BBBBBB;
-}
-
-.entry {
-}
-
-.glossarypost {
-  border-color: #DDDDDD;
-}
-
-.glossarypost .entryheader,
-.glossarypost .entryapproval,
-.glossarypost .picture,
-.glossarypost .entryattachment,
-.glossarypost .left {
-  background-color: #F0F0F0;
-}
-
-.glossarycomment {
-  border-color: #DDDDDD;
-}
-
-.glossarycomment .entryheader,
-.glossarycomment .picture,
-.glossarycomment .left {
-  background-color: #F0F0F0;
-
-}
-
-#mod-glossary-report .generalbox .teacher {
-  background: #F0F0F0;
-}
-
-.glossarycategoryheader {
-  background-color: #dddddd;
-}
-
-.glossaryformatheader {
-  background-color: #dddddd;
-}
-
-
-/***
- *** Modules: Journal
- ***/
-
-#mod-journal-view .feedbackbox .left,
-#mod-journal-view .feedbackbox .entryheader {
-  background-color: #dddddd;
-}
-
-/***
- *** Modules: Label
- ***/
-
-/***
- *** Modules: Lesson
- ***/
-
-/***
- *** Modules: Quiz
- ***/
-
-table.quizattemptsummary .bestrow td {
-    background-color: #e8e8e8;
-}
-table.quizattemptsummary .noreviewmessage {
-    color: gray;
-}
-
-#mod-quiz-attempt #quiz-timer-outer {
-    border-color: #dddddd;
-    background: white;
-}
-
-table.quizreviewsummary th.cell {
-    background: #f0f0f0;
-}
-table.quizreviewsummary td.cell {
-    background: #fafafa;
-}
-.mod-quiz .highlightgraded {
-    background:yellow;
-}
-
-#quiznavigation .qnbutton {
-  color: #00f;
-  border-color: #bbb;
-  background-color: #ddd;
-}
-#quiznavigation .qnbutton:hover {
-  color: #f00;
-}
-#quiznavigation .qnbutton.thispage {
-  border-color: black;
-}
-#quiznavigation .qnbutton.open {
-  background-color: white;
-}
-#quiznavigation .qnbutton.correct {
-  background-color: #cfc;
-}
-#quiznavigation .qnbutton.partiallycorrect {
-  background-color: #ffa;
-}
-#quiznavigation .qnbutton.incorrect {
-  background-color: #fcc;
-}
-#quiznojswarning {
-  color: red;
-}
-#mod-quiz-report .dubious{
-  background-color: #fcc;
-}
-#mod-quiz-report .highlight{
-  border :medium solid yellow;
-  background-color:lightYellow;
-}
-#mod-quiz-report .negcovar{
-  border :medium solid pink;
-}
-#mod-quiz-edit .statusdisplay{
-    background-color: #ffc;
-}
-#mod-quiz-edit div.quizpage span.pagetitle{
-    color:#006;
-}
-#mod-quiz-edit div.quizpage .pagecontent{
-    background-color:#d6d6d6;
-}
-#mod-quiz-edit div.question div.qnum{
-    color:#333;
-}
-#mod-quiz-edit .questionbankwindow div.header{
-/*this color might need to be theme-specific,
-but in terms of usability, as testing showed,
-http://docs.moodle.org/en/Development:Quiz_UI_redesign/usability_testing_of_August_2008/Issues#Question_bank_.2F_question_adding_controls_visibility
-it must be ensured that the question
-bank window's title is prominent enough*/
-    background-color:#009;
-    color:#fff;
-    background-image:none;
-}
-
-#mod-quiz-edit div.question div.content div.points,
-        #mod-quiz-edit div.question div.content div.qorder{
-    background-color:#ddf;
-}
-
-#mod-quiz-edit div.quizpage .pagecontent .pagestatus{
-    background-color:#eee;
-}
-#mod-quiz-edit .quizpagedelete img{
-    background-color:#d6d6d6;
-}
-#mod-quiz-edit div.quizpage .pagecontent form#addquestion{
-    background-color:#fff;
-}
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist{
-    background-color:#eee;
-}
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul{
-    color:#555;
-}
-#mod-quiz-edit div.question div.content div.singlequestion .questionpreview{
-    background-color:#eee;
-}
-
-#mod-quiz-edit div.question div.content .questionpreview a{
-    background-color:#eee;
-}
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist .totalquestionsinrandomqcategory{
-    color:#000;
-}
-/*TODO: below applies to also question bank, so when
-question bank is adapted to the new UI, add the appropriate
-css id's of question bank*/
-#mod-quiz-edit .categoryinfo{
-    background-color:#eee;
-    border-bottom:1px solid #bbb;
-}
-#mod-quiz-edit .paging{
-    background-color:#ddd;
-}
-#mod-quiz-edit .questionsortoptions{
-    background-color:#ddd;
-}
-
-#mod-quiz-edit .paging a:hover{
-    background-color:#eef;
-}
-#mod-quiz-edit div.questionbank{
-    background-color:#e6e6ff;
-}
-#mod-quiz-edit .questionbank div.categoryquestionscontainer,.questionbank .categorysortopotionscontainer,.questionbank .categorypagingbarcontainer,.questionbank .categoryselectallcontainer{
-    background-color:#FFF;
-}
-#mod-quiz-edit div.question div.content div.questioncontrols{
-    background-color:#F9F9F9;
-}
-#mod-quiz-edit div.editq div.question div.content{
-    background-color:#F9F9F9;
-}
-#mod-quiz-edit .reorder div.question div.content{
-    background-color:#F9F9F9;
-}
-
-#mod-quiz-edit .questionbankwindow div.header a{
-    color:#FFF;
-}
-#categoryquestions .r1 {
-  background: #e4e4e4;
-}
-#categoryquestions .header {
-  border: 0 none;
-}
-
-/***
- *** Modules: Resource
- ***/
-
-/***
- *** Modules: Scorm
- ***/
-
-/***
- *** Modules: Survey
- ***/
-
-#mod-survey-view .r0 {
-  background-color: #EEEEEE;
-}
-#mod-survey-view .r1 {
-  background-color: #DDDDDD;
-}
-
-
-/***
- *** Modules: Wiki
- ***/
-
-/***
- *** Modules: Workshop
- ***/
-
-.workshoppostpicture {
-  background-color:#FEE6B9;
-}
-
-.workshopassessmentheading {
-  background-color:#DDDDDD;
-}
 
 .error {
   color:#ff0000;
diff --git a/theme/standard/styles_fonts.css b/theme/standard/style/styles_fonts.css
similarity index 72%
rename from theme/standard/styles_fonts.css
rename to theme/standard/style/styles_fonts.css
index ee0378b132..dd02d82163 100644
--- a/theme/standard/styles_fonts.css
+++ b/theme/standard/style/styles_fonts.css
@@ -22,8 +22,6 @@
   tabs
   user
 
-  various modules
-
 *******************************************************************/
 
 
@@ -185,10 +183,6 @@ a.useredit, a:hover.useredit, .blink {
   cursor: help;
 }
 
-.currentlink {
-  font-style: italic;
-  display: inline;
-}
 /***
  *** Header
  ***/
@@ -883,285 +877,6 @@ body#user-index #longtimenosee {
   font-style: italic;
 }
 
-/***
- *** Modules: Assignment
- ***/
-
-#mod-assignment-index .cell {
-  font-size:0.8em;
-}
-
-#wordcount {
-  font-size: 0.8em;
-}
-
-/***
- *** Modules: Chat
- ***/
-
-#mod-chat-index .cell {
-  font-size:0.8em;
-}
-
-
-#mod-chat-gui_basic h1 {
-  font-size:1.4em;
-}
-
-#mod-chat-gui_basic #participants .idle {
-  font-size:0.6em;
-}
-
-#mod-chat-view #chatcurrentusers .chatuserdetails {
-  font-size: 0.6em;
-}
-/***
- *** Modules: Choice
- ***/
-
-#mod-choice-index .cell {
-  font-size:0.8em;
-}
-
-/***
- *** Modules: Forum
- ***/
-
-.forumnodiscuss{
-  font-weight:bold;
-}
-.forumpost .topic .subject {
-  font-weight: bold;
-}
-.forumpost .topic .author , .forumpost .topic .externalblog {
-  font-size: 0.8em;
-}
-.forumpost .commands,
-.forumpost .link,
-.forumpost .footer {
-  font-size: 0.9em;
-}
-.forumheaderlist .discussion .lastpost {
-  font-size: 0.7em;
-}
-body#mod-forum-search .introcontent {
-  font-weight:bold;
-}
-body#mod-forum-index .generalbox .cell {
-  font-size: 0.80em;
-}
-
-.forumpost .edited {
-  font-style: italic;
-}
-
-
-/***
- *** Modules: Glossary
- ***/
-
-.glossarypost .commands {
-  font-size: 0.8em;
-}
-.glossarypost .author {
-  font-size: 0.8em;
-}
-.glossarypost .time {
-  font-size: 0.8em;
-}
-.glossarycategoryheader h2,
-.glossarypost .concept h3 {
-  font-size: 1em;
-  margin: 0;
-}
-.glossarypost div.concept h3,
-.glossarypost.continuous .concept {
-  display: inline;
-}
-.glossarypost .entryheader {
-  font-weight: normal;
-  text-align: left;
-}
-.glossarycomment .author {
-  font-size: 0.8em;
-}
-.entrylowersection .aliases {
-  font-size: 0.8em;
-}
-.entrylowersection .icons,
-.entrylowersection .ratings {
-  font-size: 0.8em;
-}
-
-#mod-glossary-index .cell {
-  font-size:0.8em;
-}
-
-
-/***
- *** Modules: Journal
- ***/
-#mod-journal-view .lastedit,
-#mod-journal-view .editend {
-  font-size: 0.7em;
-}
-#mod-journal-view .author {
-  font-size: 1em;
-  font-weight: bold;
-}
-#mod-journal-view .time {
-  font-size: 0.7em;
-  font-style: italic;
-}
-#mod-journal-view .grade {
-  font-weight: bold;
-  font-style: italic;
-}
-
-#mod-journal-index .cell {
-  font-size:0.8em;
-}
-
-/***
- *** Modules: Label
- ***/
-
-/***
- *** Modules: Lesson
- ***/
-
-#mod-lesson-index .cell {
-  font-size:0.8em;
-}
-
-/***
- *** Modules: Quiz
- ***/
-
-#quiznavigation .qnbutton {
-  font: inherit;
-  line-height: 1.5em;
-  font-weight: bold;
-}
-#quiznavigation .qnbutton:hover {
-  text-decoration: underline;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols .moveselectedonpage{
-    text-align:right;
-}
-#mod-quiz-edit div.question div.qnum{
-    text-align:right;
-}
-#mod-quiz-edit div.reorder div.question div.qnum{
-    text-align:right;
-    font-size:1em;
-}
-#mod-quiz-edit div.editq div.question div.qnum{
-    font-size:1.5em;
-}
-#mod-quiz-edit .questionbankwindow div.header a{
-    text-decoration:underline;
-}
-#mod-quiz-edit div.questioncontentcontainer a{
-    text-decoration:underline;
-}
-
-#mod-quiz-edit div.questioncontentcontainer div.singlequestion a{
-    text-decoration:underline;
-}
-#mod-quiz-edit div.editq div.question div.content .singlequestion a .questionname,div.editq div.question div.content .singlequestion a .questiontext{
-    text-decoration:underline;
-}
-#mod-quiz-edit div.question div.content .questiontext,
-#mod-quiz-edit #categoryquestions .questiontext {
-    font-weight:bold;
-}
-#mod-quiz-edit div.question div.content div.questioncontrols{
-    text-align:right;
-}
-#mod-quiz-edit div.quizpage .pagecontent .pagestatus{
-    font-weight:bold;
-}
-#mod-quiz-edit div.question div.content .questiontype{
-    font-style:italic;
-}
-#mod-quiz-edit .questioncontentcontainer .randomquestioncategory{
-    font-weight:bold;
-}
-#mod-quiz-edit .categoryinfofield{
-    font-style:italic;
-}
-#mod-quiz-edit .categorynamefield{
-    font-weight:bold;
-}
-#mod-quiz-edit .questionbankwindow div.header{
-    font-weight:bold;
-}
-#mod-quiz-edit a.configurerandomquestion{
-    font-size:small;
-    text-decoration:underline;
-}
-
-/***
- *** Modules: Resource
- ***/
-
-.mod-page .modified {
-  font-size:0.6em;
-}
-
-/***
- *** Modules: Resource
- ***/
-
-#mod-resource-index .cell {
-  font-size:0.8em;
-}
-
-.mod-resource .modified {
-  font-size:0.6em;
-}
-
-/***
- *** Modules: Scorm
- ***/
-
-#mod-scorm-index .cell {
-  font-size:0.8em;
-}
-
-/***
- *** Modules: Survey
- ***/
-
-#mod-survey-index .cell {
-  font-size:0.8em;
-}
-
-/***
- *** Modules: Wiki
- ***/
-
-#mod-wiki-index .cell {
-  font-size:0.8em;
-}
-
-/***
- *** Modules: Workshop
- ***/
-
-#mod-workshop-index .cell {
-  font-size:0.8em;
-}
-
-
-#thegroup, #thegrouping, #dummygrouping {
-  font-size: 0.8em;
-  /*letter-spacing: -0.01em;*/
-  display: block;
-}
-
 
 /***
  *** Phpinfo display
diff --git a/theme/standard/styles_layout.css b/theme/standard/style/styles_layout.css
similarity index 67%
rename from theme/standard/styles_layout.css
rename to theme/standard/style/styles_layout.css
index 99505addf4..155f325091 100644
--- a/theme/standard/styles_layout.css
+++ b/theme/standard/style/styles_layout.css
@@ -26,8 +26,6 @@
   tags
   user
 
-  various modules
-
 *******************************************************************/
 
 
@@ -44,6 +42,10 @@ h6.main {
   text-align: center;
 }
 
+body {
+ padding: 4px;
+}
+
 #layout-table {
   width:100%;
   border-collapse:separate;
@@ -464,7 +466,7 @@ form.popupform label {
   width: 90%;
 }
 .groupmanagementtable td {
-  vertical-align: top;
+  vertical-align: middle;
 }
 .groupmanagementtable p {
   text-align: left;
@@ -684,7 +686,7 @@ fieldset.fdate_selector label {
 }
 /* Prevent border-collapse:collapse from bleeding through in IE6, IE7 */
 #date_selector_calendar_panel.yui-overlay-hidden table {
-  display:none;
+  *display:none;
 }
 #date_selector_calendar_panel th.calhead {
   padding-right: 2em;
@@ -1325,10 +1327,6 @@ table.explainpermissions .cell {
   margin:auto;
 }
 
-.generalboxcontent table{
-  width:100%;
-}
-
 #admin-index .adminerror,
 #admin-index .adminwarning {
   text-align:center;
@@ -1819,6 +1817,7 @@ a.skip:focus, a.skip:active {
   list-style: none;
   padding-left:0px;
   margin:3px;
+  text-align: left;
 }
 .block_tree ul {
   margin-left: 0px;
@@ -1843,7 +1842,7 @@ a.skip:focus, a.skip:active {
   font-size:90%;
 }
 .block_tree .tree_item.branch {
-  background-image: url(../../pix/t/expanded.png);
+  background-image: url([[pix:t/expanded]]);
   background-position: center left;
   background-repeat: no-repeat;
 }
@@ -1858,10 +1857,10 @@ a.skip:focus, a.skip:active {
   cursor:pointer;
 }
 .jsenabled .block_tree .collapsed .tree_item.branch {
-  background-image: url(../../pix/t/collapsed.png);
+  background-image: url([[pix:t/collapsed]]);
 }
 .jsenabled .block_tree .tree_item.emptybranch {
-  background-image: url(../../pix/t/collapsed_empty.png);
+  background-image: url([[pix:t/collapsed_empty]]);
   background-position: center left;
   background-repeat: no-repeat;
 }
@@ -1884,7 +1883,7 @@ body.has_navigation_bar {
   height:100%;
   border-right:1px solid #bbb;
   border-bottom:1px solid #bbb;
-  background-image:url(gradient_vertical.jpg);
+  background-image:url([[pix:theme|gradient_vertical]]);
   background-position:100% 0%;
   background-repeat:repeat-y;
 }
@@ -1974,10 +1973,6 @@ body.has_navigation_bar {
   padding-bottom:2px;
 }
 
-.sideblock_js_expansion .footer .adminsearchform {
-    text-align:left;
-}
-
 /***
  *** Blogs
  ***/
@@ -2001,9 +1996,14 @@ body.has_navigation_bar {
   width: auto;
 }
 
-.officialblogtags {
-    display: inline;
-    font-weight: bold;
+.block_blog_externals a.delete {
+  margin-left: 6px;
+}
+
+.block_blog_externals div.newlink {
+  margin-top: 10px;
+  text-align: center;
+  width: 100%;
 }
 
 /***
@@ -2333,6 +2333,10 @@ border-width:0px;
   width: 1.5em;
 }
 
+.course-view .activity {
+  text-align:left;
+}
+
 .course-view .current .side {
 }
 
@@ -2437,11 +2441,10 @@ border-width:0px;
   margin-bottom: 0.5em;
   border-style:solid;
   border-width:1px;
-  clear: both;
 }
 .weeks .content,
 .topics .content {
-  padding: 5px 5px 15px 5px;
+  padding: 5px;
   margin: 0 1.7em 0 1.7em;
 }
 .weeks .right,
@@ -2634,6 +2637,7 @@ body#course-info .generalbox.info {
   width: 90%;
   margin-left: auto;
   margin-right: auto;
+  text-align: left;
 }
 
 .categorylist .category.image {
@@ -2816,6 +2820,7 @@ div.allcoursegrades {
 /* gradebook edit tree */
 
 .grade-edit-tree .gradetreebox {
+  width:70%;
   margin-left:auto;
   margin-right:auto;
   margin-top:10px;
@@ -2882,10 +2887,6 @@ div.allcoursegrades {
   margin-top: 7px;
 }
 
-.gradetreebox table.simple {
-  width: 70%;
-}
-
 /***
  *** Login
  ***/
@@ -3224,7 +3225,6 @@ body.notes .notesgroup {
 
 #qtypechoicecontainer {
   display: none;
-  background: white;
 }
 body.jsenabled #qtypechoicecontainer {
   display: block;
@@ -3493,7 +3493,7 @@ body.jsenabled #qtypechoicecontainer {
 
 .tabrow0 a span {
   padding: 10px 14px 0.35em 0;
-  background: transparent url(pix/tab/right.gif) no-repeat right top;
+  background: transparent url([[pix:theme|tab/right]]) no-repeat right top;
 }
 
 .tabrow1 li a span {
@@ -3502,29 +3502,29 @@ body.jsenabled #qtypechoicecontainer {
 
 .tabrow0 a {
   text-decoration: none;
-  background: transparent url(pix/tab/left.gif) no-repeat left top;
+  background: transparent url([[pix:theme|tab/left]]) no-repeat left top;
   margin: 0 -1px 0 0;
   padding: 10px 0 0.35em 13px;
 }
 
 .tabrow0 a:link:hover,
 .tabrow0 a:visited:hover {
-  background-image: url(pix/tab/left_hover.gif);
+  background-image: url([[pix:theme|left_hover]]);
 }
 
 .tabrow0 .here a:link:hover,
 .tabrow0 .here a:visited:hover {
-  background-image: url(pix/tab/left.gif);
+  background-image: url([[pix:theme|tab/left]]);
 }
 
 .tabrow0 a:link:hover span,
 .tabrow0 a:visited:hover span {
-  background-image: url(pix/tab/right_hover.gif);
+  background-image: url([[pix:theme|tab/right_hover]]);
 }
 
 .tabrow0 .here a:link:hover span,
 .tabrow0 .here a:visited:hover span {
-  background-image: url(pix/tab/right.gif);
+  background-image: url([[pix:theme|tab/right]]);
 }
 
 .tabrow0 .here a {
@@ -3557,7 +3557,7 @@ body.jsenabled #qtypechoicecontainer {
   list-style: none;
   border-top: 1px solid #aaa;
   line-height: normal;
-  background: transparent url(pix/tab/tabrow1.gif) repeat-x center left;
+  background: transparent url([[pix:theme|tab/tabrow1]]) repeat-x center left;
   font-size: 90%;
 }
 
@@ -4011,1915 +4011,439 @@ table.mod_index {
   margin-right:auto;
 }
 
+
 /***
- *** Modules: Assignment
+ *** Help files (/lang/-/help)
  ***/
-
-.userpicture,
-.picture user,
-.picture teacher {
-  width:35px;
-  height: 35px;
-  vertical-align:top;
+#help hr {
+  border: none;
+  height: 1px;
+  background: #ccc;
 }
-.modform {
-  text-align:center;
+#help .example1 {
+  color: #a00;
+}
+#help .success {
+  color: #080;
+}
+#help .center {
+  text-align: center;
 }
-#wordcount {
+#help .moreinfo {
   text-align: right;
 }
-
-/***
- *** Modules: Chat
- ***/
-
-.nextchatsession {
-  text-align:center;
+/* Equivalent to 1 and 5 nested blockquotes respectively. */
+#help .indent {
+  margin-left: 40px;
 }
-
-#mod-chat-gui_header_js-jsupdate {
-  margin:10px
+#help .indent-big {
+  margin-left: 160px;
+  margin-right:160px;
 }
-#mod-chat-gui_header_js-jsupdate .chat-event,
-#mod-chat-gui_header_js-jsupdate .chat-message {
-  width:100%;
+#help pre, #help code {
+  background: #eee;
+  border: 1px dashed #ddd;
+  padding: 3px;
+}
+#help #emoticons{
+  text-align: center;clear:both;width: 300px;margin-right: auto; margin-left:auto;
+}
+#help #emoticons ul{
+  list-style-type: none;
+}
+#help #emoticons li{
+  margin-bottom: 3px;
+  width: 120px;
+  border-left: 3px solid gray;
+  padding-left: 7px;
+  float: left;
+}
+/**
+ * comments 2.0
+ *
+ */
+.comment-ctrl {
+  max-width: 200px;
+  font-size: 12px;
+  display: none;
+  margin:0;
   padding:0;
-  margin-top:7px
-  display:block;
 }
-#mod-chat-view #chatcurrentusers .chatuserdetails {
-  vertical-align: middle;
+.comment-ctrl h5 {
+  margin:0;
+  padding: 5px;
 }
 
-#mod-chat-view #enterlink {
-  text-align: center;
-  margin-left: auto;
-  margin-right: auto;
-  width: 50%;
+.comment-area {
+  padding: 5px;
 }
-
-#mod-chat-gui_basic #participants ul {
-  margin:0px;
-  padding:0px;
-  list-style-type:none;
+.comment-area .bd {
 }
-
-#mod-chat-gui_basic #participants ul li {
-  display:inline;
-  margin-right:10px;
+.comment-area textarea {
+  width:100%;
+  border: 1px solid grey;
+  overflow:auto;
 }
 
-#mod-chat-gui_basic #participants ul li .userinfo {
-  display:inline;
+.comment-area .fd {
+  text-align:right;
+}
+.comment-meta span {
+  color:grey;
 }
 
-#mod-chat-gui_basic #messages dl {
-  padding:0px;
-  margin:1px;
+.comment-list-wrapper {
 }
 
-#mod-chat-gui_basic #messages dd,
-#mod-chat-gui_basic #messages dt {
-  margin-left:0px;
-  margin-right:5px;
-  padding:0px;
-  display:inline;
+.comment-list {
+  /*height: 150px;*/
+  font-size: 11px;
+  overflow:auto;
+  list-style:none;
+  padding:0;
+  margin:0;
 }
-#mod-chat-gui_ajax-index .mdl-chat-entry, .mdl-chat-my-entry {
-    clear:both;
-    display:block;
+.comment-list li {
+  margin: 2px;
+  margin-bottom:5px;
+  clear:both;
 }
-#mod-chat-gui_ajax-index #messages-list, #users-list {
-    list-style-type:none;
-    margin:0;
-    padding:0;
+
+.comment-paging{
+  /*background: #d8d8da;*/
+  text-align:center;
 }
-#mod-chat-gui_ajax-index #users-list a {
-    color: grey;
-    font-size: 10px;
+.comment-paging .pageno{
+  padding: 2px;
 }
-#mod-chat-gui_ajax-index #chat-header {
-    font-size: 200%;
+.comment-userpicture {
+  width: 20px;
+  float:left;
 }
-#mod-chat-gui_ajax-index #chat-header p{
-    display: inline;
-    font-size: 50%;
+.comment-content{
+  margin-left: 22px;
 }
-#mod-chat-gui_ajax-index .chat-event {
- color:grey;
- text-align:center;
+.comment-content div{
+  margin:0;
+  padding:0;
 }
-#mod-chat-gui_ajax-index .time, #mod-chat-gui_ajax-index .user{
-    color: grey;
-    font-size: 9px;
+.comment-content p{
+  padding:0;
+  margin:0 18px 0 0;
 }
-
-/***
- *** Modules: Choice
- ***/
-.button {
-  text-align:center;
+.comment-delete{
+  float:right;
+  text-align:right;
 }
-
-.attemptcell {
-  width:5px;
-  white-space: nowrap;
+.comment-container {
+  float:left;
+  width: 305px;
+  margin: 4px;
 }
 
-.anonymous,
-.names {
-  margin-left:auto;
-  margin-right:auto;
+/* CSS for shadows */
+.divshadow div {
+  position:absolute;
+  width:10px;
+  height:10px;
+  background-image:url([[pix:theme|shadow_corners]]);
+  background-repeat:no-repeat;
 }
-
-.downloadreport {
-  border:0px;
-  margin-left:auto;
-  margin-right:auto;
+.divshadow .shadow_top {
+  top:-10px;
+  right:0px;
+  width:100%;
+  background-image:url([[pix:theme|shadow_top_bottom]]);
+  background-position:0px 0px;
+  background-repeat:repeat-x;
 }
-
-.choiceresponse {
+.divshadow .shadow_bottom {
+  bottom:-10px;
+  right:0px;
   width:100%;
+  background-image:url([[pix:theme|shadow_top_bottom]]);
+  background-position:0px 100%;
+  background-repeat:repeat-x;
 }
-.choiceresponse .picture {
-  width:10px;
-  white-space: nowrap;
+.divshadow .shadow_left {
+  top:0px;
+  left:-10px;
+  height:100%;
+  background-image:url([[pix:theme|shadow_left_right]]);
+  background-position:0px 0px;
+  background-repeat:repeat-y;
 }
-
-.choiceresponse .fullname {
-  width:100%;
-  white-space: nowrap;
+.divshadow .shadow_right {
+  bottom:0px;
+  right:-10px;
+  height:100%;
+  background-image:url([[pix:theme|shadow_left_right]]);
+  background-position:100% 0px;
+  background-repeat:repeat-y;
 }
-
-
-.results.data {
-  vertical-align:top;
-  white-space: nowrap;
+.divshadow .shadow_top_right {
+  top:-10px;
+  right:-10px;
+  background-position:100% 0px;
 }
-
-/***
- *** Modules: Data
- ***/
-.fieldadd,
-.sortdefault,
-.defaulttemplate {
-  text-align:center;
+.divshadow .shadow_bottom_right {
+  bottom:-10px;
+  right:-10px;
+  background-position:100% 100%;
 }
-.datapreferences {
-  text-align:center;
+.divshadow .shadow_top_left {
+  top:-10px;
+  left:-10px;
+  background-position:0px 0px;
 }
-
-table.presets {
-  margin-left: auto;
-  margin-right: auto;
+.divshadow .shadow_bottom_left {
+  bottom:-10px;
+  left:-10px;
+  background-position:0px 100%;
 }
 
-/***
- ***
- *** Modules: Folder
- ***/
 
-#mod-folder-view .foldertree {
-  width: 90%;
-  margin-left: auto;
-  margin-right: auto;
+/*********** File picker **********/
+
+/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */
+/* copy from yui/examples/treeview/assets/css/folders/tree.css */
+/* first or middle sibling, no children */
+.file-picker .ygtvtn { background: url(../pix/y/tn.gif) 0 0 no-repeat; width:17px; height:22px; }
+/* first or middle sibling, collapsable */
+.file-picker .ygtvtm { background: url(../pix/y/tm.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* first or middle sibling, collapsable, hover */
+.file-picker .ygtvtmh { background: url(../pix/y/tmh.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* first or middle sibling, expandable */
+.file-picker .ygtvtp { background: url(../pix/y/tp.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* first or middle sibling, expandable, hover */
+.file-picker .ygtvtph { background: url(../pix/y/tph.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* last sibling, no children */
+.file-picker .ygtvln { background: url(../pix/y/ln.gif) 0 0 no-repeat; width:17px; height:22px; }
+/* Last sibling, collapsable */
+.file-picker .ygtvlm { background: url(../pix/y/lm.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* Last sibling, collapsable, hover */
+.file-picker .ygtvlmh { background: url(../pix/y/lmh.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* Last sibling, expandable */
+.file-picker .ygtvlp { background: url(../pix/y/lp.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* Last sibling, expandable, hover */
+.file-picker .ygtvlph { background: url(../pix/y/lph.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
+/* Loading icon */
+.file-picker .ygtvloading { background: url(../pix/y/loading.gif) 0 0 no-repeat; width:16px; height:22px; }
+/* the style for the empty cells that are used for rendering the depth
+ * of the node */
+.file-picker .ygtvdepthcell { background: url(../pix/y/vline.gif) 0 0 no-repeat; width:17px; height:22px; }
+.file-picker .ygtvblankdepthcell { width:17px; height:22px; }
+/* the style of the div around each node */
+.file-picker .ygtvitem { }
+.file-picker .ygtvitem  table{ margin-bottom:0; }
+.file-picker .ygtvitem  td { border:none;padding:0; }
+/* the style of the div around each node's collection of children */
+.file-picker .ygtvchildren { }
+* html .file-picker .ygtvchildren { height:1%; }
+/* the style of the text label in ygTextNode */
+.file-picker .ygtvlabel, .file-picker .ygtvlabel:link, .file-picker .ygtvlabel:visited, .file-picker .ygtvlabel:hover { margin-left:2px; text-decoration: none; }
+
+
+.file-picker{font-size:12px;}
+.file-picker strong{background:#FFFFCC}
+.file-picker a{color: #336699}
+.file-picker a:hover{background:#003366;color:white}
+.file-picker .fp-panel{padding:0;margin:0; text-align:left;}
+.file-picker .fp-login-form{text-align:center}
+.file-picker .fp-searchbar{float:right}
+.file-picker .fp-viewbar{width:300px;float:left}
+.file-picker .fp-toolbar{padding: .8em;background: #FFFFCC;text-align:center;margin: 3px}
+.file-picker .fp-toolbar a{padding: 0 .5em}
+.file-picker .fp-list{list-style-type:none;padding:0;float:left;width:100%;margin:0;}
+.file-picker .fp-list li{border-bottom:1px dotted gray;margin-bottom: 1em;}
+.file-picker .fp-repo-name{display:block;padding: .5em;margin-bottom: .5em}
+.file-picker .fp-pathbar{margin: .4em;border-bottom: 1px dotted gray;}
+.file-picker .fp-pathbar a{padding: .4em;}
+.file-picker .fp-rename-form{text-align:center}
+.file-picker .fp-rename-form p{margin: 1em;}
+.file-picker .fp-upload-form{margin: 2em 0;text-align:center}
+.file-picker .fp-upload-btn{clear:both;margin-top: 2em;}
+.file-picker .fp-upload-btn a{cursor: default;background: white;border:1px solid gray;color:black;padding: .5em}
+.file-picker .fp-upload-btn a:hover {background: grey;color:white}
+.file-picker .fp-paging{margin:1em .5em; clear:both;text-align:center;line-height: 2.5em;}
+.file-picker .fp-paging a{padding: .5em;border: 1px solid #CCC}
+.file-picker .fp-paging a.cur_page{border: 1px solid blue}
+.file-picker .fp-popup{text-align:center}
+.file-picker .fp-grid{float:left;text-align:center;}
+.file-picker .fp-grid div{overflow: hidden}
+.file-picker .fp-grid p{margin:0;padding:0;background: #FFFFCC}
+.file-picker .fp-grid .label{height:48px;text-align:center}
+.file-picker .fp-grid span{color:gray}
+.file-picker .fp-error {padding: 2em 0; margin: 3em 5px;text-align:center;background: #FFBBBB}
+.file-picker .fp-msg {padding: 2em 0; margin: 3em 5px;text-align:center;background: green}
+/* file picker search dialog */
+.file-picker div.bd{text-align:left}
+
+
+/* TODO: Fix IE6 somehow
+.yui-skin-sam .yui-panel .hd{}
+*/
+
+
+
+/*********** IE6 HACKS ***********/
+
+.ie6 .tabtree {
+  height: 100%;
 }
 
-/***
- *** Modules: Forum
- ***/
+.ie6 .tabrow0 {
+  padding-top: 10px;
+}
 
-#mod-forum-view .forummode {
-  text-align:center;
+.ie6 .tabrow0 li {
+  margin-left: 0;
 }
 
-.forumheaderlist,
-.forumpost {
-  border-width:1px;
-  border-style:solid;
-  border-collapse:separate;
+.ie6 .tabrow0 li.first {
+  margin-left: -4px;
+  margin-right: -4px;
 }
 
-.forumpost {
-  margin-top: 15px;
+.ie6 .tabrow0 li.last a {
+  margin-right: 0;
 }
 
-.forumpost .topic {
-  padding: 4px;
-  border-style:solid;
-  border-width: 0px;
-  border-bottom-width: 1px;
+.ie6 .tabrow0 li.onerow {
+  margin-right: 0;
 }
 
-.forumpost .commands {
-  padding-top: 0.5em;
-  text-align:right;
-  clear: both;
+.ie6 .tabrow0 a {
+  padding: 0 0 0 13px;
 }
 
-.forumpost .ratings {
-  padding-top: 1em;
-  text-align:right;
+.ie6 .tabrow0 a span {
+  padding: 12px 1em 4px 0;
 }
 
-.forumpost .attachments {
-  padding: 7px;
-  text-align:right;
+.ie6 .tabrow0 div,
+.tabrow0 ul {
+  top: 3.5em;
+  padding: 0.2em 0;
 }
 
-.forumpost .content {
-  padding: 4px;
+.ie6 form.mform input {
+  margin-left: expression((this.type=="text"||this.type=="file"||this.type=="password")?'-10px':'0');
 }
 
-.forumpost .footer {
-  padding-top: 0.5em;
-  text-align:right;
+#admin-user-user_bulk.ie6 form.mform input,
+#admin-user.ie6 form.mform input {
+  margin-left: 0;
 }
 
-.forumpost .link {
-  padding-top: 0.5em;
-  text-align:right;
-}
-
-.forumpost .left {
-  width: 35px;
-  padding: 4px;
-  text-align: center;
-  vertical-align: top;
-}
-
-.mod-forum .indent {
-  margin-left: 30px;
-}
-
-body#user-view .forumpost,
-.course .forumpost {
-  width: 100%;
-}
-
-body#mod-forum-search .c0 {
-  text-align: right;
-}
-
-body#mod-forum-search .introcontent {
-  padding: 15px;
-}
-
-.forumolddiscuss {
-  text-align: right;
-}
-
-.forumheaderlist {
-  width: 100%;
-}
-
-.forumheaderlist td {
-  border-width:1px 0px 0px 1px;
-  border-style:solid;
-}
-
-.forumheaderlist .replies {
-  text-align: center;
-  white-space: nowrap;
-}
-
-.forumheaderlist .picture {
-  width: 35px;
-}
-
-.forumheaderlist .discussion .starter {
-  vertical-align: middle;
-}
-
-.forumheaderlist .lastpost {
-  white-space: nowrap;
-  text-align: right;
-}
-
-.forumheaderlist .discussion .author {
-  white-space: nowrap;
-}
-.forumolddiscuss {
-  text-align:right;
-}
-.forumaddnew,
-.forumnodiscuss,
-.noticeboxcontent {
-  text-align:center;
-}
-
-#mod-forum-view .forumaddnew {
-  margin-bottom: 20px;
-}
-
-#mod-forum-view .forumcontrol .groupmenu {
-  float: left;
-  text-align:left;
-  white-space: nowrap;
-}
-
-#mod-forum-view .groupmenu {
-  float: left;
-  text-align:left;
-  white-space: nowrap;
-}
-
-#mod-forum-view .forumcontrol .subscription {
-  float: right;
-  text-align:right;
-  white-space: nowrap;
-}
-
-#mod-forum-view .subscription {
-  float: right;
-  text-align:right;
-  white-space: nowrap;
-}
-
-#mod-forum-index .subscription {
-  float: right;
-  text-align:right;
-  white-space: nowrap;
-}
-
-#mod-forum-view .unread {
-  padding-left: 3px;
-  padding-right: 3px;
-}
-#mod-forum-discuss .forumpost.unread .content {
-  border-style: solid;
-  border-width: 2px;
-}
-#mod-forum-discuss .ratingsubmit {
-  text-align:center;
-  padding:10px;
-}
-#mod-forum-index .unread img,
-#mod-forum-view .unread img
-{
-  margin-left: 5px;
-}
-
-#mod-forum-discuss .discussioncontrols td {
-  width: 33%;
-  text-align:center;
-}
-
-#email .unsubscribelink {
-  margin-top:20px;
-  border-width: 0px 1px 0px 0px;
-  border-style: solid;
-  text-align:center;
-}
-
-#mod-forum-view .subscription {
-  margin: 5px 0;
-}
-
-/***
- *** Modules: Glossary
- ***/
-
-.glossarypost .commands {
-  width: 200px;
-  white-space: nowrap;
-}
-
-#mod-glossary-comments .glossarypost,
-#mod-glossary-comment .glossarypost {
-  margin-top: 15px;
-}
-
-.entryboxheader {
-  border-width: 1px 1px 0px 1px;
-  border-style: solid;
-}
-
-.entrybox {
-  width: 100%;
-  border-width: 0px 1px 1px 1px;
-  border-style: solid;
-}
-
-.entrybox hr {
-  border-left:none;
-  border-right:none;
-}
-
-.glossarypost {
-  width: 95%;
-  border-width:1px;
-  border-style:solid;
-  border-collapse:separate;
-  margin-left:auto;
-  margin-right:auto;
-  margin-bottom: 5px;
-  text-align: left;
-}
-
-.entrylist {
-  border-width:0px;
-}
-
-.entrylowersection {
-  padding-top: 10px;
-}
-
-.entrylowersection table{
-  width: 100%;
-}
-
-.entrylowersection .aliases {
-  text-align:center;
-}
-
-.entrylowersection .icons,
-.entrylowersection .ratings {
-  text-align:right;
-  padding-right: 5px;
-}
-
-.entrylowersection .ratings {
-  padding-bottom: 2px;
-}
-
-.glossarycategoryheader {
-  width: 95%;
-  margin-left:auto;
-  margin-right:auto;
-}
-
-.glossaryformatheader {
-  width: 90%;
-}
-
-.glossarypost .entry {
-  padding: 3px;
-}
-
-.glossarypost .picture {
-  width: 35px;
-}
-
-.glossarycomment {
-  border-width:1px;
-  border-style:solid;
-  border-collapse:separate;
-  margin-bottom: 5px;
-  text-align: left;
-}
-
-.glossarycomment .entry {
-  padding: 3px;
-}
-
-.glossarycomment .picture {
-  width: 35px;
-}
-
-.glossarycomment .icons {
-  text-align: right;
-}
-
-.glossarydisplay {
-  width: 90%;
-  margin-left:auto;
-  margin-right:auto;
-  text-align:center;
-}
-
-.glossarydisplay .tabs {
-  width: 100%;
-}
-
-.glossarydisplay .separator {
-  width: 4px;
-}
-
-.glossarydisplay .tabs .selected,
-.glossarydisplay .tabs .inactive,
-.glossarydisplay .tabs .general {
-}
-
-.glossaryimportexport {
-  margin-left:auto;
-  margin-right:auto;
-  text-align:center;
-}
-
-.glossarypopup {
-  width: 95%;
-}
-
-.glossaryapproval {
-  width: 100%;
-}
-
-.mod-glossary .glossarydisplay .tabs {
-  margin-bottom: 0px;
-}
-
-.mod-glossary .glossarydisplay .tabs .side {
-  border-style: none;
-  border-width: 0px;
-  width: auto;
-}
-
-.glossaryexplain,
-.glossaryaddentry {
-  text-align: center;
-}
-
-.mod-glossary .tabrow0 {
-  padding-bottom: 5px;
-}
-
-#mod-glossary-view .glossarycontrol {
-  float: right;
-  text-align:right;
-  white-space: nowrap;
-  margin: 5px 0;
-}
-
-/***
- *** Modules: Journal
- ***/
-#mod-journal-view .lastedit,
-#mod-journal-view .editend {
-  margin: 5px;
-  text-align: center;
-}
-#mod-journal-view .feedbackbox {
-  width: 75%;
-  border-collapse: separate;
-}
-#mod-journal-view .entrycontent {
-  padding: 3px;
-}
-#mod-journal-view .picture {
-  width: 35px;
-}
-#mod-journal-view .grade {
-  text-align: right;
-}
-#mod-journal-view .info {
-  margin-bottom: 5px;
-  text-align: right;
-}
-
-
-/***
- *** Modules: Label
- ***/
-
-/***
- *** Modules: Lesson
- ***/
-#mod-lesson-lesson #page .addform {
-  text-align: center;
-}
-#mod-lesson-edit #page .label {
-  font-weight: bold;
-}
-#mod-lesson-edit #page .labelcorrect {
-  text-decoration: underline;
-  font-weight: bold;
-}
-.lessonmediafilecontrol {
-  text-align: center;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-#mod-lesson-view #content .invisiblefieldset {
-  display: block;
-  text-align: left;
-}
-
-body.jsenabled .jshidewhenenabled {
-  display:none;
-}
-
-/***
- *** Modules: Quiz
- ***/
-
-#mod-quiz-view .quizinfo {
-  text-align: center;
-}
-#mod-quiz-view #page .quizgradefeedback,
-#mod-quiz-view #page .quizattempt
-{
-  text-align: center;
-}
-#mod-quiz-view #page .quizattemptsummary td p {
-  margin-top: 0;
-}
-#mod-quiz-view .generalbox#feedback {
-  width:70%;
-  margin-left:auto;
-  margin-right:auto;
-  padding-bottom:15px;
-}
-#mod-quiz-view .generalbox#feedback h2 {
-  margin: 0 0;
-}
-#mod-quiz-view .generalbox#feedback .overriddennotice {
-  text-align: center;
-  font-size: 0.7em;
-}
-#mod-quiz-view .generalbox#feedback h3 {
-  text-align: left;
-}
-
-.generalbox#passwordbox { /* Should probably match .generalbox#intro above */
-  width:70%;
-  margin-left:auto;
-  margin-right:auto;
-}
-#passwordform {
-  margin: 1em 0;
-}
-#mod-quiz-attempt .submitbtns,
-#mod-quiz-review .submitbtns {
-  text-align: left;
-  margin-top: 1.5em;
-}
-#mod-quiz-summary .submitbtns {
-  margin-top: 1.5em;
-}
-#mod-quiz-summary #content {
-  text-align: center;
-}
-#mod-quiz-summary .questionflag {
-  width: 16px;
-  height: 16px;
-  vertical-align: middle;
-}
-#mod-quiz-attempt #quiz-timer,
-#mod-quiz-summary #quiz-timer {
-  display: none; /* Revealed by JavaScript if applicable */
-}
-#mod-quiz-summary #quiz-timer {
-  margin-top: 1em;
-}
-#mod-quiz-attempt #quiz-time-left {
-  font-weight: bold;
-}
-
-body#question-preview .quemodname,
-body#question-preview .controls
-{
-  text-align: center;
-}
-body#question-preview .quemodname, body#question-preview .controls {
-  text-align: center;
-}
-
-#mod-quiz-attempt #page .controls,
-#mod-quiz-summary #page .controls,
-#mod-quiz-review #page .controls {
-  text-align: center;
-  margin: 8px auto;
-}
-#mod-quiz-review .pagingbar {
-  margin: 1.5em auto;
-}
-#mod-quiz-review .pagingbar {
-  margin: 1.5em auto;
-}
-table.quizreviewsummary {
-  width: 100%;
-}
-table.quizreviewsummary tr {
-}
-table.quizreviewsummary th.cell {
-  padding: 1px 0.5em 1px 1em;
-  font-weight: bold;
-  text-align: right;
-  width: 10em;
-}
-table.quizreviewsummary td.cell {
-  padding: 1px 1em 1px 0.5em;
-  text-align: left;
-}
-
-#mod-quiz-mod #reviewoptionshdr .fitem,
-#adminquizreviewoptions .group {
-  float: left;
-  width: 33%;
-  clear: none;
-}
-#mod-quiz-mod #reviewoptionshdr .fitem {
-  width: 30%;
-  margin-left: 10px;
-}
-#mod-quiz-mod #reviewoptionshdr .fitemtitle,
-#adminquizreviewoptions .fitemtitle {
-  width: 100%;
-  font-weight: bold;
-  text-align: left;
-  height: 2.5em;
-  margin-left: 0;
-}
-#mod-quiz-mod #reviewoptionshdr fieldset.fgroup {
-  width: 100%;
-  text-align: left;
-  margin-left: 0;
-}
-#mod-quiz-mod #reviewoptionshdr fieldset.fgroup span,
-#adminquizreviewoptions span {
-  float: left;
-  clear: left;
-}
-#adminquizreviewoptions {
-  margin-bottom: 0.5em;
-}
-
-.quizquestionlistcontrols {
-  text-align: center;
-}
-
-#mod-quiz-report table#attempts,
-#mod-quiz-report div#commands,
-#mod-quiz-report table#itemanalysis
-{
-  width: 80%;
-  margin: auto;
-}
-#mod-quiz-report table.titlesleft td.c0
-{
-  font-weight: bold;
-}
-#mod-quiz-report table#attempts,
-#mod-quiz-report h2.main {
-  clear: both;
-}
-#mod-quiz-report table#attempts {
-  margin: 20px auto;
-}
-#mod-quiz-report table#attempts .header,
-#mod-quiz-report table#attempts .cell
-{
-  padding: 4px;
-}
-#mod-quiz-report table#attempts .header .commands {
-  display: inline;
-}
-#mod-quiz-report table#attempts .picture {
-  width: 40px;
-}
-#mod-quiz-report table#attempts td {
-  border-left-width: 1px;
-  border-right-width: 1px;
-  border-left-style: solid;
-  border-right-style: solid;
-  vertical-align: middle;
-}
-#mod-quiz-report table#attempts .header {
-  text-align: left;
-}
-#mod-quiz-report table#attempts .picture {
-  text-align: center !important;
-}
-#mod-quiz-report .controls {
-  text-align: center;
-}
-
-#mod-quiz-report table#itemanalysis {
-  margin: 20px auto;
-}
-#mod-quiz-report table#itemanalysis .header,
-#mod-quiz-report table#itemanalysis .cell
-{
-  padding: 4px;
-}
-#mod-quiz-report table#itemanalysis .header .commands {
-  display: inline;
-}
-#mod-quiz-report table#itemanalysis td {
-  border-width: 1px;
-  border-style: solid;
-}
-#mod-quiz-report table#itemanalysis .header {
-  text-align: left;
-}
-#mod-quiz-report table .numcol {
-  text-align: center;
-  vertical-align : middle !important;
-}
-
-#mod-quiz-report table#itemanalysis .uncorrect {
-  color: red;
-}
-
-#mod-quiz-report table#itemanalysis .correct {
-  color: blue;
-  font-weight : bold;
-}
-
-#mod-quiz-report table#itemanalysis .partialcorrect {
-  color: green !important;
-}
-
-#mod-quiz-report table#itemanalysis .qname {
-  color: green !important;
-}
-
-/* manual grading */
-#mod-quiz-grading table#grading
-{
-  width: 80%;
-  margin: auto;
-}
-
-#mod-quiz-grading table#grading
-{
-  margin: 20px auto;
-}
-
-#mod-quiz-grading table#grading .header,
-#mod-quiz-grading table#grading .cell
-{
-  padding: 4px;
-}
-
-#mod-quiz-grading table#grading .header .commands
-{
-  display: inline;
-}
-
-#mod-quiz-grading table#grading .picture
-{
-  width: 40px;
-}
-
-#mod-quiz-grading table#grading td
-{
-  border-left-width: 1px;
-  border-right-width: 1px;
-  border-left-style: solid;
-  border-right-style: solid;
-  vertical-align: bottom;
-}
-
-.mod-quiz .gradingdetails {
-  font-size: small;
-}
-.quizattemptcounts {
-  clear : left;
-  text-align: center;
-  margin: 6px 0;
-}
-#quiznavigation .qnbutton {
-  display: block;
-  float: left;
-  width: 1.5em;
-  height: 1.5em;
-  overflow: hidden;
-  margin: 0.3em 0.3em 0.3em 0;
-  padding: 0;
-  border: 1px solid #bbb;
-  background: #eee no-repeat top right;
-  text-align: center;
-  vertical-align: middle;
-  cursor: pointer;
-  white-space: normal;
-}
-#quiznavigation #user-picture {
-  margin: 0.5em 0;
-}
-#quiznavigation #user-picture img {
-  width: auto;
-  height: auto;
-  float: left;
-}
-#quiznavigation .othernav {
-  clear: both;
-}
-#quiznavigation .othernav a,
-#quiznavigation .othernav input {
-  display: block;
-  margin: 0.5em 0;
-}
-#quiznojswarning {
-  font-size: 0.7em;
-  line-height: 1.1;
-}
-.jsenabled #quiznojswarning {
-  display: none;
-}
-.mod-quiz div.tabtree a span img.iconsmall {
-  vertical-align: baseline;
-}
-#mod-quiz-edit div.sideblock{
-  float:right;
-  width:30%;
-  right:0.3em;
-  padding-bottom:0.5em;
-  display:block;
-}
-
-#mod-quiz-edit div.quizcontents{
-  float:left;
-  width:70%;
-  display:block;
-}
-
-#mod-quiz-edit div.quizwhenbankcollapsed{
-  width:100%;
-}
-
-#mod-quiz-edit div.quizcontents,h2.main{
-  clear:left;
-}
-
-#mod-quiz-edit .addpage{
-  clear:both;
-  padding-top:0.3em;
-  float:right;
-  margin-right:2em;
-}
-
-#mod-quiz-edit h2.main{
-  display:inline;
-  padding-right:1em;
-}
-
-#mod-quiz-edit .statusdisplay {
-  clear: both;
-  margin: 0.3em 1em 0.3em 0;
-  padding: 1px ; /* Stop margin collapse. */
-}
-#mod-quiz-edit .statusdisplay p {
-  margin: 0.4em;
-}
-
-#mod-quiz-edit div.quizpage{
-  display:block;
-  clear:both;
-  width:100%;
-}
-
-#mod-quiz-edit div.quizpage span.pagetitle{
-  margin-top:0.3em;
-  float:left;
-  display:block;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols .moveselectedonpage{
-  clear:right;
-  float:right;
-  padding:0.5em 0.3em;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols .addnewpagesafterselected,#mod-quiz-edit .repaginatecommand{
-  float:right;
-  clear:right;
-  padding-right:1em;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols .deleteselected{
-  float:right;
-  margin-right:1em;
-}
-
-#mod-quiz-edit div.reorder .reordercontrols{
-  clear:both;
-  padding-right:1em;
-  margin-top:0.5em;
-  padding-top:0.5em;
-  padding-bottom:0.5em;
-}
-
-#mod-quiz-edit div.quizpage .pagecontent{
-  margin-top:0.3em;
-  display:block;
-  float:left;
-  position:relative;
-  margin-left:0.3em;
-  margin-bottom:0.2em;
-  border-left:solid #777 thin;
-  line-height:1.3em;
-  -webkit-border-radius:0.6em;
-  -webkit-border-radius-bottomleft:0;
-  -webkit-border-radius-topleft:0;
-  border-radius:0.6em;
-  border-radius-bottomleft:0;
-  border-radius-topleft:0;
-  width:88%;
-  padding:0.15em 0 0.3em;
-}
-
-#mod-quiz-edit div.question{
-  clear:left;
-  width:100%;
-}
-
-#mod-quiz-edit div.question div.qnum{
-  display:block;
-  float:left;
-  width:1.4em;
-  padding-right:0.3em;
-  padding-left:0;
-  z-index:99;
-}
-
-#mod-quiz-edit div.reorder div.question div.qnum{
-  width:2.9em;
-  padding-top:0.1em;
-}
-/*edit tab*/
-#mod-quiz-edit div.editq div.question div.qnum{
-  padding-top:0.2em;
-}
-
-#mod-quiz-edit div.editq div.question{
-  padding-top:0.3em;
-}
-
-#mod-quiz-edit div.reorder div.question{
-  padding-top:0.2em;
-}
-
-#mod-quiz-edit div.question div.questioncontainer{
-  background-color:#ffc;
-}
-
-#mod-quiz-edit div.editq div.question div.content{
-  width:87%;
-  float:left;
-  position:relative;
-  -webkit-border-radius:0.6em;
-  -webkit-border-radius-bottomleft:0;
-  -webkit-border-radius-topleft:0;
-  border-radius:0.6em;
-  border-radius-bottomleft:0;
-  border-radius-topleft:0;
-  line-height:1.4em;
-  padding:0.5em;
-}
-
-#mod-quiz-edit .reorder div.question div.content{
-  width:87%;
-  float:left;
-  position:relative;
-  -webkit-border-radius:0.3em;
-  -webkit-border-radius-bottomleft:0;
-  -webkit-border-radius-topleft:0;
-  border-radius:0.3em;
-  border-radius-bottomleft:0;
-  border-radius-topleft:0;
-  line-height:1.2em;
-  padding:0.1em;
-}
-
-#mod-quiz-edit div.question div.content div.points{
-  top:0.5em;
-  border-left:#FFF solid 0.4em;
-  width:8.5em;
-  padding:0.2em;
-}
-#mod-quiz-edit div.question div.content div.points input{
-  width:2em;
-  padding:0;
-}
-#mod-quiz-edit div.question div.content div.points input.pointssubmitbutton{
-  width:auto;
-}
-
-#mod-quiz-edit .questionbankwindow select#catmenu_jump{
-  /* In Opera9, IE6 the width of the
-  select obeys the width of its content
-  by default. This prevents that. */
-  width:100%;
-}
-
-#mod-quiz-edit .collapsed .container{
-  display: none;
-}
-
-#mod-quiz-edit .collapsed .container{
-  display: none;
-}
-#mod-quiz-edit .questionbankwindow #showbankcmd{
-  display:none;
-}
-#mod-quiz-edit .collapsed #showbankcmd{
-  display:inline;
-}
-#mod-quiz-edit .questionbankwindow #hidebankcmd{
-  display:inline;
-}
-#mod-quiz-edit .collapsed #hidebankcmd{
-  display:none;
-}
-
-#mod-quiz-edit .questionbankwindow div.header{
-  padding-top:0.2em;
-}
-
-#randomquestiondialog_c select{
-  width:100%;
-}
-
-
-#mod-quiz-edit div.question div.content div.points,
-#mod-quiz-edit div.question div.content div.qorder{
-  line-height:1em;
-  max-width:30%;
-  position:absolute;
-  right:50px;
-  -webkit-border-radius:0.2em;
-  -webkit-border-radius-bottomleft:0;
-  -webkit-border-radius-topleft:0;
-  border-radius:0.2em;
-  border-radius-bottomleft:0;
-  border-radius-topleft:0;
-  z-index:900;
-  display:block;
-  margin:0;
-}
-
-
-#mod-quiz-edit div.question div.content .editicon{
-  width:15px;
-}
-
-#mod-quiz-edit .editq div.questioncontentcontainer  div.singlequestion img{
-  float:left;
-  padding-top:0.3em;
-  padding-right:0.3em;
-}
-
-#categoryquestions .header {
-  text-align: center;
-  padding: 0 2px;
-}
-
-#categoryquestions th.modifiername .sorters,
-#categoryquestions th.creatorname .sorters {
-  font-weight: normal;
-  font-size: 0.8em;
-}
-
-#mod-quiz-edit div.question div.content .questionname,
-#categoryquestions .questionname{
-  white-space:nowrap;
-  overflow:hidden;
-  zoom:1;
-  position:relative;
-  max-width:20%;
-}
-#mod-quiz-edit div.question div.content .singlequestion .questionname,
-#mod-quiz-edit div.question div.content .singlequestion .questiontext{
-  display:inline-block;
-}
-
-#mod-quiz-edit div.editq div.question div.content .singlequestion a .questionname,
-#mod-quiz-edit div.editq div.question div.content .singlequestion a .questiontext{
-  float:left;
-}
-
-#mod-quiz-edit .quizquestionlistcontrols{
-  display:inline;
-}
-
-#mod-quiz-edit div.question div.content .questiontext,
-#categoryquestions .questiontext{
-  -o-text-overflow:ellipsis;
-  text-overflow:ellipsis;
-  position:relative;
-  zoom:1;
-  padding-left:0.3em;
-  max-width:40%;
-  overflow:hidden;
-  white-space:nowrap;
-  text-overflow:ellipsis;
-}
-#mod-quiz-edit div.editq div.question div.description div.content .questiontext {
-  max-width: 75%;
-}
-
-#mod-quiz-edit div.quizpage .pagecontent .pagestatus{
-  -webkit-border-radius-bottomright:0.3em;
-  -webkit-border-radius-topright:0.3em;
-  border-radius-bottomright:0.3em;
-  border-radius-topright:0.3em;
-  margin:0.3em;
-  padding:0.1em 0.1em 0.1em 0.3em;
-}
-
-#mod-quiz-edit div.question div.content .questiontype{
-  display:block;
-  clear:left;
-  float:left;
-}
-
-#mod-quiz-edit div.question div.content .questionpreview{
-  display:block;
-  float:left;
-  margin-left:0.3em;
-  padding-left:0.2em;
-  padding-right:0.2em;
-}
-
-#mod-quiz-edit div.question div.content div.quiz_randomquestion .questionpreview{
-  display:inline;
-  float:none;
-}
-
-#mod-quiz-edit div.question div.content div.questioncontrols{
-  float:right;
-  width:45px;
-  position:absolute;
-  right:0.3em;
-  top:0;
-  z-index:900;
-  display:block;
-  padding:0.2em;
-}
-
-#mod-quiz-edit div.question div.content div.questioncontrols img.upwithoutdown{
-  padding-right:12px;
-  display:inline;
-}
-
-#mod-quiz-edit .quizpagedelete{
-  position:absolute;
-  top:0.2em;
-  right:0.2em;
-  display:inline;
-  z-index:900;
-}
-
-#mod-quiz-edit .quizpagedelete img {
-  background-color:#d6d6d6;
-  padding:0.6em;
-}
-
-#mod-quiz-edit .pagecontrols {
-  clear:both;
-  margin-left:0.5em;
-  padding-top:0.5em;
-}
-
-#mod-quiz-edit .pagecontrols .singlebutton {
-  float:left;
-  margin-left: 1em;
-}
-#mod-quiz-edit .pagecontrols .helplink {
-  float:left;
-}
-
-#mod-quiz-edit div.quizpage .pagecontent form.randomquestionform div{
-  /* it is a mystery why this has to be inline-table but
-     otherwise the layout gets screwed, even if
-     it is "inline" */
-  display: inline-table;
-}
-
-#mod-quiz-edit div.quizpage .pagecontent form.randomquestionform div input{
-  display: inline;
-}
-
-/* a CSS class YUI container creates on the fly: */
-#mod-quiz-edit div#randomquestiondialog_c{
-  width:90%;
-}
-
-
-#mod-quiz-edit div#randomquestiondialog_c .mform,
-#mod-quiz-edit div#repaginatedialog .mform{
-  margin-left:auto;
-  margin-right:auto;
-}
-
-#mod-quiz-edit div.container div.generalbox{
-  position:relative;
-  display:block;
-  border:0 none;
-  margin:0;
-  padding:0;
-}
-
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist{
-  padding-left:0.2em;
-  padding-right:0.2em;
-  clear:both;
-  margin:0.5em;
-  margin-top:0.8em;
-}
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist .totalquestionsinrandomqcategory{
-  overflow:auto;
-  white-space:normal;
-}
-
-
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul{
-  list-style-type:none;
-  margin:0;
-  padding:0;
-}
-#mod-quiz-edit .reorder .questioncontentcontainer .quiz_randomquestion{
-
-  position:relative;
-}
-
-#mod-quiz-edit .reorder div.question div.content div.quiz_randomquestion{
-  line-height:1em;
-}
-
-#mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory label{
-  max-width: 25%;
-  overflow:hidden;
-  padding-left:0.3em;
-  white-space:nowrap;
-  display:inline-block;
-}
-#mod-quiz-edit .reorder .questioncontentcontainer .randomquestionfromcategory label{
-  overflow:hidden;
-  white-space:nowrap;
-  display:inline-block;
-}
-
-#mod-quiz-edit .editq div.question div.content .randomquestioncategory{
-  margin-top:0.4em;
-  position:relative;
-  display:inline-block;
-
-}
-
-#mod-quiz-edit .editq div.question div.content .randomquestioncategory a{
-  display:block;
-  max-width:15em;
-  overflow: hidden;
-  text-overflow:ellipsis;
-  -o-text-overflow:ellipsis;
-  white-space: nowrap;
-  float:left;
-  position:relative;
-}
-#mod-quiz-edit .editq div.question div.content .questionpreview{
-  float:left;
-}
-#mod-quiz-edit .editq div.question div.content .questionpreview a{
-  font-weight:normal;
-  margin-left:0em;
-  display:inline;
-  float:none;
-}
-#mod-quiz-edit .editq div.question div.content .randomquestioncategory .questionpreview img{
-  padding-right:0.3em;
-}
-
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul li img{
-  padding-right:0.3em;
-}
-
-
-#mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory,
-#mod-quiz-edit .reorder .questioncontentcontainer .randomquestionfromcategory,
-#mod-quiz-edit .reorder div.question div.content .questionpreview{
-  display:inline;
-  float:none;
-}
-
-#mod-quiz-edit .reorder .questioncontentcontainer{
-  position:relative;
-  overflow:hidden;
-  white-space:nowrap;
-}
-
-#mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory{
-  overflow:hidden;
-  white-space:nowrap;
-}
-
-#mod-quiz-edit .reorder fieldset{
-  display:inline;
-}
-
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul li{
-  clear:left;
-  width:100%;
-  overflow:hidden;
-  white-space:nowrap;
-}
-
-#mod-quiz-edit .questioncontentcontainer div.randomquestionqlist ul li span{
-  display:inline;
-}
-
-/*start question bank*/
-.questionbankwindow .choosecategory,
-.questionbankwindow .createnewquestion {
-  padding: 0.3em;
-}
-.questionbankwindow .createnewquestion .singlebutton {
-  display: inline;
-}
-.questionbankwindow #catmenu_jump {
-  display: block;
-}
-#mod-quiz-edit .questionbankwindow .createnewquestion select,
-#mod-quiz-edit .questionbankwindow #catmenu select,
-#mod-quiz-edit .questionbankwindow #menucategory {
-  width: 100%;
-}
-table#categoryquestions {
-  width: 100%;
-  overflow: hidden;
-  table-layout: fixed;
-}
-
-table#categoryquestions td,#mod-quiz-edit table#categoryquestions th{
-  overflow:hidden;
-  white-space:nowrap;
-}
-
-#categoryquestions .iconcol {
-  width: 15px;
-  text-align: center;
-  padding: 0;
-}
-
-#categoryquestions .checkbox {
-  width: 19px;
-  text-align: center;
-  padding: 0;
-}
-
-#categoryquestions .qtype {
-  text-align: center;
-}
-
-#categoryquestions .qtype {
-  width: 24px;
-  padding: 0;
-}
-
-#categoryquestions .questiontext p {
-  margin: 0;
-}
-.categoryinfo {
-  padding: 0.3em;
-}
-
-#mod-quiz-edit .paging{
-  margin-top:0;
-  margin-bottom:0;
-  display:block;
-}
-
-#mod-quiz-edit .pagingbottom{
-  padding-bottom:0.3em;
-}
-
-#mod-quiz-edit div.questionbank form .invisiblefieldset{
-  clear:both;
-}
-
-#mod-quiz-edit .sideblock .content{
-  padding:0;
-}
-
-#mod-quiz-edit .questionbank .categorysortopotionscontainer{
-  padding-top:0.5em;
-  margin-top:0.3em;
-}
-
-.questionbank div.categoryquestionscontainer,
-.questionbank .categorysortopotionscontainer,
-.questionbank .categorypagingbarcontainer,
-.questionbank .categoryselectallcontainer{
-  padding-left:0.3em;
-  padding-right:0.3em;
-}
-
-.noquestionsincategory{
-  clear:both;
-  padding-top:1em;
-  padding-bottom:1em;
-}
-
-.modulespecificbuttonscontainer{
-  padding-left:0.3em;
-  padding-right:0.3em;
-}
-
-#mod-quiz-edit div#footer{
-  clear:both;
-  padding-top:1em;
-}
-
-
-/* these will toggle if js is enabled */
-body #quizcontentsblock #repaginatedialog{
-  display: none;
-}
-body.jsenabled #quizcontentsblock #repaginatedialog{
-  display: block;
-}
-body.jsenabled #quizcontentsblock #repaginatedialog .hd{
-  display:block;
-}
-body.jsenabled #quizcontentsblock #repaginatedialog .bd{
-  padding:1em;
-}
-body.jsenabled #quizcontentsblock  .repaginatecommand #repaginatecommand{
-  display:block;
-}
-
-/***
- *** Modules: Resource
- ***/
-
-#mod-resource-view .resourcecontent {
-  text-align:center;
-  margin:20px;
-}
-
-#mod-resource-view .resourcepdf {
-  width: 100%;
-  padding-top: 15px;
-  text-align: center
-}
-
-.resourcecontent object {
-  height:480px;
-  width:600px;
-}
-
-.resourcepdf object{
-  height: 800px;
-  width: 800px;
-}
-
-.mod-resource .modified {
-  text-align:center;
-}
-
-.mod-resource .popupnotice {
-  text-align:center;
-  margin:40px;
-}
-
-#mod-resource-view div#footer {
-  margin-top: 5px;
-}
-
-/***
- *** Modules: Scorm
- ***/
-
-/***
- *** Modules: Survey
- ***/
-.resultgraph {
-  text-align:center;
-  border:1px solid;
+.ie6 form.mform textarea {
+ margin-left: -10px;
 }
 
-.reportsummary,
-.studentreport,
-.reportbuttons {
-  text-align:center;
+.ie6 .que .info {
+  display: inline;
 }
 
-.centerpara {
-  text-align:center;
+.ie6 #adminsettings .form-setting,
+.ie6 #adminsettings .form-description {
+  display:inline-block; padding-left:2px;
 }
 
-.fullnamecell {
-  width:10%;
-  vertical-align:top;
-  white-space: nowrap;
+.ie6.course-view li.activity {
+  height:0;
 }
-
-.questiontext {
-  font-size:1em;
+#mod-quiz-edit.ie6 div.question div.content .questiontext,
+#mod-quiz-edit.ie6 #categoryquestions .questionname{
+    /*ie6 shows this as an arrow if this is not specified*/
+    cursor: pointer;
 }
-
-.smalltext {
-  font-size: 0.75em;
+#mod-quiz-edit.ie6 div.question div.content .questionname,
+#mod-quiz-edit.ie6 #categoryquestions .questiontext{
+    /*ie6 shows this as an arrow if this is not specified*/
+    cursor: pointer;
 }
-
-#surveyform th {
-  font-weight: normal;
-  text-align: left;
+.mod-quiz.ie6 div.tabtree a span img.iconsmall {
+  margin: 0;
+  vertical-align: baseline;
+  position: relative;
+  top: 1px;
 }
-#surveyform th.hresponse {
-  text-align: center;
-  width: 9%;
+#mod-quiz-edit.ie6 div.question div.content .questiontext,#categoryquestions .questiontext{
+    width:50%;
 }
-
-.rblock label {
-  display: block;
-  text-align: center;
+#mod-quiz-edit.ie6 div.question div.content .questionname,#categoryquestions .questionname{
+    width:20%;
 }
-
-.foundthat,
-.preferthat {
-  white-space: nowrap;
+#mod-quiz-edit.ie6 .editq div.question div.content .randomquestioncategory a{
+    width:40%;
 }
-
-.qnummiddlecell {
-  vertical-align:middle;
+#mod-quiz-edit.ie6 .reorder .questioncontentcontainer .randomquestioncategory label{
+    width: 35%;
 }
 
-.optioncell {
-  width: 50%;
-  vertical-align: top;
+.ie6 #help_icon_tooltip .yui-tt-shadow-visible {
+  background-color: transparent;
 }
 
-.buttoncell {
-  width:5%;
-}
+/*********** IE7 HACKS ***********/
 
-.questioncell {
-  width:50%;
-  vertical-align:top;
+.ie7 .tabrow0 li {
+  margin-left: 0;
 }
 
-.whitecell {
-  background-color:white;
-}
-/***
- *** Modules: Wiki
- ***/
-.sideblockheading,
-.howtowiki {
-  text-align:right;
+.ie7 .tabrow0 li.first {
+  margin-right: -4px;
 }
 
-.wikisearchform,
-.wikilinksblock,
-wikiadminactions {
-  text-align:center;
+.ie7 .tabrow0 li.onerow {
+  margin-right: 0;
 }
 
-.wikilinkright{
-  text-align:right;
-  padding-bottom: 0.5em;
+.ie7 .tabrow0 a {
+  display: inline-block;
+  padding: 8px 0 0.35em 13px;
+  line-height: 1.5em;
 }
 
-.wikiexportbox{
-  margin-left:auto;
-  margin-right:auto;
-}
-/***
- *** Modules: Workshop
- ***/
-.redfont {
-  color: red;
+.ie7 .tabrow0 a span {
+  padding: 10px 1em 10px 0;
 }
 
-.workshopuploadform,
-.workshopkey {
-  text-align:center;
+.ie7 .tabrow0 div,
+.tabrow0 ul {
+  top: 2.6em;
+  padding: 0.2em 0;
 }
 
-
-/***
- *** Help files (/lang/-/help)
- ***/
-#help hr {
-  border: none;
-  height: 1px;
-  background: #ccc;
-}
-#help .example1 {
-  color: #a00;
-}
-#help .success {
-  color: #080;
-}
-#help .center {
-  text-align: center;
-}
-#help .moreinfo {
-  text-align: right;
-}
-/* Equivalent to 1 and 5 nested blockquotes respectively. */
-#help .indent {
-  margin-left: 40px;
-}
-#help .indent-big {
-  margin-left: 160px;
-  margin-right:160px;
-}
-#help pre, #help code {
-  background: #eee;
-  border: 1px dashed #ddd;
-  padding: 3px;
-}
-#help #emoticons{
-  text-align: center;clear:both;width: 300px;margin-right: auto; margin-left:auto;
-}
-#help #emoticons ul{
-  list-style-type: none;
-}
-#help #emoticons li{
-  margin-bottom: 3px;
-  width: 120px;
-  border-left: 3px solid gray;
-  padding-left: 7px;
-  float: left;
-}
-/**
- * comments 2.0
- *
- */
-.comment-ctrl {
-  font-size: 12px;
-  display: none;
-  margin:0 auto;
-  padding:0;
-}
-.comment-ctrl h5 {
-  margin:0;
-  padding: 5px;
+.ie7 .tabrow0 div.empty {
+  margin-right: 0;
 }
 
-.comment-area {
-  padding: 5px;
-}
-.comment-area .bd {
-}
-.comment-area textarea {
-  width:100%;
-  border: 1px solid grey;
-  overflow:auto;
+.ie7 .sideblock {
+  overflow: hidden;
 }
 
-.comment-area .fd {
-  text-align:right;
-}
-.comment-meta span {
-  color:grey;
+.ie7 .sideblock .content {
+  word-wrap: break-word;
 }
 
-.comment-list {
-  /*height: 150px;*/
-  font-size: 11px;
-  overflow:auto;
-  list-style:none;
-  padding:0;
-  margin:0;
-}
-.comment-list li {
-  margin: 2px;
-  margin-bottom:5px;
-  clear:both;
+/*fix for misalignment of text fields in ie */
+.ie7 form.mform input[type=text],
+.ie7 form.mform input[type=file],
+.ie7 form.mform input[type=password] {
+ margin-left: -10px;
 }
 
-.comment-paging{
-  /*background: #d8d8da;*/
-  text-align:center;
-}
-.comment-paging .pageno{
-  padding: 2px;
-}
-.comment-userpicture {
-  width: 20px;
-  float:left;
-}
-.comment-content{
-  margin-left: 22px;
-}
-.comment-content div{
-  margin:0;
-  padding:0;
-}
-.comment-content p{
-  width: 90%;
-  white-space: pre-wrap; /* css-3 */
-  white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
-  white-space: -pre-wrap; /* Opera 4-6 */
-  white-space: -o-pre-wrap; /* Opera 7 */
-  word-wrap: break-word; /* Internet Explorer 5.5+ */
-  padding:0;
-  margin:0 18px 0 0;
-}
-.comment-delete{
-  float:right;
-  text-align:right;
-}
-.comment-container {
-  float:left;
-  width: 305px;
-  margin: 4px;
+.ie7 form.mform textarea {
+ margin-left: -10px;
 }
 
-/* CSS for shadows */
-.divshadow div {
-  position:absolute;
-  width:10px;
-  height:10px;
-  background-image:url(shadow_corners.png);
-  background-repeat:no-repeat;
+.ie7 form.mform .fcheckbox input {
+  margin-left: -3px;
 }
-.divshadow .shadow_top {
-  top:-10px;
-  right:0px;
-  width:100%;
-  background-image:url(shadow_top_bottom.png);
-  background-position:0px 0px;
-  background-repeat:repeat-x;
-}
-.divshadow .shadow_bottom {
-  bottom:-10px;
-  right:0px;
-  width:100%;
-  background-image:url(shadow_top_bottom.png);
-  background-position:0px 100%;
-  background-repeat:repeat-x;
-}
-.divshadow .shadow_left {
-  top:0px;
-  left:-10px;
-  height:100%;
-  background-image:url(shadow_left_right.png);
-  background-position:0px 0px;
-  background-repeat:repeat-y;
-}
-.divshadow .shadow_right {
-  bottom:0px;
-  right:-10px;
-  height:100%;
-  background-image:url(shadow_left_right.png);
-  background-position:100% 0px;
-  background-repeat:repeat-y;
-}
-.divshadow .shadow_top_right {
-  top:-10px;
-  right:-10px;
-  background-position:100% 0px;
-}
-.divshadow .shadow_bottom_right {
-  bottom:-10px;
-  right:-10px;
-  background-position:100% 100%;
-}
-.divshadow .shadow_top_left {
-  top:-10px;
-  left:-10px;
-  background-position:0px 0px;
-}
-.divshadow .shadow_bottom_left {
-  bottom:-10px;
-  left:-10px;
-  background-position:0px 100%;
-}
-.filemanager-toolbar{
-    margin: 5px 0;
-}
-.filemanager-toolbar a:link, .filemanager-toolbar a:visited {
-    border: 1px solid grey;
-    background: #ccc;
-    color: black;
-    padding: 3px;
-}
-.filemanager-toolbar a:hover {
-    background: white;
-    text-decoration: none;
-}
-.fm-breadcrumb {
-    margin:0;
-}
-.filemanager-container {
-    padding: 5px;
-    margin: 6px 0;
-}
-.filemanager-container ul{
-    margin:0;
-    padding:0;
-    list-style-type:none;
-}
-.filemanager-container li{
-    clear:both;
-}
-#fm-move-div {
-    margin: 6px;
-}
-#fm-move-div strong{
-    color:red;
-}
-.fm-file-menu {
-    width: 18px;
-    height: 18px;
-    float: left;
-}
-.fm-file-menu img {
-    width: 16px;
-}
-.fm-file-name {
-    float:left;
-}
-.fm-file-entry{
-    border: 1px solid red;
-}
-.fm-operation {
-    font-weight: bold;
+.ie7.mod-quiz div.tabtree a span img.iconsmall {
+  margin: 0;
+  vertical-align: baseline;
+  position: relative;
+  top: 2px;
 }
diff --git a/theme/standard/styles_moz.css b/theme/standard/style/styles_moz.css
similarity index 100%
rename from theme/standard/styles_moz.css
rename to theme/standard/style/styles_moz.css
diff --git a/theme/standard/style/styles_tinymce.css b/theme/standard/style/styles_tinymce.css
new file mode 100644
index 0000000000..8eeec1e3e0
--- /dev/null
+++ b/theme/standard/style/styles_tinymce.css
@@ -0,0 +1,5 @@
+
+.mceContentBody  {
+  background-color:#FAFAFA;
+  color:#000;
+}
diff --git a/theme/standard/styles.php b/theme/standard/styles.php
deleted file mode 100644
index a941dadc6d..0000000000
--- a/theme/standard/styles.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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/>.
-
-/**
- * Serve the CSS for this theme. Every theme must contain a copy of this file
- * DO NOT MODIFY THIS FILE IT IS IMPORTANT TO THE WORKING OF THE MOODLE THEMES SYSTEM.
- * If you are are trying to change something, you should probably be looking at config.php.
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
diff --git a/theme/standard/styles_ie6.css b/theme/standard/styles_ie6.css
deleted file mode 100755
index 2dab094b0e..0000000000
--- a/theme/standard/styles_ie6.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * These styles are ONLY included for IE 6 (via meta.php)
- */
-
-.tabtree {
-  height: 100%;
-}
-
-.tabrow0 {
-  padding-top: 10px;
-}
-
-.tabrow0 li {
-  margin-left: 0;
-}
-
-.tabrow0 li.first {
-  margin-left: -4px;
-  margin-right: -4px;
-}
-
-.tabrow0 li.last a {
-  margin-right: 0;
-}
-
-.tabrow0 li.onerow {
-  margin-right: 0;
-}
-
-.tabrow0 a {
-  padding: 0 0 0 13px;
-}
-
-.tabrow0 a span {
-  padding: 12px 1em 4px 0;
-}
-
-.tabrow0 div,
-.tabrow0 ul {
-  top: 3.5em;
-  padding: 0.2em 0;
-}
-
-form.mform input {
-  margin-left: expression((this.type=="text"||this.type=="file"||this.type=="password")?'-10px':'0');
-}
-
-#admin-user-user_bulk form.mform input,
-#admin-user form.mform input {
-  margin-left: 0;
-}
-
-form.mform textarea {
- margin-left: -10px;
-}
-
-.que .info {
-  display: inline;
-}
-
-#adminsettings .form-setting,
-#adminsettings .form-description {
-  display:inline-block; padding-left:2px;
-}
-
-.course-view li.activity {
-  height:0;
-}
-#mod-quiz-edit div.question div.content .questiontext,
-#mod-quiz-edit #categoryquestions .questionname{
-    /*ie6 shows this as an arrow if this is not specified*/
-    cursor: pointer;
-}
-#mod-quiz-edit div.question div.content .questionname,
-#mod-quiz-edit #categoryquestions .questiontext{
-    /*ie6 shows this as an arrow if this is not specified*/
-    cursor: pointer;
-}
-.mod-quiz div.tabtree a span img.iconsmall {
-  margin: 0;
-  vertical-align: baseline;
-  position: relative;
-  top: 1px;
-}
-#mod-quiz-edit div.question div.content .questiontext,#categoryquestions .questiontext{
-    width:50%;
-}
-#mod-quiz-edit div.question div.content .questionname,#categoryquestions .questionname{
-    width:20%;
-}
-#mod-quiz-edit .editq div.question div.content .randomquestioncategory a{
-    width:40%;
-}
-#mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory label{
-    width: 35%;
-}
-#help_icon_tooltip .yui-tt-shadow-visible {
-  background-color: transparent;
-}
-.drag select {
-    visibility: visible;
-}
diff --git a/theme/standard/styles_ie7.css b/theme/standard/styles_ie7.css
deleted file mode 100755
index 3a5d6857e0..0000000000
--- a/theme/standard/styles_ie7.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * These styles are ONLY included for IE 7 (via meta.php)
- */
-
-.tabrow0 li {
-  margin-left: 0;
-}
-
-.tabrow0 li.first {
-  margin-right: -4px;
-}
-
-.tabrow0 li.onerow {
-  margin-right: 0;
-}
-
-.tabrow0 a {
-  display: inline-block;
-  padding: 8px 0 0.35em 13px;
-  line-height: 1.5em;
-}
-
-.tabrow0 a span {
-  padding: 10px 1em 10px 0;
-}
-
-.tabrow0 div,
-.tabrow0 ul {
-  top: 2.6em;
-  padding: 0.2em 0;
-}
-
-.tabrow0 div.empty {
-  margin-right: 0;
-}
-
-.sideblock {
-  overflow: hidden;
-}
-
-.sideblock .content {
-  word-wrap: break-word;
-}
-
-/*fix for misalignment of text fields in ie */
-form.mform input[type=text],
-form.mform input[type=file],
-form.mform input[type=password] {
- margin-left: -10px;
-}
-
-form.mform textarea {
- margin-left: -10px;
-}
-
-form.mform .fcheckbox input {
-  margin-left: -3px;
-}
-.mod-quiz div.tabtree a span img.iconsmall {
-  margin: 0;
-  vertical-align: baseline;
-  position: relative;
-  top: 2px;
-}
diff --git a/theme/standardblue/config.php b/theme/standardblue/config.php
deleted file mode 100644
index 52548d6814..0000000000
--- a/theme/standardblue/config.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-////////////////////////////////////////////////////////////////////////////////
-/// This file contains a few configuration variables that control
-/// how Moodle uses this theme.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->sheets = array('gradients');
-
-/// This variable is an array containing the names of all the
-/// stylesheet files you want included in this theme, and in what order
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->standardsheets = array('styles_layout','styles_fonts','styles_color','styles_moz');
-
-/// This variable can be set to an array containing
-/// filenames from the *STANDARD* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->standardsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parent = '';
-
-/// This variable can be set to the name of a parent theme
-/// which you want to have included before the current theme.
-/// This can make it easy to make modifications to another
-/// theme without having to actually change the files
-/// If this variable is empty or false then a parent theme
-/// is not used.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parentsheets = false;
-
-/// This variable can be set to an array containing
-/// filenames from a chosen *PARENT* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->parentsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->pluginsheets = array('mod', 'block', 'format', 'gradereport');
-
-/// Which types of plugins should be searched for a styles.php file. This
-/// Allows plugins to include enough styling information to work out of the box.
-
-
-$THEME->navmenuwidth = 50;
-
-/// You can use this to control the cutoff point for strings
-/// in the navmenus (list of activities in popup menu etc)
-/// Default is 50 characters wide.
-
-
-$THEME->makenavmenulist = false;
-
-/// By setting this to true, then you will have access to a
-/// new variable in your header.html and footer.html called
-/// $navmenulist ... this contains a simple XHTML menu of
-/// all activities in the current course, mostly useful for
-/// creating popup navigation menus and so on.
-
-
-$THEME->resource_mp3player_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'font=Arial&fontColour=3333FF&buffer=10&waitForPlay=no&autoPlay=yes';
-
-/// With this you can control the colours of the "big" MP3 player
-/// that is used for MP3 resources.
-
-
-$THEME->filter_mediaplugin_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'waitForPlay=yes';
-
-/// ...And this controls the small embedded player
-
-
-$THEME->custompix = false;
-
-/// If true, then this theme must have a "pix"
-/// subdirectory that contains copies of all
-/// files from the moodle/pix directory, plus a
-/// "pix/mod" directory containing all the icons
-/// for all the activity modules.
-////////////////////////////////////////////////////////////////////////////////
-
-
diff --git a/theme/standardblue/footer.html b/theme/standardblue/footer.html
deleted file mode 100644
index e1669c74eb..0000000000
--- a/theme/standardblue/footer.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-    echo $OUTPUT->container_end(); // content container
-
-    echo $OUTPUT->container_start('footer');
-    echo '<hr />';
-
-    echo '<p class="helplink">';
-    echo page_doc_link(get_string('moodledocslink'));
-    echo '</p>';
-
-    echo $loggedinas;
-    echo $homelink;
-
-    echo $OUTPUT->container_end();
-?>
-</div>
-</body>
-</html>
diff --git a/theme/standardblue/gradient.jpg b/theme/standardblue/gradient.jpg
deleted file mode 100755
index c7abdc2214fa20de1ea4a1d85485e33029b90039..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 377
zcmex=<NpH&0WUXCHwH#VMg|WcWcYuZ!I^=Xi3x;&fCY$HIapa)SXjB(+1WUFxOjND
zxwyG``Gf>``2_j6xdp@o1cgOJMMZh|#U;c<B!omnML>oyG6VInuyV4pa*FVB^NNrR
z{vTiv<X{M3&|qd%Vqg+vWEN!ne}q92>{Mn3B*4PT$i@MZ5@2LtLXlx$WD*e#1WHMO
z{D&&V#>~PF(j<tXiAk7IDDeL+1|DXhlpwPpgFVBy1C#BR)rL!@o?g=*+G+eM{mNz4
ziLW-Q)jIo3b6>Y`>%7^XuT=s<Mb=)<daJ&!Z1OdaP@$Jw%O+o(BI>d$foE+2l5^Sr
G-vj`Hok5@g

diff --git a/theme/standardblue/gradients.css b/theme/standardblue/gradients.css
deleted file mode 100644
index e929fb822d..0000000000
--- a/theme/standardblue/gradients.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
-  *  Adds all the nice finish to the standard theme
-  *
-  */
-
-th.header,
-td.header,
-div.header {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
-
-.navbar {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
-
diff --git a/theme/standardblue/header.html b/theme/standardblue/header.html
deleted file mode 100644
index 86dac6328d..0000000000
--- a/theme/standardblue/header.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html<?php echo $direction ?>>
-<head>
-    <?php echo $meta ?>
-    <meta name="keywords" content="moodle, <?php echo $title ?> " />
-    <title><?php echo $title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
-    <?php include("$CFG->javascript"); ?>
-</head>
-
-<body<?php
-    echo " $bodytags";
-    if ($focus) {
-        echo " onload=\"setfocus()\"";
-    }
-    ?>>
-
-<div id="page">
-
-<?php //Accessibility: 'headermain' is now H1, see theme/standard/styles_layout.css: .headermain
-      if ($home) {  // This is what gets printed on the home page only
-?>
-    <?php echo $OUTPUT->container_start('clearfix header-home'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } else if ($heading) {  // This is what gets printed on any other page with a heading
-?>
-    <?php echo $OUTPUT->container_start('clearfix header'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } ?>
-<?php //Accessibility: breadcrumb trail/navbar now a DIV, not a table.
-      if ($navigation) { // This is the navigation bar with breadcrumbs  ?>
-    <div class="navbar clearfix">
-        <div class="breadcrumb"><?php print_navigation($navigation); ?></div>
-        <div class="navbutton"><?php echo $button; ?></div>
-    </div>
-<?php } else if ($heading) { // If no navigation, but a heading, then print a line
-?>
-        <hr />
-<?php } ?>
-    <!-- END OF HEADER -->
-    <?php echo $OUTPUT->container_start('content'); ?>
diff --git a/theme/standardblue/styles.php b/theme/standardblue/styles.php
deleted file mode 100644
index a941dadc6d..0000000000
--- a/theme/standardblue/styles.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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/>.
-
-/**
- * Serve the CSS for this theme. Every theme must contain a copy of this file
- * DO NOT MODIFY THIS FILE IT IS IMPORTANT TO THE WORKING OF THE MOODLE THEMES SYSTEM.
- * If you are are trying to change something, you should probably be looking at config.php.
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
diff --git a/theme/standardgreen/config.php b/theme/standardgreen/config.php
deleted file mode 100644
index 52548d6814..0000000000
--- a/theme/standardgreen/config.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-////////////////////////////////////////////////////////////////////////////////
-/// This file contains a few configuration variables that control
-/// how Moodle uses this theme.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->sheets = array('gradients');
-
-/// This variable is an array containing the names of all the
-/// stylesheet files you want included in this theme, and in what order
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->standardsheets = array('styles_layout','styles_fonts','styles_color','styles_moz');
-
-/// This variable can be set to an array containing
-/// filenames from the *STANDARD* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->standardsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parent = '';
-
-/// This variable can be set to the name of a parent theme
-/// which you want to have included before the current theme.
-/// This can make it easy to make modifications to another
-/// theme without having to actually change the files
-/// If this variable is empty or false then a parent theme
-/// is not used.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parentsheets = false;
-
-/// This variable can be set to an array containing
-/// filenames from a chosen *PARENT* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->parentsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->pluginsheets = array('mod', 'block', 'format', 'gradereport');
-
-/// Which types of plugins should be searched for a styles.php file. This
-/// Allows plugins to include enough styling information to work out of the box.
-
-
-$THEME->navmenuwidth = 50;
-
-/// You can use this to control the cutoff point for strings
-/// in the navmenus (list of activities in popup menu etc)
-/// Default is 50 characters wide.
-
-
-$THEME->makenavmenulist = false;
-
-/// By setting this to true, then you will have access to a
-/// new variable in your header.html and footer.html called
-/// $navmenulist ... this contains a simple XHTML menu of
-/// all activities in the current course, mostly useful for
-/// creating popup navigation menus and so on.
-
-
-$THEME->resource_mp3player_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'font=Arial&fontColour=3333FF&buffer=10&waitForPlay=no&autoPlay=yes';
-
-/// With this you can control the colours of the "big" MP3 player
-/// that is used for MP3 resources.
-
-
-$THEME->filter_mediaplugin_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'waitForPlay=yes';
-
-/// ...And this controls the small embedded player
-
-
-$THEME->custompix = false;
-
-/// If true, then this theme must have a "pix"
-/// subdirectory that contains copies of all
-/// files from the moodle/pix directory, plus a
-/// "pix/mod" directory containing all the icons
-/// for all the activity modules.
-////////////////////////////////////////////////////////////////////////////////
-
-
diff --git a/theme/standardgreen/favicon.ico b/theme/standardgreen/favicon.ico
deleted file mode 100644
index 5a7a36a68e69533576ab37a35abce1d3fbb38800..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 894
zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?vKIbb{CFhl-MrSiEDm+MbD!c@3Z
zC}SFg>oxZxXX##+)QNC^1s(V=xcI+f^+t$@>%RZetN(IUu7+^qPW)5e@SmX+Dhm`u
zQxD_<)x)&|xj^+0?(#LOK<W?u6It;~ssU=C$Ns-^tAF#ALAeQs{;96}$4~;|ws-dc
z$>`&M1(*F7t6u?R1A*VZ|B`Ee3zS2-iATRGZTiKWzY-_~Q6F~vzu5f$I`!MZ${D;5
z{gPb$m!}x&;MgO7B{uzMDBK2DA8_cq)T%$?r3)bH_2)fPT>GD`co~H2wfvssnm=5*
zAng$I0~;s%7flX}&vbWpw=HdBT>M*p#ecPV&(!)hEB5Z;Sn!T_-YcWJ^$_)2Rxfw-
zaq;u@3=448S5sCo^%ARDV?XD%^N#<LtNwE>_{Tc)wNC$Th+T%}M#iT4K+@a8D<~+)
z-oZvrPOfWeFHrWti~p@R|JUz-zwX#0h++tNXz#A1<R}|+vq0ZqKQDhX4bAl%p&^N^
z42`{E)27}@Q;X_rBjZC{oIHRwqA4JQ`~N=!0}MX~W)m1*3}hqY1wgYK7=hRs=&O1L
Jh7a}-eE?_+#*hF2

diff --git a/theme/standardgreen/footer.html b/theme/standardgreen/footer.html
deleted file mode 100644
index e1669c74eb..0000000000
--- a/theme/standardgreen/footer.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-    echo $OUTPUT->container_end(); // content container
-
-    echo $OUTPUT->container_start('footer');
-    echo '<hr />';
-
-    echo '<p class="helplink">';
-    echo page_doc_link(get_string('moodledocslink'));
-    echo '</p>';
-
-    echo $loggedinas;
-    echo $homelink;
-
-    echo $OUTPUT->container_end();
-?>
-</div>
-</body>
-</html>
diff --git a/theme/standardgreen/gradient.jpg b/theme/standardgreen/gradient.jpg
deleted file mode 100755
index 1f7af1b04f0e34a9662a838fcd7a25ed92468dd2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 398
zcmex=<NpH&0WUXCHwH#VMg|WcWcYuZ!I^=Xi3x;&fCY$HIapa)SXjB(+1WUFxOjND
zxwyG``Gf>``2_j6xdp@o1cgOJMMZh|#U;c<B!omnML>oyG6VInuyV4pa*FVB^NNrR
z{vTiv<X{M3&|qd%Vqg+vWEN!ne}q8-<W!(zkpLSDBL`4MR)CR#krhQQkdX=KoTQ*c
zptK}V6EmttMpiavcA%7uAVepUnT$+=Lc$_}%>QpO@Gvt1t!EZwuxI$naDHdv?queQ
zif<*qE*QUy$ct2caBhASTkUBTeYTQceQ&~I-&FZNk2GGh>YF#~?WoBc;}>uIHT&F4
g<2AEYWw)-hmTS3J?vXR)+g};RqftoqG5o&?09VUPLI3~&

diff --git a/theme/standardgreen/gradients.css b/theme/standardgreen/gradients.css
deleted file mode 100644
index e929fb822d..0000000000
--- a/theme/standardgreen/gradients.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
-  *  Adds all the nice finish to the standard theme
-  *
-  */
-
-th.header,
-td.header,
-div.header {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
-
-.navbar {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
-
diff --git a/theme/standardgreen/header.html b/theme/standardgreen/header.html
deleted file mode 100644
index 86dac6328d..0000000000
--- a/theme/standardgreen/header.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html<?php echo $direction ?>>
-<head>
-    <?php echo $meta ?>
-    <meta name="keywords" content="moodle, <?php echo $title ?> " />
-    <title><?php echo $title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
-    <?php include("$CFG->javascript"); ?>
-</head>
-
-<body<?php
-    echo " $bodytags";
-    if ($focus) {
-        echo " onload=\"setfocus()\"";
-    }
-    ?>>
-
-<div id="page">
-
-<?php //Accessibility: 'headermain' is now H1, see theme/standard/styles_layout.css: .headermain
-      if ($home) {  // This is what gets printed on the home page only
-?>
-    <?php echo $OUTPUT->container_start('clearfix header-home'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } else if ($heading) {  // This is what gets printed on any other page with a heading
-?>
-    <?php echo $OUTPUT->container_start('clearfix header'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } ?>
-<?php //Accessibility: breadcrumb trail/navbar now a DIV, not a table.
-      if ($navigation) { // This is the navigation bar with breadcrumbs  ?>
-    <div class="navbar clearfix">
-        <div class="breadcrumb"><?php print_navigation($navigation); ?></div>
-        <div class="navbutton"><?php echo $button; ?></div>
-    </div>
-<?php } else if ($heading) { // If no navigation, but a heading, then print a line
-?>
-        <hr />
-<?php } ?>
-    <!-- END OF HEADER -->
-    <?php echo $OUTPUT->container_start('content'); ?>
diff --git a/theme/standardgreen/styles.php b/theme/standardgreen/styles.php
deleted file mode 100644
index a941dadc6d..0000000000
--- a/theme/standardgreen/styles.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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/>.
-
-/**
- * Serve the CSS for this theme. Every theme must contain a copy of this file
- * DO NOT MODIFY THIS FILE IT IS IMPORTANT TO THE WORKING OF THE MOODLE THEMES SYSTEM.
- * If you are are trying to change something, you should probably be looking at config.php.
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
diff --git a/theme/standardlogo/README.html b/theme/standardlogo/README.html
deleted file mode 100644
index 810f29100a..0000000000
--- a/theme/standardlogo/README.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<h2>Standard Logo Theme</h2>
-
-<p>To add your own homepage logo to this theme, you can simply:</p>
-
-<ol>
-<li>upload a file called logo.jpg or logo.gif in your Site Files (look on the home page),
-
-    <p>OR</p></li>
-
-<li>put a file called logo.jpg or logo.gif in the main Moodle directory (using FTP, for example).</li>
-
-</ol>
-
diff --git a/theme/standardlogo/config.php b/theme/standardlogo/config.php
deleted file mode 100644
index af9b94c534..0000000000
--- a/theme/standardlogo/config.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-////////////////////////////////////////////////////////////////////////////////
-/// This file contains a few configuration variables that control
-/// how Moodle uses this theme.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->sheets = array('gradients');
-
-/// This variable is an array containing the names of all the
-/// stylesheet files you want included in this theme, and in what order
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->standardsheets = array('styles_layout','styles_fonts','styles_color','styles_moz');
-
-/// This variable can be set to an array containing
-/// filenames from the *STANDARD* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->standardsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parent = 'standardwhite';
-
-/// This variable can be set to the name of a parent theme
-/// which you want to have included before the current theme.
-/// This can make it easy to make modifications to another
-/// theme without having to actually change the files
-/// If this variable is empty or false then a parent theme
-/// is not used.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parentsheets = array('gradients');
-
-/// This variable can be set to an array containing
-/// filenames from a chosen *PARENT* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->parentsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->pluginsheets = array('mod', 'block', 'format', 'gradereport');
-
-/// Which types of plugins should be searched for a styles.php file. This
-/// Allows plugins to include enough styling information to work out of the box.
-
-
-$THEME->navmenuwidth = 50;
-
-/// You can use this to control the cutoff point for strings
-/// in the navmenus (list of activities in popup menu etc)
-/// Default is 50 characters wide.
-
-
-$THEME->makenavmenulist = false;
-
-/// By setting this to true, then you will have access to a
-/// new variable in your header.html and footer.html called
-/// $navmenulist ... this contains a simple XHTML menu of
-/// all activities in the current course, mostly useful for
-/// creating popup navigation menus and so on.
-
-
-$THEME->resource_mp3player_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'font=Arial&fontColour=3333FF&buffer=10&waitForPlay=no&autoPlay=yes';
-
-/// With this you can control the colours of the "big" MP3 player
-/// that is used for MP3 resources.
-
-
-$THEME->filter_mediaplugin_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'waitForPlay=yes';
-
-/// ...And this controls the small embedded player
-
-
-$THEME->custompix = false;
-
-/// If true, then this theme must have a "pix"
-/// subdirectory that contains copies of all
-/// files from the moodle/pix directory, plus a
-/// "pix/mod" directory containing all the icons
-/// for all the activity modules.
-////////////////////////////////////////////////////////////////////////////////
-
-
diff --git a/theme/standardlogo/favicon.ico b/theme/standardlogo/favicon.ico
deleted file mode 100644
index 5a7a36a68e69533576ab37a35abce1d3fbb38800..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 894
zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?vKIbb{CFhl-MrSiEDm+MbD!c@3Z
zC}SFg>oxZxXX##+)QNC^1s(V=xcI+f^+t$@>%RZetN(IUu7+^qPW)5e@SmX+Dhm`u
zQxD_<)x)&|xj^+0?(#LOK<W?u6It;~ssU=C$Ns-^tAF#ALAeQs{;96}$4~;|ws-dc
z$>`&M1(*F7t6u?R1A*VZ|B`Ee3zS2-iATRGZTiKWzY-_~Q6F~vzu5f$I`!MZ${D;5
z{gPb$m!}x&;MgO7B{uzMDBK2DA8_cq)T%$?r3)bH_2)fPT>GD`co~H2wfvssnm=5*
zAng$I0~;s%7flX}&vbWpw=HdBT>M*p#ecPV&(!)hEB5Z;Sn!T_-YcWJ^$_)2Rxfw-
zaq;u@3=448S5sCo^%ARDV?XD%^N#<LtNwE>_{Tc)wNC$Th+T%}M#iT4K+@a8D<~+)
z-oZvrPOfWeFHrWti~p@R|JUz-zwX#0h++tNXz#A1<R}|+vq0ZqKQDhX4bAl%p&^N^
z42`{E)27}@Q;X_rBjZC{oIHRwqA4JQ`~N=!0}MX~W)m1*3}hqY1wgYK7=hRs=&O1L
Jh7a}-eE?_+#*hF2

diff --git a/theme/standardlogo/footer.html b/theme/standardlogo/footer.html
deleted file mode 100644
index e1669c74eb..0000000000
--- a/theme/standardlogo/footer.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-    echo $OUTPUT->container_end(); // content container
-
-    echo $OUTPUT->container_start('footer');
-    echo '<hr />';
-
-    echo '<p class="helplink">';
-    echo page_doc_link(get_string('moodledocslink'));
-    echo '</p>';
-
-    echo $loggedinas;
-    echo $homelink;
-
-    echo $OUTPUT->container_end();
-?>
-</div>
-</body>
-</html>
diff --git a/theme/standardlogo/gradient.jpg b/theme/standardlogo/gradient.jpg
deleted file mode 100755
index a122ff238d4ea8cb57463e97905f758175be6ed3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 379
zcmex=<NpH&0WUXCHwH#VMg|WcWcYuZ!I^=Xi3x;&fCY$HIapa)SXjB(+1WUFxOjND
zxwyG``Gf>``2_j6xdp@o1cgOJMMZh|#U;c<B!omnML>oyG6VInuyV4pa*FVB^NNrR
z{vTiv<X{M3&|qd%Vqg+vWEN!ne}q8-<W!(zkpK%LGbd0+Rsbl>$ij>y!zj!wC?vuX
zm<W`X0_kExmStdMVr6Dy2N^1eVJM@JFw_5A3_Q$0O@hpV4E79P7>dqH&VGITtL%N#
z8--_1ueF`sJ?owNu0#1JXSHuQ{Y2@xU+B{J(R_vJi8C)1t+}`HZMb0Ub)kHh*Wm(;
L2hJcn>;Fvv7iU9n

diff --git a/theme/standardlogo/header.html b/theme/standardlogo/header.html
deleted file mode 100644
index f261a54a3f..0000000000
--- a/theme/standardlogo/header.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html<?php echo $direction ?>>
-<head>
-    <?php echo $meta ?>
-    <meta name="keywords" content="moodle, <?php echo $title ?> " />
-    <title><?php echo $title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
-    <?php include("$CFG->javascript"); ?>
-</head>
-
-<body<?php
-    echo " $bodytags";
-    if ($focus) {
-        echo " onload=\"setfocus()\"";
-    }
-    ?>>
-
-<div id="page">
-
-<?php if ($home) {  // This is what gets printed on the home page only
-      if (file_exists($CFG->dirroot.'/logo.jpg')) {
-          $standardlogo = $CFG->httpswwwroot.'/logo.jpg';
-      } else if (file_exists($CFG->dirroot.'/logo.gif')) {
-          $standardlogo = $CFG->httpswwwroot.'/logo.gif';
-      } else if (file_exists($CFG->dataroot.'/1/logo.jpg')) {
-          require_once($CFG->libdir.'/filelib.php');
-          $standardlogo = get_file_url('1/logo.jpg', null, 'httpscoursefile');
-      } else if (file_exists($CFG->dataroot.'/1/logo.gif')) {
-          require_once($CFG->libdir.'/filelib.php');
-          $standardlogo = get_file_url('1/logo.gif', null, 'httpscoursefile');
-      } else {
-          $standardlogo = $CFG->httpsthemewww .'/'. current_theme().'/logo.gif';
-      }
-
-      //Accessibility: warning: ALT text will need editing if logo changes. 'headermain' is now H1.
-?>
-    <?php echo $OUTPUT->container_start('clearfix header-home'); ?>
-        <h1 class="headermain"><img alt="Moodle" src="<?php echo $standardlogo ?>" /></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } else if ($heading) {  // This is what gets printed on any other page with a heading
-?>
-    <?php echo $OUTPUT->container_start('clearfix header'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } ?>
-<?php //Accessibility: breadcrumb trail/navbar now a DIV, not a table.
-      if ($navigation) { // This is the navigation table with breadcrumbs  ?>
-    <div class="navbar clearfix">
-        <div class="breadcrumb"><?php print_navigation($navigation); ?></div>
-        <div class="navbutton"><?php echo $button; ?></div>
-    </div>
-<?php } else if ($heading) { // If no navigation, but a heading, then print a line
-?>
-        <hr />
-<?php } ?>
-    <!-- END OF HEADER -->
-    <?php echo $OUTPUT->container_start('content'); ?>
diff --git a/theme/standardlogo/logo.gif b/theme/standardlogo/logo.gif
deleted file mode 100644
index b47c1ce10c9da9c67109b9c5b1314574ccd3fbea..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6457
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

diff --git a/theme/standardlogo/styles.php b/theme/standardlogo/styles.php
deleted file mode 100644
index a941dadc6d..0000000000
--- a/theme/standardlogo/styles.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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/>.
-
-/**
- * Serve the CSS for this theme. Every theme must contain a copy of this file
- * DO NOT MODIFY THIS FILE IT IS IMPORTANT TO THE WORKING OF THE MOODLE THEMES SYSTEM.
- * If you are are trying to change something, you should probably be looking at config.php.
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
diff --git a/theme/standardred/config.php b/theme/standardred/config.php
deleted file mode 100644
index 52548d6814..0000000000
--- a/theme/standardred/config.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-////////////////////////////////////////////////////////////////////////////////
-/// This file contains a few configuration variables that control
-/// how Moodle uses this theme.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->sheets = array('gradients');
-
-/// This variable is an array containing the names of all the
-/// stylesheet files you want included in this theme, and in what order
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->standardsheets = array('styles_layout','styles_fonts','styles_color','styles_moz');
-
-/// This variable can be set to an array containing
-/// filenames from the *STANDARD* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->standardsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parent = '';
-
-/// This variable can be set to the name of a parent theme
-/// which you want to have included before the current theme.
-/// This can make it easy to make modifications to another
-/// theme without having to actually change the files
-/// If this variable is empty or false then a parent theme
-/// is not used.
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->parentsheets = false;
-
-/// This variable can be set to an array containing
-/// filenames from a chosen *PARENT* theme.  If the
-/// array exists, it will be used to choose the
-/// files to include in the standard style sheet.
-/// When false, then no files are used.
-/// When true or NON-EXISTENT, then ALL standard files are used.
-/// This parameter can be used, for example, to prevent
-/// having to override too many classes.
-/// Note that the trailing .css should not be included
-/// eg $THEME->parentsheets = array('styles_layout','styles_fonts','styles_color');
-////////////////////////////////////////////////////////////////////////////////
-
-
-$THEME->pluginsheets = array('mod', 'block', 'format', 'gradereport');
-
-/// Which types of plugins should be searched for a styles.php file. This
-/// Allows plugins to include enough styling information to work out of the box.
-
-
-$THEME->navmenuwidth = 50;
-
-/// You can use this to control the cutoff point for strings
-/// in the navmenus (list of activities in popup menu etc)
-/// Default is 50 characters wide.
-
-
-$THEME->makenavmenulist = false;
-
-/// By setting this to true, then you will have access to a
-/// new variable in your header.html and footer.html called
-/// $navmenulist ... this contains a simple XHTML menu of
-/// all activities in the current course, mostly useful for
-/// creating popup navigation menus and so on.
-
-
-$THEME->resource_mp3player_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'font=Arial&fontColour=3333FF&buffer=10&waitForPlay=no&autoPlay=yes';
-
-/// With this you can control the colours of the "big" MP3 player
-/// that is used for MP3 resources.
-
-
-$THEME->filter_mediaplugin_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'waitForPlay=yes';
-
-/// ...And this controls the small embedded player
-
-
-$THEME->custompix = false;
-
-/// If true, then this theme must have a "pix"
-/// subdirectory that contains copies of all
-/// files from the moodle/pix directory, plus a
-/// "pix/mod" directory containing all the icons
-/// for all the activity modules.
-////////////////////////////////////////////////////////////////////////////////
-
-
diff --git a/theme/standardred/favicon.ico b/theme/standardred/favicon.ico
deleted file mode 100644
index 5a7a36a68e69533576ab37a35abce1d3fbb38800..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 894
zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?vKIbb{CFhl-MrSiEDm+MbD!c@3Z
zC}SFg>oxZxXX##+)QNC^1s(V=xcI+f^+t$@>%RZetN(IUu7+^qPW)5e@SmX+Dhm`u
zQxD_<)x)&|xj^+0?(#LOK<W?u6It;~ssU=C$Ns-^tAF#ALAeQs{;96}$4~;|ws-dc
z$>`&M1(*F7t6u?R1A*VZ|B`Ee3zS2-iATRGZTiKWzY-_~Q6F~vzu5f$I`!MZ${D;5
z{gPb$m!}x&;MgO7B{uzMDBK2DA8_cq)T%$?r3)bH_2)fPT>GD`co~H2wfvssnm=5*
zAng$I0~;s%7flX}&vbWpw=HdBT>M*p#ecPV&(!)hEB5Z;Sn!T_-YcWJ^$_)2Rxfw-
zaq;u@3=448S5sCo^%ARDV?XD%^N#<LtNwE>_{Tc)wNC$Th+T%}M#iT4K+@a8D<~+)
z-oZvrPOfWeFHrWti~p@R|JUz-zwX#0h++tNXz#A1<R}|+vq0ZqKQDhX4bAl%p&^N^
z42`{E)27}@Q;X_rBjZC{oIHRwqA4JQ`~N=!0}MX~W)m1*3}hqY1wgYK7=hRs=&O1L
Jh7a}-eE?_+#*hF2

diff --git a/theme/standardred/footer.html b/theme/standardred/footer.html
deleted file mode 100644
index e1669c74eb..0000000000
--- a/theme/standardred/footer.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-    echo $OUTPUT->container_end(); // content container
-
-    echo $OUTPUT->container_start('footer');
-    echo '<hr />';
-
-    echo '<p class="helplink">';
-    echo page_doc_link(get_string('moodledocslink'));
-    echo '</p>';
-
-    echo $loggedinas;
-    echo $homelink;
-
-    echo $OUTPUT->container_end();
-?>
-</div>
-</body>
-</html>
diff --git a/theme/standardred/gradient.jpg b/theme/standardred/gradient.jpg
deleted file mode 100755
index a9f2a1b16e5a1a157a16084818df3544821d0d0e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 360
zcmex=<NpH&0WUXCHwH#VMg|WcWcYuZ!I^=Xi3x;&fCY$HIapa)SXjB(+1WUFxOjND
zxwyG``Gf>``2_j6xdp@o1cgOJMMZh|#U;c<B!omnML>oyG6VInuyV4pa*FVB^NNrR
z{vTiv<X{M3&|qd%Vqg+vWEN!ne}q8-<W!(zkpK%LD+f?UTmW5yfl(w7C?N?{&cuwQ
zfq{XMg^867q(=}_kD$>1TMRtRKs|!Yf(-Ty-zDaUyf*b)`KDCns#0z6nyXeh?xr5I
mV_xJ~u9Mr9y|T4-?Q}ywAfq{RqTenxUdslK6lBZ(-vj^`w>Q)P

diff --git a/theme/standardred/gradients.css b/theme/standardred/gradients.css
deleted file mode 100644
index e929fb822d..0000000000
--- a/theme/standardred/gradients.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
-  *  Adds all the nice finish to the standard theme
-  *
-  */
-
-th.header,
-td.header,
-div.header {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
-
-.navbar {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
-
diff --git a/theme/standardred/header.html b/theme/standardred/header.html
deleted file mode 100644
index 86dac6328d..0000000000
--- a/theme/standardred/header.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html<?php echo $direction ?>>
-<head>
-    <?php echo $meta ?>
-    <meta name="keywords" content="moodle, <?php echo $title ?> " />
-    <title><?php echo $title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
-    <?php include("$CFG->javascript"); ?>
-</head>
-
-<body<?php
-    echo " $bodytags";
-    if ($focus) {
-        echo " onload=\"setfocus()\"";
-    }
-    ?>>
-
-<div id="page">
-
-<?php //Accessibility: 'headermain' is now H1, see theme/standard/styles_layout.css: .headermain
-      if ($home) {  // This is what gets printed on the home page only
-?>
-    <?php echo $OUTPUT->container_start('clearfix header-home'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } else if ($heading) {  // This is what gets printed on any other page with a heading
-?>
-    <?php echo $OUTPUT->container_start('clearfix header'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } ?>
-<?php //Accessibility: breadcrumb trail/navbar now a DIV, not a table.
-      if ($navigation) { // This is the navigation bar with breadcrumbs  ?>
-    <div class="navbar clearfix">
-        <div class="breadcrumb"><?php print_navigation($navigation); ?></div>
-        <div class="navbutton"><?php echo $button; ?></div>
-    </div>
-<?php } else if ($heading) { // If no navigation, but a heading, then print a line
-?>
-        <hr />
-<?php } ?>
-    <!-- END OF HEADER -->
-    <?php echo $OUTPUT->container_start('content'); ?>
diff --git a/theme/standardred/styles.php b/theme/standardred/styles.php
deleted file mode 100644
index a941dadc6d..0000000000
--- a/theme/standardred/styles.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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/>.
-
-/**
- * Serve the CSS for this theme. Every theme must contain a copy of this file
- * DO NOT MODIFY THIS FILE IT IS IMPORTANT TO THE WORKING OF THE MOODLE THEMES SYSTEM.
- * If you are are trying to change something, you should probably be looking at config.php.
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
diff --git a/theme/standardwhite/config.php b/theme/standardwhite/config.php
deleted file mode 100644
index 2b0049720b..0000000000
--- a/theme/standardwhite/config.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?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/>.
-
-
-/**
- * Configuration for Moodle's standard theme.
- *
- * There is documentation of all the things that can be configured here at
- * http://phpdocs.moodle.org/HEAD/moodlecore/theme_config.html
- *
- * For an overview of how Moodle themes work, Please see
- * http://docs.moodle.org/en/Developement:How_Moodle_outputs_HTML
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$THEME->sheets = array('gradients');
-
-$THEME->parent = null;
-$THEME->parentsheets = false;
-
-$THEME->standardsheets = true;
-$THEME->pluginsheets = array('mod', 'block', 'format', 'gradereport');
-
-$THEME->metainclude = false;
-$THEME->parentmetainclude = false;
-$THEME->standardmetainclude = true;
-
-$THEME->custompix = false;
-
-$THEME->layouts = array(
-    // Most pages. Put this first, so if we encounter an unknown page type, this is used.
-    'normal' => array(
-        'layout' => 'standard:layout.php',
-        'regions' => array('side-pre', 'side-post'),
-        'defaultregion' => 'side-post'
-    ),
-    // The site home page.
-    'home' => array(
-        'layout' => 'standard:layout-home.php',
-        'regions' => array('side-pre', 'side-post'),
-        'defaultregion' => 'side-post'
-    ),
-    // Settings form pages, like course of module settings.
-    'form' => array(
-        'layout' => 'standard:layout.php',
-        'regions' => array(),
-    ),
-    // Pages that appear in pop-up windows.
-    'popup' => array(
-        'layout' => 'standard:layout-popup.php',
-        'regions' => array(),
-    ),
-    // Legacy frameset pages
-    'topframe' => array(
-        'layout' => 'standard:layout-topframe.php',
-        'regions' => array(),
-    ),
-    // Used during upgrade and install, and for the 'This site is undergoing maintenance' message.
-    // This must not have any blocks, and it is good idea if it does not have links to
-    // other places - for example there should not be a home link in the footer..
-    'maintenance' => array(
-        'layout' => 'standard:layout-popup.php',
-        'regions' => array(),
-    ),
-    // Embeded pages, like iframe embeded in moodleform
-    'embedded' => array(
-        'layout' => 'standard:layout-embedded.php',
-        'regions' => array(),
-    )
-);
-
-$THEME->resource_mp3player_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'font=Arial&fontColour=3333FF&buffer=10&waitForPlay=no&autoPlay=yes';
-$THEME->filter_mediaplugin_colors =
- 'bgColour=000000&btnColour=ffffff&btnBorderColour=cccccc&iconColour=000000&'.
- 'iconOverColour=00cc00&trackColour=cccccc&handleColour=ffffff&loaderColour=ffffff&'.
- 'waitForPlay=yes';
-
-//$THEME->rarrow = '&#x25BA;' //OR '&rarr;';
-//$THEME->larrow = '&#x25C4;' //OR '&larr;';
-//$CFG->block_search_button = link_arrow_right(get_string('search'), $url='', $accesshide=true);
-
-$THEME->navmenuwidth = 50;
-// You can use this to control the cutoff point for strings
-// in the navmenus (list of activities in popup menu etc)
-// Default is 50 characters wide.
-
-$THEME->makenavmenulist = false;
-// By setting this to true, then you will have access to a
-// new variable in your header.html and footer.html called
-// $navmenulist ... this contains a simple XHTML menu of
-// all activities in the current course, mostly useful for
-// creating popup navigation menus and so on.
diff --git a/theme/standardwhite/favicon.ico b/theme/standardwhite/favicon.ico
deleted file mode 100644
index 5a7a36a68e69533576ab37a35abce1d3fbb38800..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 894
zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?vKIbb{CFhl-MrSiEDm+MbD!c@3Z
zC}SFg>oxZxXX##+)QNC^1s(V=xcI+f^+t$@>%RZetN(IUu7+^qPW)5e@SmX+Dhm`u
zQxD_<)x)&|xj^+0?(#LOK<W?u6It;~ssU=C$Ns-^tAF#ALAeQs{;96}$4~;|ws-dc
z$>`&M1(*F7t6u?R1A*VZ|B`Ee3zS2-iATRGZTiKWzY-_~Q6F~vzu5f$I`!MZ${D;5
z{gPb$m!}x&;MgO7B{uzMDBK2DA8_cq)T%$?r3)bH_2)fPT>GD`co~H2wfvssnm=5*
zAng$I0~;s%7flX}&vbWpw=HdBT>M*p#ecPV&(!)hEB5Z;Sn!T_-YcWJ^$_)2Rxfw-
zaq;u@3=448S5sCo^%ARDV?XD%^N#<LtNwE>_{Tc)wNC$Th+T%}M#iT4K+@a8D<~+)
z-oZvrPOfWeFHrWti~p@R|JUz-zwX#0h++tNXz#A1<R}|+vq0ZqKQDhX4bAl%p&^N^
z42`{E)27}@Q;X_rBjZC{oIHRwqA4JQ`~N=!0}MX~W)m1*3}hqY1wgYK7=hRs=&O1L
Jh7a}-eE?_+#*hF2

diff --git a/theme/standardwhite/footer.html b/theme/standardwhite/footer.html
deleted file mode 100644
index 6fbdf2abb6..0000000000
--- a/theme/standardwhite/footer.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-    echo $OUTPUT->container_end(); // content container
-
-    echo $OUTPUT->container_start('footer');
-    echo "<hr />";
-
-    echo '<p class="helplink">';
-    echo page_doc_link(get_string('moodledocslink'));
-    echo '</p>';
-
-    echo $loggedinas;
-    echo $homelink;
-
-    if (!empty($performanceinfo) and has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
-        echo $performanceinfo;
-    }
-
-    if (debugging()) {
-?>
-        <div class="validators"><ul>
-          <li><a href="http://validator.w3.org/check?verbose=1&amp;ss=1&amp;uri=<?php echo urlencode(qualified_me()) ?>">Validate HTML</a></li>
-          <li><a href="http://www.contentquality.com/mynewtester/cynthia.exe?rptmode=-1&amp;url1=<?php echo urlencode(qualified_me()) ?>">Section 508 Check</a></li>
-          <li><a href="http://www.contentquality.com/mynewtester/cynthia.exe?rptmode=0&amp;warnp2n3e=1&amp;url1=<?php echo urlencode(qualified_me()) ?>">WCAG 1 (2,3) Check</a></li>
-        </ul></div>
-<?php }
-    echo $OUTPUT->container_end();
-?>
-
-</div>
-</body>
-</html>
diff --git a/theme/standardwhite/gradient.jpg b/theme/standardwhite/gradient.jpg
deleted file mode 100755
index e389b3c6199b6e73fec8c0596040991d48ed37a2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 354
zcmex=<NpH&0WUXCHwH!~28I+MWcYuZ!I^=b6$F4JI~O|}I~NZpJ3A*2A2&A-H#eUk
z4;TpY2?z=b3h;@Fii?Yi%FD^g$t%MF$Ph*j4h}wEK4~E#X*qEbaXGjov5fx*7z8;O
z0vI%y83h@b1R0qH8UG()kYHeBU}j`M28_%s93UA1Oc^0zL7<E%BO|H~1_qE(B7*3m
z4F7L2@BmF`5@Z%+uxEJ5&6vS-fwf_S#ttdQ1wdr<f~_F~h<L6uJ&56MEC{~IQs(ex
S!Mqh^jvUA?g0SuX-vj^?@iqwn

diff --git a/theme/standardwhite/gradients.css b/theme/standardwhite/gradients.css
deleted file mode 100644
index ef4545c110..0000000000
--- a/theme/standardwhite/gradients.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
-  *  Adds all the nice finish to the standard theme
-  *
-  */
-
-th.header,
-td.header,
-h1.header,
-h2.header,
-h3.header,
-div.header {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
-table.rotateheaders th.header {
-    background-image: none;
-}
-.navbar {
-    background-image:url(gradient.jpg);
-    background-position:top;
-    background-repeat:repeat-x;
-}
diff --git a/theme/standardwhite/header.html b/theme/standardwhite/header.html
deleted file mode 100644
index 1bbab044d7..0000000000
--- a/theme/standardwhite/header.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html<?php echo $direction ?>>
-<head>
-    <?php echo $meta ?>
-    <meta name="keywords" content="moodle, <?php echo $title ?> " />
-    <title><?php echo $title ?></title>
-    <link rel="shortcut icon" href="<?php echo $CFG->themewww .'/'. current_theme() ?>/favicon.ico" />
-    <?php include("$CFG->javascript"); ?>
-</head>
-
-<body<?php
-    echo " $bodytags";
-    if ($focus) {
-        echo " onload=\"setfocus()\"";
-    }
-    ?>>
-
-<div id="page">
-
-<?php //Accessibility: 'headermain' is now H1, see theme/standard/styles_layout.css: .headermain
-      if ($home) {  // This is what gets printed on the home page only
-?>
-    <?php echo $OUTPUT->container_start('clearfix header-home'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } else if ($heading) {  // This is what gets printed on any other page with a heading
-?>
-    <?php echo $OUTPUT->container_start('clearfix header'); ?>
-        <h1 class="headermain"><?php echo $heading ?></h1>
-        <div class="headermenu"><?php echo $menu ?></div>
-    <?php echo $OUTPUT->container_end(); ?>
-<?php } ?>
-<?php //Accessibility: breadcrumb trail/navbar now a DIV, not a table.
-      if ($navigation) { // This is the navigation bar with breadcrumbs  ?>
-    <div class="navbar clearfix">
-        <div class="breadcrumb"><?php print_navigation($navigation); ?></div>
-        <div class="navbutton"><?php echo $button; ?></div>
-    </div>
-<?php } else if ($heading) { // If no navigation, but a heading, then print a line
-?>
-        <hr />
-<?php } ?>
-    <!-- END OF HEADER -->
-    <?php echo $OUTPUT->container_start('clearfix content'); ?>
diff --git a/theme/standardwhite/styles.php b/theme/standardwhite/styles.php
deleted file mode 100644
index a941dadc6d..0000000000
--- a/theme/standardwhite/styles.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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/>.
-
-/**
- * Serve the CSS for this theme. Every theme must contain a copy of this file
- * DO NOT MODIFY THIS FILE IT IS IMPORTANT TO THE WORKING OF THE MOODLE THEMES SYSTEM.
- * If you are are trying to change something, you should probably be looking at config.php.
- *
- * @package   moodlecore
- * @copyright 2009 Tim Hunt
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
diff --git a/theme/styles.php b/theme/styles.php
index e1d2f46a3c..4be3059314 100644
--- a/theme/styles.php
+++ b/theme/styles.php
@@ -16,180 +16,134 @@
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * This file is responsible for serving the CSS of each theme.
- *
- * It should not be linked to directly. Instead, it gets included by
- * theme/themename/styles.php. See theme/standard/styles.php as an example.
- *
- * In this script, we are serving the styles for theme $themename, but we are
- * serving them on behalf of theme $fortheme.
- *
- * To understand this, image that the currently selected theme is standardwhite.
- * This theme uses both its own stylesheets, and also the ones from the standard theme.
- * So, when we are serving theme/standard/styles.php, we need to use the config in
- * theme/standardwhite/config.php to control the settings. This is controled by the
- * for=... parameter in the URL.
- *
- * In case you are wondering, in the above scenario, we have to serve the standard
- * theme CSS with a URL like theme/standard/styles.php, so that relative links from
- * the CSS to images in the theme folder will work.
+ * This file is responsible for serving the one huge CSS of each theme.
  *
  * @package   moodlecore
- * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
+ * @copyright 2009 Petr Skoda (skodak)  {@link http://skodak.org}
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-if (empty($themename)) {
-    die('Direct access to this script is forbidden.');
-    // This script should only be required by theme/themename/styles.php.
-}
-
-// These may already be defined if we got here via style_sheet_setup in lib/deprecatedlib.php
-if (!defined('NO_MOODLE_COOKIES')) {
-    define('NO_MOODLE_COOKIES', true); // Session not used here
-}
-if (!defined('NO_UPGRADE_CHECK')) {
-    define('NO_UPGRADE_CHECK', true);  // Ignore upgrade check
-}
-require_once(dirname(__FILE__) . '/../config.php');
-
-
-$fortheme = required_param('for', PARAM_FILE);
-$pluginsheets = optional_param('pluginsheets', '', PARAM_BOOL);
-
-// Load the configuration of the selected theme. (See comment at the top of the file.)
-$PAGE->force_theme($fortheme);
-
-$DEFAULT_SHEET_LIST = array('styles_layout', 'styles_fonts', 'styles_color');
+// we need just the values from config.php and minlib.php
+define('ABORT_AFTER_CONFIG', true);
+require('../config.php'); // this stops immediately at the beginning of lib/setup.php
 
-// Fix for IE6 caching - we don't want the filemtime('styles.php'), instead use now.
-$lastmodified = time();
+$themename = min_optional_param('theme', 'standard', 'SAFEDIR');
+$type      = min_optional_param('type', 'all', 'SAFEDIR');
+$rev       = min_optional_param('rev', 0, 'INT');
 
-// Set the correct content type. (Should we also be specifying charset here?)
-header('Content-type: text/css');
-header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $lastmodified) . ' GMT');
-header('Pragma: ');
-
-// Set the caching for these style sheets
-if (debugging('', DEBUG_DEVELOPER)) {        // Use very short caching time
-    header('Cache-Control: max-age=60');     // One minute
-    header('Expires: ' . gmdate("D, d M Y H:i:s", $lastmodified + 60) . ' GMT');
-} else if ($themename == 'standard') {       // Give this one extra long caching MDL-19953
-    header('Cache-Control: max-age=172801'); // Two days plus one second
-    header('Expires: ' . gmdate("D, d M Y H:i:s", $lastmodified + 172801) . ' GMT');
-} else {                                     // Use whatever time the theme has set
-    header('Cache-Control: max-age='.$THEME->csslifetime);
-    header('Expires: ' . gmdate("D, d M Y H:i:s", $lastmodified + $THEME->csslifetime) . ' GMT');
+if (!in_array($type, array('all', 'ie', 'editor', 'yui', 'plugins', 'parents', 'theme'))) {
+    header('HTTP/1.0 404 not found');
+    die('Theme was not found, sorry.');
 }
 
-if (!empty($showdeprecatedstylesheetsetupwarning)) {
-    echo <<<END
-
-/***************************************************************
- ***************************************************************
- ****                                                       ****
- **** WARNING! This theme uses an old-fashioned styles.php  ****
- **** file. It should be updated by copying styles.php from ****
- **** the standard theme of a recent version of Moodle.     ****
- ****                                                       ****
- ***************************************************************
- ***************************************************************/
+if (!file_exists("$CFG->dirroot/theme/$themename/config.php") and !file_exists("$CFG->dataroot/theme/$themename/config.php")) {
+    header('HTTP/1.0 404 not found');
+    die('Theme was not found, sorry.');
+}
 
+if ($type === 'ie') {
+    send_ie_css($themename, $rev);
+}
 
+$candidatesheet = "$CFG->dataroot/cache/theme/$themename/css/$type.css";
 
-END;
+if (file_exists($candidatesheet)) {
+    if (!empty($_SERVER['HTTP_IF_NONE_MATCH'])) {
+        // we do not actually need to verify the etag value because our files
+        // never change in cache because we increment the rev parameter
+        header('HTTP/1.1 304 Not Modified');
+        die;
+    }
+    send_cached_css($candidatesheet, $rev);
 }
 
-// This is a bit tricky, but the following initialisation code may output
-// notices or debug developer warnings (for example, if the theme uses some
-// Deprecated settings in it config.php file. Therefore start a CSS comment
-// so that any debugging output does not break the CSS. This comment is closed
-// below.
-echo '/*';
+//=================================================================================
+// ok, now we need to start normal moodle script, we need to load all libs and $DB
+define('ABORT_AFTER_CONFIG_CANCEL', true);
 
+define('NO_MOODLE_COOKIES', true); // Session not used here
+define('NO_UPGRADE_CHECK', true);  // Ignore upgrade check
 
+require("$CFG->dirroot/lib/setup.php");
 
-// We will build up a list of CSS file path names, then concatenate them all.
-$files = array();
+$theme = theme_config::load($themename);
 
-// If this theme wants plugin sheets, include them. Do this first, so styles
-// here can be overridden by theme CSS.
-if ($pluginsheets) {
-    foreach ($THEME->pluginsheets as $plugintype) {
-        $files = array_merge($files, get_sheets_for_plugin_type($plugintype));
+if ($type === 'editor') {
+    $css = $theme->editor_css_content();
+    store_css($candidatesheet, $css);
+} else {
+    $css = $theme->css_content();
+    foreach ($css as $key=>$value) {
+        $sheet = '';
+        foreach($value as $val) {
+            if (is_array($val)) {
+                $sheet .= "\n\n".implode("\n\n", $val);
+            } else {
+                $sheet .= "\n\n".$val;
+            }
+        }
+        $css[$key] = $sheet;
+        $cssfile = "$CFG->dataroot/cache/theme/$themename/css/$key.css";
+        store_css($cssfile, $sheet);
     }
+    $css = implode('', $css);
+    $cssfile = "$CFG->dataroot/cache/theme/$themename/css/all.css";
+    store_css($cssfile, $css);
 }
 
-// Now work out which stylesheets we shold be serving from this theme.
-if ($themename == $fortheme) {
-    $themesheets = $THEME->sheets;
-
-} else if (!empty($THEME->parent) && $themename == $THEME->parent) {
-    if ($THEME->parentsheets === true) {
-        // Use all the sheets we have.
-        $themesheets = $DEFAULT_SHEET_LIST;
-    } else if (!empty($THEME->parentsheets)) {
-        $themesheets = $THEME->parentsheets;
-    } else {
-        $themesheets = array();
-    }
+send_cached_css($candidatesheet, $rev);
 
-} else if ($themename == 'standard') {
-    if ($THEME->standardsheets === true) {
-        // Use all the sheets we have.
-        $themesheets = $DEFAULT_SHEET_LIST;
-    } else if (!empty($THEME->standardsheets)) {
-        $themesheets = $THEME->standardsheets;
-    } else {
-        $themesheets = array();
-    }
-}
 
-// Conver the theme stylessheet names to file names.
-foreach ($themesheets as $sheet) {
-    $files[] = $CFG->themedir . '/' . $themename . '/' . $sheet . '.css';
-}
+//=================================================================================
+//=== utility functions ==
+// we are not using filelib because we need to fine tune all header
+// parameters to get the best performance.
 
-if (empty($files)) {
-    echo " The $fortheme theme does not require anything from the $themename theme. */\n\n";
-    exit;
+function store_css($csspath, $css) {
+    check_dir_exists(dirname($csspath), true, true);
+    $fp = fopen($csspath, 'w');
+    fwrite($fp, $css);
+    fclose($fp);
 }
 
-// Output a commen with a summary of the included files.
-echo <<<END
-
- * Styles from theme '$themename' for theme '$fortheme'
- *
- * Files included here:
- *
-
-END;
-$toreplace = array($CFG->dirroot . '/', $CFG->themedir . '/');
-foreach ($files as $file) {
-    echo ' *   ' . str_replace($toreplace, '', $file) . "\n";
+function send_ie_css($themename, $rev) {
+    $lifetime = 60*60*24*3;
+
+    $css = <<<EOF
+/** Unfortunately IE6/7 does not support more than 4096 selectors in one CSS file, which means we have to use some ugly hacks :-( **/
+@import url(styles.php?theme=$themename&rev=$rev&type=yui);
+@import url(styles.php?theme=$themename&rev=$rev&type=plugins);
+@import url(styles.php?theme=$themename&rev=$rev&type=parents);
+@import url(styles.php?theme=$themename&rev=$rev&type=theme);
+
+EOF;
+
+    header('Etag: '.md5($rev));
+    header('Content-Disposition: inline; filename="styles.php"');
+    header('Last-Modified: '. gmdate('D, d M Y H:i:s', time()) .' GMT');
+    header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
+    header('Pragma: ');
+    header('Accept-Ranges: none');
+    header('Content-Type: text/css');
+    header('Content-Length: '.strlen($css));
+
+    while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite
+    echo $css;
+    die;
 }
-echo " */\n\n";
 
-if (!empty($THEME->cssoutputfunction)) {
-    call_user_func($THEME->cssoutputfunction, $files, $toreplace);
+function send_cached_css($csspath, $rev) {
+    $lifetime = 60*60*24*20;
 
-} else {
-    foreach ($files as $file) {
-        $shortname = str_replace($toreplace, '', $file);
-        echo '/******* ' . $shortname . " start *******/\n\n";
-        @include_once($file);
-        echo '/******* ' . $shortname . " end *******/\n\n";
-    }
-}
+    header('Content-Disposition: inline; filename="styles.php"');
+    header('Last-Modified: '. gmdate('D, d M Y H:i:s', filemtime($csspath)) .' GMT');
+    header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
+    header('Pragma: ');
+    header('Accept-Ranges: none');
+    header('Content-Type: text/css');
+    header('Content-Length: '.filesize($csspath));
 
-function get_sheets_for_plugin_type($type) {
-    $files = array();
-    $mods = get_plugin_list($type);
-    foreach ($mods as $moddir) {
-        $file = $moddir . '/styles.php';
-        if (file_exists($file)) {
-            $files[] = $file;
-        }
-    }
-    return $files;
+    while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite
+    readfile($csspath);
+    die;
 }
diff --git a/theme/styles_debug.php b/theme/styles_debug.php
new file mode 100644
index 0000000000..d558d7e933
--- /dev/null
+++ b/theme/styles_debug.php
@@ -0,0 +1,96 @@
+<?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/>.
+
+/**
+ * This file is responsible for serving of individual style sheets in designer mode.
+ *
+ * @package   moodlecore
+ * @copyright 2009 Petr Skoda (skodak)  {@link http://skodak.org}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+// no chaching
+define('NO_MOODLE_COOKIES', true); // Session not used here
+define('NO_UPGRADE_CHECK', true);  // Ignore upgrade check
+require('../config.php');
+
+$themename = required_param('theme', PARAM_SAFEDIR);
+$type      = required_param('type', PARAM_SAFEDIR);
+$subtype   = optional_param('subtype', '', PARAM_SAFEDIR);
+$sheet     = optional_param('sheet', '', PARAM_SAFEDIR);
+
+if (!file_exists("$CFG->dirroot/theme/$themename/config.php") and !file_exists("$CFG->dataroot/theme/$themename/config.php")) {
+    css_not_found();
+}
+
+if (theme_get_revision() > -1) {
+    //bad luck - this should not happen!
+    css_not_found();
+}
+
+$theme = theme_config::load($themename);
+
+if ($type === 'editor') {
+    $css = $theme->editor_css_content();
+    send_uncached_css($css);
+}
+
+$css = $theme->css_content();
+
+if ($type === 'yui') {
+    send_uncached_css(reset($css['yui']));
+
+} else if ($type === 'plugin') {
+    if (isset($css['plugins'][$subtype])) {
+        send_uncached_css($css['plugins'][$subtype]);
+    }
+
+} else if ($type === 'parent') {
+    if (isset($css['parents'][$subtype][$sheet])) {
+        send_uncached_css($css['parents'][$subtype][$sheet]);
+    }
+
+} else if ($type === 'theme') {
+    if (isset($css['theme'][$sheet])) {
+        send_uncached_css($css['theme'][$sheet]);
+    }
+}
+css_not_found();
+
+//=================================================================================
+//=== utility functions ==
+// we are not using filelib because we need to fine tune all header
+// parameters to get the best performance.
+
+function send_uncached_css($css) {
+    header('Content-Disposition: inline; filename="styles_debug.php"');
+    header('Last-Modified: '. gmdate('D, d M Y H:i:s', time()) .' GMT');
+    header('Expires: '. gmdate('D, d M Y H:i:s', time() + 2) .' GMT');
+    header('Pragma: ');
+    header('Accept-Ranges: none');
+    header('Content-Type: text/css');
+    header('Content-Length: '.strlen($css));
+
+    while (@ob_end_flush()); //flush the buffers - save memory and disable sid rewrite
+    echo($css);
+    die;
+}
+
+function css_not_found() {
+    header('HTTP/1.0 404 not found');
+    die('CSS was not found, sorry.');
+}
\ No newline at end of file
diff --git a/theme/wood/styles.php b/theme/wood/styles.php
index a941dadc6d..94a76f946d 100644
--- a/theme/wood/styles.php
+++ b/theme/wood/styles.php
@@ -25,5 +25,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$themename = basename(dirname(__FILE__));
-require_once(dirname(__FILE__) . '/../../theme/styles.php');
\ No newline at end of file
+die('Not converted yet...');
diff --git a/user/editadvanced.php b/user/editadvanced.php
index 7f5dfac721..b8ff1f5d9d 100644
--- a/user/editadvanced.php
+++ b/user/editadvanced.php
@@ -46,7 +46,7 @@ if (!$course = $DB->get_record('course', array('id'=>$course))) {
 }
 if (!empty($USER->newadminuser)) {
     $PAGE->set_course($SITE);
-    $PAGE->set_generaltype('maintenance');
+    $PAGE->set_pagelayout('maintenance');
 } else {
     require_login($course);
 }
diff --git a/webservice/wsdoc.php b/webservice/wsdoc.php
index f16e3aa2b2..b51ac5278a 100644
--- a/webservice/wsdoc.php
+++ b/webservice/wsdoc.php
@@ -232,7 +232,7 @@ class webservice_documentation_generator {
         $PAGE->set_docs_path('');
         $PAGE->set_title($SITE->fullname." ".get_string('wsdocumentation', 'webservice'));
         $PAGE->set_heading($SITE->fullname." ".get_string('wsdocumentation', 'webservice'));
-        $PAGE->set_generaltype('popup');
+        $PAGE->set_pagelayout('popup');
         //unlog temporarly the user in order to not trigger environment.php called by Moodle header.
         //environment.php checkes the sessionkey that we don't have here.
         //emvrionment.php is just used to detect the flash player. We don't need
@@ -262,7 +262,7 @@ class webservice_documentation_generator {
         $PAGE->set_docs_path('');
         $PAGE->set_title($SITE->fullname." ".get_string('wsdocumentation', 'webservice'));
         $PAGE->set_heading($SITE->fullname." ".get_string('wsdocumentation', 'webservice'));
-        $PAGE->set_generaltype('popup');
+        $PAGE->set_pagelayout('popup');
 
         echo $OUTPUT->header();
         $renderer = $PAGE->theme->get_renderer('core_wsdoc',$OUTPUT);
-- 
2.39.5