diff --git a/content/_index.md b/content/_index.md
index d422139..ebed7e6 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -6,10 +6,11 @@ sort_by = "weight"
Experiment control
- ARTIQ
- Sinara core
+ - Control loops
Gateware
- Migen
Software
- - Solvespace
+ - SolveSpace
- Smoltcp
diff --git a/content/experiment-control/control-loops.md b/content/experiment-control/control-loops.md
new file mode 100644
index 0000000..4b2d9e7
--- /dev/null
+++ b/content/experiment-control/control-loops.md
@@ -0,0 +1,107 @@
++++
+title = "Control loops"
+weight = 3
+template = "page-hero.html"
++++
+
+
+{% textimg(src="images/stabilizer@2x.png", alt="", bodyleft=true, customcss="row d-flex align-items-center mb-4 pb-2", shadow=false, md=true) %}
+
+##### Stabilizer
+
+The stabilizer module is a CPU-based dual-channel fast servo. It can be controlled by Kasli or work stand-alone with Power-over-Ethernet (PoE) supply.
+
+- 400MHz STM32H743ZIT6
+- dual 16bit ADC with x2, x5, x10 PGA (2MS/s)
+- 16bit AD5542A DAC (1µs settling time)
+- PoE supply
+- 10/100Base-T Ethernet
+- connectors for optional analog front-end (AFE) module
+- IDC connectors for IDC-BNC extension for digital IO and aux analog inputs and outputs
+
+It can be used as a general-purpose PID controller. Several AFE extensions are under development including high current power supply for magnets.
+
+More information
+
+{% end %}
+
+
+{% centerp(safe=true) %}
+
+
+
+{% end %}
+
+{{ centercontent(customcss="row d-flex align-items-center", md=true, src="images/_standard-open-source-firmware@2x.png", alt="") }}
+
+{% layoutlr1(customcss="row d-flex align-items-center mt-4 mb-5 pt-2 pb-2") %}
+
+
+
+ - dual channel
+ - SPI ADC
+ - SPI DAC
+ - fixed AFE gains
+ - 500 kHz rate, timed
+ - < 2 µs latency, unmatched
+
+
+
+
+
+ - f32 IIR math
+ - generic biquad (second order) IIR filter
+ - anti-windup
+ - derivative kick avoidance
+ - configurable output limits
+
+
+
+
+
+ To purchase this controller, email sales@m-***s.hk. We also offer firmware customizations and development of new features. Note that features that are not implemented in the open source code above (e.g. control from Kasli) are not supported unless purchased separately.
+
+
+
+{% end %}
+
+
+{% textimg(src="images/Thermostat@2x.png", alt="", customcss="", bodyleft=false, shadow=false, md=true) %}
+
+##### Thermostat
+
+This module is a 2-channel temperature controller EEM based on the Maxim MAX1968 driver, capable of driving 6W into a TEC or resistive heater. The sensor interface is based on AD7172 ADC.
+
+Preliminary specifications:
+
+- Channel count: 2
+- Sensor: 10k NTC thermistor
+- Load (heater/TEC) drive: up to 8W (+-2A with 4V compliance)
+- Form factor: 3U module or stand-alone AL enclosure (Hammond 1455C1202).
+- Output connectors: Sensor and load connect via either terminal block connector on the front panel or via internal 100mil pin-header.
+- Programming interface: Ethernet accessible via RJ45 connector on the front panel
+- Power supply: +12V DC (1.5A max) supplied either by a front-panel barrel connector, via 100mils Zotino connector, or PoE (up to 30W).
+- STM32 MCU
+
+This module is still in development and is not currently available.
+
+{% end %}
+
+
+{% textimg(alt="", customcss="", bodyleft=true, shadow=false, md=true) %}
+
+##### SU-Servo
+
+With the SU-Servo feature of ARTIQ, the AD9910 variant of Urukul (which has fine amplitude control) can be used in combination with the Sampler ADC to form a laser intensity servo. In this application, the Urukul card drives AOMs and photodiodes are connected to Sampler to monitor laser intensities. When ordering your system, specify that you want SU-Servo integrated into the gateware.
+
+See the Sinara Core page for the relevant devices (Kasli, Sampler and Urukul).
+
+{% end %}
\ No newline at end of file
diff --git a/content/software/solvespace.md b/content/software/solvespace.md
index 0831f92..6846fc4 100644
--- a/content/software/solvespace.md
+++ b/content/software/solvespace.md
@@ -1,4 +1,4 @@
+++
-title = "Solvespace"
+title = "SolveSpace"
weight = 1
+++
diff --git a/static/images/Thermostat.png b/static/images/Thermostat.png
new file mode 100644
index 0000000..ade7259
Binary files /dev/null and b/static/images/Thermostat.png differ
diff --git a/static/images/Thermostat@2x.png b/static/images/Thermostat@2x.png
new file mode 100755
index 0000000..9156422
Binary files /dev/null and b/static/images/Thermostat@2x.png differ
diff --git a/static/images/_standard-open-source-firmware.png b/static/images/_standard-open-source-firmware.png
new file mode 100644
index 0000000..c432309
Binary files /dev/null and b/static/images/_standard-open-source-firmware.png differ
diff --git a/static/images/_standard-open-source-firmware@2x.png b/static/images/_standard-open-source-firmware@2x.png
new file mode 100755
index 0000000..8e8e7ef
Binary files /dev/null and b/static/images/_standard-open-source-firmware@2x.png differ
diff --git a/static/images/side.png b/static/images/side.png
new file mode 100644
index 0000000..5851211
Binary files /dev/null and b/static/images/side.png differ
diff --git a/static/images/side@2x.png b/static/images/side@2x.png
new file mode 100755
index 0000000..b19e7f4
Binary files /dev/null and b/static/images/side@2x.png differ
diff --git a/static/images/stabilizer.png b/static/images/stabilizer.png
new file mode 100644
index 0000000..4ce8711
Binary files /dev/null and b/static/images/stabilizer.png differ
diff --git a/static/images/stabilizer@2x.png b/static/images/stabilizer@2x.png
new file mode 100755
index 0000000..b2eca4e
Binary files /dev/null and b/static/images/stabilizer@2x.png differ
diff --git a/templates/shortcodes/centercontent.html b/templates/shortcodes/centercontent.html
index 572fe2b..420b799 100644
--- a/templates/shortcodes/centercontent.html
+++ b/templates/shortcodes/centercontent.html
@@ -1,4 +1,4 @@
-
+
diff --git a/templates/shortcodes/centerp.html b/templates/shortcodes/centerp.html
index 0a76629..27371fa 100644
--- a/templates/shortcodes/centerp.html
+++ b/templates/shortcodes/centerp.html
@@ -1,3 +1,7 @@
- {{ body }}
+ {% if safe %}
+ {{ body | safe}}
+ {% else %}
+ {{ body }}
+ {% endif %}
\ No newline at end of file
diff --git a/templates/shortcodes/layoutlr1.html b/templates/shortcodes/layoutlr1.html
index 07151ab..d74f50b 100644
--- a/templates/shortcodes/layoutlr1.html
+++ b/templates/shortcodes/layoutlr1.html
@@ -1,4 +1,4 @@
-
+
{{ body | safe }}
diff --git a/templates/shortcodes/textimg.html b/templates/shortcodes/textimg.html
index 29f8230..ed4c96f 100644
--- a/templates/shortcodes/textimg.html
+++ b/templates/shortcodes/textimg.html
@@ -20,7 +20,9 @@
+ {% if src %}
+ {% endif %}
@@ -32,7 +34,9 @@
+ {% if src %}
+ {% endif %}