diff --git a/.gitmodules b/.gitmodules
index 822a0ab244dd40949f6e87664a1361f726f40a94..66af72e93362dd82ebef5ae7a5c401b7cbb158d5 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
 [submodule "firmware/cl-step-controller/src/osape"]
 	path = firmware/cl-step-controller/src/osape
 	url = ssh://git@gitlab.cba.mit.edu:846/jakeread/osape.git
+[submodule "firmware/osape-smoothieroll-drop-stepper/src/osape-d51"]
+	path = firmware/osape-smoothieroll-drop-stepper/src/osape-d51
+	url = ssh://git@gitlab.cba.mit.edu:846/jakeread/osape-d51.git
diff --git a/firmware/osape-smoothieroll-drop-stepper/src/drivers/dacs.h b/firmware/osape-smoothieroll-drop-stepper/src/drivers/dacs.h
index 15cc2eadbca5c5e918b69bc7679669d7fc71d7ed..196984e5a04f28c9a2869b38838dbd0cf80a6a64 100644
--- a/firmware/osape-smoothieroll-drop-stepper/src/drivers/dacs.h
+++ b/firmware/osape-smoothieroll-drop-stepper/src/drivers/dacs.h
@@ -18,7 +18,7 @@ is; no warranty is provided, and users accept all liability.
 #include <arduino.h>
 
 #include "indicators.h"
-#include "../osape/utils/syserror.h"
+#include "../syserror.h"
 
 // scrape https://github.com/adafruit/ArduinoCore-samd/blob/master/cores/arduino/wiring_analog.c
 // scrape https://github.com/adafruit/ArduinoCore-samd/blob/master/cores/arduino/startup.c (clock)
diff --git a/firmware/osape-smoothieroll-drop-stepper/src/drivers/step_a4950.h b/firmware/osape-smoothieroll-drop-stepper/src/drivers/step_a4950.h
index a6fa398aeea785a855fd89442876e57d331104b5..15825e310d0bf629ce92f8451325048c8b457311 100644
--- a/firmware/osape-smoothieroll-drop-stepper/src/drivers/step_a4950.h
+++ b/firmware/osape-smoothieroll-drop-stepper/src/drivers/step_a4950.h
@@ -19,7 +19,7 @@ is; no warranty is provided, and users accept all liability.
 
 #include "dacs.h"
 #include "indicators.h"
-#include "../osape/utils/syserror.h"
+#include "../syserror.h"
 
 // C_SCALE 
 // 1: DACs go 0->512 (of 4096, peak current is 1.6A at 4096): 0.2A
