diff --git a/firmware/motion-head/src/indicators.h b/firmware/motion-head/src/indicators.h
index 81c727cbd55e1f9ec41fc520fe66b7896ab82394..e95b9991def2041a1aa24c658bbc6c09b9adf279 100644
--- a/firmware/motion-head/src/indicators.h
+++ b/firmware/motion-head/src/indicators.h
@@ -4,26 +4,18 @@
 #define CLKLIGHT_PIN 27
 #define CLKLIGHT_PORT PORT->Group[0]
 #define CLKLIGHT_BM (uint32_t)(1 << CLKLIGHT_PIN)
-#define CLKLIGHT_ON 
-//CLKLIGHT_PORT.OUTCLR.reg = CLKLIGHT_BM
-#define CLKLIGHT_OFF 
-//CLKLIGHT_PORT.OUTSET.reg = CLKLIGHT_BM
-#define CLKLIGHT_TOGGLE 
-//CLKLIGHT_PORT.OUTTGL.reg = CLKLIGHT_BM
-#define CLKLIGHT_SETUP 
-//CLKLIGHT_PORT.DIRSET.reg = CLKLIGHT_BM; CLKLIGHT_OFF
+#define CLKLIGHT_ON CLKLIGHT_PORT.OUTCLR.reg = CLKLIGHT_BM
+#define CLKLIGHT_OFF CLKLIGHT_PORT.OUTSET.reg = CLKLIGHT_BM
+#define CLKLIGHT_TOGGLE CLKLIGHT_PORT.OUTTGL.reg = CLKLIGHT_BM
+#define CLKLIGHT_SETUP CLKLIGHT_PORT.DIRSET.reg = CLKLIGHT_BM; CLKLIGHT_OFF
 
 #define ERRLIGHT_PIN 8
 #define ERRLIGHT_PORT PORT->Group[1]
 #define ERRLIGHT_BM (uint32_t)(1 << ERRLIGHT_PIN)
-#define ERRLIGHT_ON 
-//ERRLIGHT_PORT.OUTCLR.reg = ERRLIGHT_BM
-#define ERRLIGHT_OFF 
-//ERRLIGHT_PORT.OUTSET.reg = ERRLIGHT_BM
-#define ERRLIGHT_TOGGLE 
-//ERRLIGHT_PORT.OUTTGL.reg = ERRLIGHT_BM
-#define ERRLIGHT_SETUP 
-//ERRLIGHT_PORT.DIRSET.reg = ERRLIGHT_BM; ERRLIGHT_OFF
+#define ERRLIGHT_ON ERRLIGHT_PORT.OUTCLR.reg = ERRLIGHT_BM
+#define ERRLIGHT_OFF ERRLIGHT_PORT.OUTSET.reg = ERRLIGHT_BM
+#define ERRLIGHT_TOGGLE ERRLIGHT_PORT.OUTTGL.reg = ERRLIGHT_BM
+#define ERRLIGHT_SETUP ERRLIGHT_PORT.DIRSET.reg = ERRLIGHT_BM; ERRLIGHT_OFF
 
 // PSU-breakout board lights, 
 
