diff --git a/diagrams_source/README.txt b/diagrams_source/README.txt
new file mode 100644
index 0000000..87ffbcd
--- /dev/null
+++ b/diagrams_source/README.txt
@@ -0,0 +1,31 @@
+This is where we put the original versions of images so that we can update them if needed.
+
+_opt versions of the files are compressed/optimised and are the versions that are embedded in the Wiki.
+
+Optimizing SVG files:
+
+svgcleaner seems to be the best tool for reliably shrinkifying SVG files (does a better job of using groups to apply shared styles than scour):
+
+https://github.com/RazrFalcon/svgcleaner
+
+Available in Arch as community/svgcleaner.
+
+Run using:
+
+svgcleaner file.svg file_opt.svg
+
+if you want the output in a human readable form rather than one massive line:
+
+svgcleaner --indent=1 file.svg file_opt.svg
+
+Optimising PNG files:
+
+oxipng seems to be the best of the commonly available PNG optimisers. It has support for Zopfli which generally offers better compression than zlib.
+
+https://github.com/shssoichiro/oxipng
+
+Available in Arch as community/oxipng.
+
+Run using:
+
+oxipng --strip safe --alpha --zopfli -o max --out file_opt.png file.png
diff --git a/diagrams_source/clipart/h2_disconnect.svg b/diagrams_source/clipart/h2_disconnect.svg
new file mode 100644
index 0000000..7cd2d70
--- /dev/null
+++ b/diagrams_source/clipart/h2_disconnect.svg
@@ -0,0 +1,136 @@
+
+
+
+
diff --git a/diagrams_source/clipart/h2_disconnect_opt.svg b/diagrams_source/clipart/h2_disconnect_opt.svg
new file mode 100644
index 0000000..4ce5904
--- /dev/null
+++ b/diagrams_source/clipart/h2_disconnect_opt.svg
@@ -0,0 +1,22 @@
+
diff --git a/diagrams_source/lab02/domain_model.puml b/diagrams_source/lab02/domain_model.puml
new file mode 100644
index 0000000..f93aa05
--- /dev/null
+++ b/diagrams_source/lab02/domain_model.puml
@@ -0,0 +1,59 @@
+@startuml
+hide empty members
+
+skinparam {
+ Style StrictUML
+ ClassAttributeIconSize 0
+ ClassStereotypeFont {
+ Size 12
+ Style plain
+ }
+ Defaultfontsize 14
+ Classfontsize 16
+ Roundcorner 8
+ Padding 2
+ RankSep 100
+ NodeSep 120
+}
+
+class Customer {
+ - customerId : Integer <> <>
+ - username : String <>
+ - firstName : String
+ - surname : String
+ - password : String
+ - emailAddress : String
+ - shippingAddress : String
+ --
+}
+
+class Product {
+ - productId : String <>
+ - name : String
+ - description : String
+ - category : String
+ - listPrice : BigDecimal
+ - quantityInStock : BigDecimal
+ --
+}
+
+class Sale {
+ - saleId : Integer <> <>
+ - date : LocalDateTime
+ - status : String
+ --
+ + getTotal() : BigDecimal
+ + addItem(saleItem : SaleItem) : void
+}
+
+class SaleItem {
+ - quantityPurchased : BigDecimal
+ - salePrice : BigDecimal
+ --
+ + getItemTotal() : BigDecimal
+}
+
+Sale -up-> "**1..1**\r-customer " Customer
+Sale -right-> "-items\r**0..*** " SaleItem
+SaleItem -up-> "**1..1**\r-product " Product
+@enduml
diff --git a/diagrams_source/lab02/domain_model.svg b/diagrams_source/lab02/domain_model.svg
new file mode 100644
index 0000000..9c2e859
--- /dev/null
+++ b/diagrams_source/lab02/domain_model.svg
@@ -0,0 +1,76 @@
+
\ No newline at end of file
diff --git a/diagrams_source/lab02/domain_model_opt.svg b/diagrams_source/lab02/domain_model_opt.svg
new file mode 100644
index 0000000..8be89d0
--- /dev/null
+++ b/diagrams_source/lab02/domain_model_opt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/diagrams_source/lab02/main_menu_mockup.png b/diagrams_source/lab02/main_menu_mockup.png
new file mode 100644
index 0000000..9b6c0fb
--- /dev/null
+++ b/diagrams_source/lab02/main_menu_mockup.png
Binary files differ
diff --git a/diagrams_source/lab02/main_menu_mockup_opt.png b/diagrams_source/lab02/main_menu_mockup_opt.png
new file mode 100644
index 0000000..0948dde
--- /dev/null
+++ b/diagrams_source/lab02/main_menu_mockup_opt.png
Binary files differ
diff --git a/diagrams_source/lab02/merging_topic_branches_opt.svg b/diagrams_source/lab02/merging_topic_branches_opt.svg
index e4afd15..fbac361 100644
--- a/diagrams_source/lab02/merging_topic_branches_opt.svg
+++ b/diagrams_source/lab02/merging_topic_branches_opt.svg
@@ -1 +1 @@
-
+
\ No newline at end of file
diff --git a/diagrams_source/lab02/product_editor_dialog_mockup.png b/diagrams_source/lab02/product_editor_dialog_mockup.png
new file mode 100644
index 0000000..31c7bad
--- /dev/null
+++ b/diagrams_source/lab02/product_editor_dialog_mockup.png
Binary files differ
diff --git a/diagrams_source/lab02/product_editor_dialog_mockup_opt.png b/diagrams_source/lab02/product_editor_dialog_mockup_opt.png
new file mode 100644
index 0000000..c73190d
--- /dev/null
+++ b/diagrams_source/lab02/product_editor_dialog_mockup_opt.png
Binary files differ
diff --git a/diagrams_source/lab06/add_new_product_sequence.puml b/diagrams_source/lab06/add_new_product_sequence.puml
new file mode 100644
index 0000000..92f94ba
--- /dev/null
+++ b/diagrams_source/lab06/add_new_product_sequence.puml
@@ -0,0 +1,69 @@
+@startuml
+' style tweaks to make the diagram a little more readable
+skinparam {
+ Style StrictUML
+ RoundCorner 5
+ ParticipantPadding 10
+ Padding 2
+ defaultFontSize 14
+ SequenceStereotype {
+ Font {
+ Size 12
+ Style plain
+ }
+ }
+ Database {
+ BorderColor #A80036
+ }
+}
+
+actor User as user
+participant ":Main" as main
+participant ":MainMenu" as menu << frame >>
+participant ":ProductEditor" as dialog << dialog >>
+participant "dao\n:ProductJdbiDAO" as dao <>
+participant "categoryModel\n:SimpleListModel" as model
+participant "product\n:Product" as product << domain >>
+database "H2\nDatabase" as db
+
+create dao
+main -> dao : «construct»
+
+
+create menu
+main -> menu : «construct(dao)»
+
+user -> menu++ : clicks 'Add New Product'
+
+create dialog
+menu -> dialog++ : « construct (dao)»
+
+dialog -> dao : getCategories()
+dao++
+dao -> db++ : select distinct category from product
+return query result
+return categories
+
+create model
+
+dialog -> model : « construct »
+
+dialog -> model++ : updateItems(categories)
+model--
+
+dialog--
+
+user -> dialog : enters product details into input components
+
+user -> dialog++ : clicks 'Save'
+
+create product
+dialog -> product : « construct from user input »
+
+dialog -> dao++ : saveProduct(product)
+dao -> db++ : insert into product (...) values (...)
+db--
+dao--
+
+destroy dialog
+@enduml
diff --git a/diagrams_source/lab06/add_new_product_sequence.svg b/diagrams_source/lab06/add_new_product_sequence.svg
new file mode 100644
index 0000000..004e1e6
--- /dev/null
+++ b/diagrams_source/lab06/add_new_product_sequence.svg
@@ -0,0 +1,149 @@
+
\ No newline at end of file
diff --git a/diagrams_source/lab06/add_new_product_sequence_opt.svg b/diagrams_source/lab06/add_new_product_sequence_opt.svg
new file mode 100644
index 0000000..e5bd354
--- /dev/null
+++ b/diagrams_source/lab06/add_new_product_sequence_opt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/diagrams_source/lab09/web_get_products_sequence.puml b/diagrams_source/lab09/web_get_products_sequence.puml
new file mode 100644
index 0000000..18e7668
--- /dev/null
+++ b/diagrams_source/lab09/web_get_products_sequence.puml
@@ -0,0 +1,61 @@
+@startuml
+' style tweaks to make the diagram a little more readable
+skinparam {
+ Style strictuml
+ RoundCorner 5
+ BoxPadding 35
+ ParticipantPadding 15
+ Padding 2
+
+ Sequence {
+ ' make activations yellow too
+ LifeLineBackgroundColor #FDFDCD
+
+ ' make stereotypes less ugly
+ Stereotype {
+ Font {
+ Size 11
+ Style plain
+ }
+ }
+ }
+
+ Database {
+ BorderColor #A80036
+ }
+
+}
+
+Actor Customer as user
+
+box " Web Browser " #white
+ Participant "Products\nPage" as page << HTML >>
+ user -> page++: views page
+ participant "products-list" as controller <>
+ participant "axios" as axios <>
+end box
+
+box "Web Server" #white
+ Participant "Server" as service << Jooby >>
+ Participant "ProductModule" as module << Jooby >>
+ Participant "ProductDAO" as dao << DAO >>
+end box
+
+database "Database" as db
+
+page -> controller++ : « mounted »
+controller -> controller++ : getAllProducts()
+controller -> axios++ : get("/api/products")
+axios -> service++ : HTTP GET /api/products
+service -> module++ : get("/api/products")
+module -> dao++ : getProducts()
+dao -> db++ : select * from products
+return result
+return products
+return products
+return JSON encoded products
+return JSON encoded products
+return JavaScript products
+return products merged with template
+
+@enduml
diff --git a/diagrams_source/lab09/web_get_products_sequence.svg b/diagrams_source/lab09/web_get_products_sequence.svg
new file mode 100644
index 0000000..5de6f9b
--- /dev/null
+++ b/diagrams_source/lab09/web_get_products_sequence.svg
@@ -0,0 +1,128 @@
+
\ No newline at end of file
diff --git a/diagrams_source/lab09/web_get_products_sequence_opt.svg b/diagrams_source/lab09/web_get_products_sequence_opt.svg
new file mode 100644
index 0000000..3678169
--- /dev/null
+++ b/diagrams_source/lab09/web_get_products_sequence_opt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/tiddlers/content/labs/lab01/_Labs_01_Exercise_ Create a Project.md b/tiddlers/content/labs/lab01/_Labs_01_Exercise_ Create a Project.md
index 68a449d..7400e15 100644
--- a/tiddlers/content/labs/lab01/_Labs_01_Exercise_ Create a Project.md
+++ b/tiddlers/content/labs/lab01/_Labs_01_Exercise_ Create a Project.md
@@ -18,7 +18,7 @@
Add the code that prints `hello world` to the output console.
- {{$:/core/images/tip}} Tip: You can use a template --- type `sout` and hit < Space">>. We will show you how to view the list of templates later in this lab.
+ <> Tip: You can use a template --- type `sout` and hit < Space">>. We will show you how to view the list of templates later in this lab.
8. Run the class. Right click the class (either in the project pane, or the background of the source window) and select <