diff --git a/firmware/osape-smoothieroll-drop-stepper/src/indicators.h b/firmware/osape-smoothieroll-drop-stepper/src/indicators.h
new file mode 100644
index 0000000000000000000000000000000000000000..2dcb3ac7823931c3a60fdd534ab9cf10f10f176a
--- /dev/null
+++ b/firmware/osape-smoothieroll-drop-stepper/src/indicators.h
@@ -0,0 +1,52 @@
+// for the new one! with the DIP switch! 
+#define CLKLIGHT_PIN 27
+#define CLKLIGHT_PORT PORT->Group[0]
+#define ERRLIGHT_PIN 8
+#define ERRLIGHT_PORT PORT->Group[1]
+
+#define DEBUG1PIN_PIN 13
+#define DEBUG1PIN_PORT PORT->Group[1]
+#define DEBUG2PIN_PIN 12
+#define DEBUG2PIN_PORT PORT->Group[1]
+#define DEBUG3PIN_PIN 13 
+#define DEBUG3PIN_PORT PORT->Group[1]
+#define DEBUG4PIN_PIN 14
+#define DEBUG4PIN_PORT PORT->Group[1]
+
+// PA27
+#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
+
+// PB08 
+#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 DEBUG1PIN_BM (uint32_t)(1 << DEBUG1PIN_PIN)
+#define DEBUG1PIN_ON DEBUG1PIN_PORT.OUTSET.reg = DEBUG1PIN_BM
+#define DEBUG1PIN_OFF DEBUG1PIN_PORT.OUTCLR.reg = DEBUG1PIN_BM
+#define DEBUG1PIN_TOGGLE DEBUG1PIN_PORT.OUTTGL.reg = DEBUG1PIN_BM
+#define DEBUG1PIN_SETUP DEBUG1PIN_PORT.DIRSET.reg = DEBUG1PIN_BM; DEBUG1PIN_OFF
+
+#define DEBUG2PIN_BM (uint32_t)(1 << DEBUG2PIN_PIN)
+#define DEBUG2PIN_ON DEBUG2PIN_PORT.OUTSET.reg = DEBUG2PIN_BM
+#define DEBUG2PIN_OFF DEBUG2PIN_PORT.OUTCLR.reg = DEBUG2PIN_BM
+#define DEBUG2PIN_TOGGLE DEBUG2PIN_PORT.OUTTGL.reg = DEBUG2PIN_BM
+#define DEBUG2PIN_SETUP DEBUG2PIN_PORT.DIRSET.reg = DEBUG2PIN_BM; DEBUG2PIN_OFF
+
+#define DEBUG3PIN_BM (uint32_t)(1 << DEBUG3PIN_PIN)
+#define DEBUG3PIN_ON DEBUG3PIN_PORT.OUTSET.reg = DEBUG3PIN_BM
+#define DEBUG3PIN_OFF DEBUG3PIN_PORT.OUTCLR.reg = DEBUG3PIN_BM
+#define DEBUG3PIN_TOGGLE DEBUG3PIN_PORT.OUTTGL.reg = DEBUG3PIN_BM
+#define DEBUG3PIN_SETUP DEBUG3PIN_PORT.DIRSET.reg = DEBUG3PIN_BM; DEBUG3PIN_OFF
+
+#define DEBUG4PIN_BM (uint32_t)(1 << DEBUG4PIN_PIN)
+#define DEBUG4PIN_ON DEBUG4PIN_PORT.OUTSET.reg = DEBUG4PIN_BM
+#define DEBUG4PIN_OFF DEBUG4PIN_PORT.OUTCLR.reg = DEBUG4PIN_BM
+#define DEBUG4PIN_TOGGLE DEBUG4PIN_PORT.OUTTGL.reg = DEBUG4PIN_BM
+#define DEBUG4PIN_SETUP DEBUG4PIN_PORT.DIRSET.reg = DEBUG4PIN_BM; DEBUG4PIN_OFF
\ No newline at end of file
diff --git a/firmware/osape-smoothieroll-drop-stepper/src/main.cpp b/firmware/osape-smoothieroll-drop-stepper/src/main.cpp
index 3658779702e40a1668e58f86ea6d8a93cd6a5b04..40e678674f32851671f82ae7a1d489bd15750570 100644
--- a/firmware/osape-smoothieroll-drop-stepper/src/main.cpp
+++ b/firmware/osape-smoothieroll-drop-stepper/src/main.cpp
@@ -2,17 +2,17 @@
 
 #include "drivers/indicators.h"
 #include "drivers/step_a4950.h"
-#include "osape/osap/osap.h"
-#include "osape/osap/vt_usbSerial.h"
-#include "osape/osap/vt_ucBusDrop.h"
-#include "osape/ucbus/ucBusDrop.h"
+#include "osape-d51/osape/osap/osap.h"
+#include "osape-d51/vertices/vt_usbSerial.h"
+#include "osape-d51/vertices/vt_ucBusDrop.h"
+#include "osape-d51/vertices/ucBusDrop.h"
 
 // bare defaults: use vm / bus id to set on startup 
 uint8_t axis_pick = 0;
 float spu = 400.0F;
 float old_spu = 400.0F;
 volatile boolean spu_was_set = false;