diff --git a/firmware/motion-head/src/main.cpp b/firmware/motion-head/src/main.cpp
index cf7aaac058ef42b6c1794a775d5788b567ebf3d0..f6c7ceb2ba48d4862ab6152190f5a87b023d795a 100644
--- a/firmware/motion-head/src/main.cpp
+++ b/firmware/motion-head/src/main.cpp
@@ -231,7 +231,7 @@ void setup() {
   smoothieRoll->init(20000);
   // 25kHz base (40us period) or 
   // 20kHz base (50us period)
-  d51ClockBoss->start_ticker_a(50); 
+  d51ClockBoss->start_ticker_a(100); 
 }
 
 void loop() {
@@ -252,10 +252,13 @@ void TC0_Handler(void){
   // runs at period established above... 
   TC0->COUNT32.INTFLAG.bit.MC0 = 1;
   TC0->COUNT32.INTFLAG.bit.MC1 = 1;
+  DEBUG1PIN_TOGGLE;
   timeTick ++;
   timeBlink ++;
   if(timeBlink > blinkTime){
-    DEBUG1PIN_TOGGLE;
+    //DEBUG1PIN_TOGGLE;
+    CLKLIGHT_TOGGLE;
+    sysErrLightCheck();
     timeBlink = 0; 
   }
   // do bus action first: want downstream clocks to be deterministic-ish
diff --git a/firmware/motion-head/src/osape-d51 b/firmware/motion-head/src/osape-d51
index 82214472bdab35fa776d99c5c8e36e57f51d18e0..0beaf064563e5773f2979d09ad40cefd786ca383 160000
--- a/firmware/motion-head/src/osape-d51
+++ b/firmware/motion-head/src/osape-d51
@@ -1 +1 @@
-Subproject commit 82214472bdab35fa776d99c5c8e36e57f51d18e0
+Subproject commit 0beaf064563e5773f2979d09ad40cefd786ca383
diff --git a/firmware/motion-head/src/syserror.cpp b/firmware/motion-head/src/syserror.cpp
index 67d696423fd8fe65da6fb351fc29afa9136b24ac..a650704bee1384f9e6475b5da6b8b9e1f030f29a 100644
--- a/firmware/motion-head/src/syserror.cpp
+++ b/firmware/motion-head/src/syserror.cpp
@@ -1,55 +1,52 @@
 #include "syserror.h"
+#include "indicators.h"
 #include "osape-d51/osape/osap/ts.h"
 #include "osape-d51/vertices/ucBusDrop.h"
 #include "osape-d51/osape/utils/cobs.h"
 #include "config.h"
 
+
 uint8_t errBuf[1028];
 uint8_t errEncoded[1028];
 
-/*
-boolean writeString(unsigned char* dest, uint16_t* dptr, String msg){
-  uint16_t len = msg.length();
-  dest[(*dptr) ++] = TS_STRING_KEY;
-  writeLenBytes(dest, dptr, len);
-  msg.getBytes(dest, len + 1);
-  return true;
-}
+volatile unsigned long errLightLastOn = 0;
+volatile unsigned long errLightOnTime = 0;
+volatile boolean errLightBlink = true;
+volatile boolean errLightOn = false;
 
-boolean writeLenBytes(unsigned char* dest, uint16_t* dptr, uint16_t len){
-  dest[(*dptr) ++] = len;
-  dest[(*dptr) ++] = (len >> 8) & 255;
-  return true;
+void sysErrLightFlash(uint8_t level){
+  ERRLIGHT_ON;
+  errLightOn = true;
+  errLightLastOn = millis();
+  switch(level){
+    case 0:
+      errLightBlink = false;
+      break;
+    case 1:
+      errLightOnTime = 5000;
+      break;
+    case 2: 
+      errLightOnTime = 1000;
+      break;
+    case 3: 
+      errLightOnTime = 250;
+      break;
+  }
 }
-*/
 
-#ifdef UCBUS_IS_DROP
+void sysErrLightCheck(void){
+  if(errLightOn && errLightBlink){
+    if(errLightLastOn + errLightOnTime < millis()){
+      ERRLIGHT_OFF;
+      errLightOn = false;
+    }
+  }
+}
 
-//uint8_t escape[512];
-//uint8_t escapeHeader[10] = { PK_BUSF_KEY, 0, 0, 0, 0, PK_PTR, PK_PORTF_KEY, 0, 0, PK_DEST };
+#ifdef UCBUS_IS_DROP 
 
-// config-your-own-ll-escape-hatch
 void sysError(String msg){
-  //ERRLIGHT_ON;
-  /*
-  uint32_t len = msg.length();
-  errBuf[0] = PK_LLERR; // the ll-errmsg-key
-  errBuf[1] = len & 255;
-  errBuf[2] = (len >> 8) & 255;
-  errBuf[3] = (len >> 16) & 255;
-  errBuf[4] = (len >> 24) & 255;
-  msg.getBytes(&(errBuf[5]), len + 1);
-  // write header, 
-  memcpy(escape, escapeHeader, 10);
-  // write segsize, checksum 
-  uint16_t wptr = 10;
-  ts_writeUint16(128, escape, &wptr);
-  ts_writeUint16(len + 5, escape, &wptr);
-  memcpy(&(escape[wptr]), errBuf, len + 5);
-  // transmit on ucbus 
-  // potential here to hang-up and do while(!(ucBusDrop->cts())) ... I *think* that would clear on an interrupt
-  ucBusDrop->transmit(escape, len + wptr + 5);
-  */
+  // noop 
 }
 
 #else 
@@ -90,4 +87,5 @@ void logPacket(uint8_t* pck, uint16_t len){
     errmsg += ", ";
   }
   sysError(errmsg);
-}
\ No newline at end of file
+}
+
diff --git a/firmware/motion-head/src/syserror.h b/firmware/motion-head/src/syserror.h
index 3645dbc38bbb4c251a83d8e2729060afaf65eab2..489173a78b43b8fb1dcf5fc6b4d310aae53438b2 100644
--- a/firmware/motion-head/src/syserror.h
+++ b/firmware/motion-head/src/syserror.h
@@ -7,4 +7,9 @@ void sysError(String msg);
 void logPacket(uint8_t* pck, uint16_t len);
 //void sysError(uint8_t* bytes, uint16_t len);
 
+void sysErrLightFlash(uint8_t level);
+void sysErrLightCheck(void);
+
+#define ERROR(level, msg) sysErrLightFlash(level); sysError(msg)
+
 #endif