-float c_scale = 0.2F;
+float c_scale = 0.05F;
 #define TICKS_PER_PACKET 25.0F
 #define TICKS_PER_SECOND 50000.0F
 
diff --git a/firmware/osape-smoothieroll-drop-stepper/src/osape-d51 b/firmware/osape-smoothieroll-drop-stepper/src/osape-d51
new file mode 160000
index 0000000000000000000000000000000000000000..e0c99875e43b267a4565cb92ebc74907ee6e1b79
--- /dev/null
+++ b/firmware/osape-smoothieroll-drop-stepper/src/osape-d51
@@ -0,0 +1 @@
+Subproject commit e0c99875e43b267a4565cb92ebc74907ee6e1b79
diff --git a/firmware/osape-smoothieroll-drop-stepper/src/syserror.cpp b/firmware/osape-smoothieroll-drop-stepper/src/syserror.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c560e1340f6ea684d19198509e0246f200bb3d3a
--- /dev/null
+++ b/firmware/osape-smoothieroll-drop-stepper/src/syserror.cpp
@@ -0,0 +1,92 @@
+#include "syserror.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;
+}
+
+boolean writeLenBytes(unsigned char* dest, uint16_t* dptr, uint16_t len){
+  dest[(*dptr) ++] = len;
+  dest[(*dptr) ++] = (len >> 8) & 255;
+  return true;
+}
+*/
+
+#ifdef UCBUS_IS_DROP
+
+//uint8_t escape[512];
+//uint8_t escapeHeader[10] = { PK_BUSF_KEY, 0, 0, 0, 0, PK_PTR, PK_PORTF_KEY, 0, 0, PK_DEST };
+
+// 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);
+  */
+}
+
+#else 
+
+// config-your-own-ll-escape-hatch
+void sysError(String msg){
+  // whatever you want,
+  //ERRLIGHT_ON;
+  uint32_t len = msg.length();
+  errBuf[0] = 0; // serport looks for acks in each msg, this is not one
+  errBuf[1] = PK_PTR; 
+  errBuf[2] = PK_LLESCAPE_KEY; // the ll-errmsg-key
+  errBuf[3] = len & 255;
+  errBuf[4] = (len >> 8) & 255;
+  errBuf[5] = (len >> 16) & 255;
+  errBuf[6] = (len >> 24) & 255;
+  msg.getBytes(&(errBuf[7]), len + 1);
+  size_t ecl = cobsEncode(errBuf, len + 7, errEncoded);
+  // direct escape 
+  //if(Serial.availableForWrite() > (int64_t)ecl){
+    Serial.write(errEncoded, ecl);
+    Serial.flush();
+  //} else {
+  //  ERRLIGHT_ON;
+  //}
+}
+
+#endif 
+
+void logPacket(uint8_t* pck, uint16_t len){
+  String errmsg;
+  errmsg.reserve(1024);
+  errmsg = "pck: "; // max 64 
+  for(uint8_t i = 0; i < 64; i ++){
+    if(i >= len) break;
+    errmsg += String(pck[i]);
+    errmsg += ", ";
+  }
+  sysError(errmsg);
+}
\ No newline at end of file
diff --git a/firmware/osape-smoothieroll-drop-stepper/src/syserror.h b/firmware/osape-smoothieroll-drop-stepper/src/syserror.h
new file mode 100644
index 0000000000000000000000000000000000000000..3645dbc38bbb4c251a83d8e2729060afaf65eab2
--- /dev/null
+++ b/firmware/osape-smoothieroll-drop-stepper/src/syserror.h
@@ -0,0 +1,10 @@
+#ifndef SYSERROR_H_
+#define SYSERROR_H_
+
+#include <Arduino.h>
+
+void sysError(String msg);
+void logPacket(uint8_t* pck, uint16_t len);
+//void sysError(uint8_t* bytes, uint16_t len);
+
+#endif