diff --git a/README.md b/README.md
index b13fad7eb7dccbbc067e7c1274c964807c8e6831..18189017b6ad17a289ea3f3504c753c91168420b 100644
--- a/README.md
+++ b/README.md
@@ -15,27 +15,15 @@ This project serves the developement environment / api we use to write and repre
 
 ## For MW
 
- - rick click on menu bar to delete module 
-  - delete module ? then we're done ... 
-
  - walk program units and change 
- - what program units do we want?
- - try demo machine setup ... want flow control, 
- - jogging, etc ... keydown units ? 
-
- - documentation 
-
- - upd8ts to modules:
   - rename inout to jsunit
   - buttons get onClick evt 
+ - make hardware link / ports work / hardware type 
+ - what program units do we want?
+ - try demo machine setup ... want flow control, better planning, this is actually a big thing 
+ - jogging, etc ... keydown modules ? 
 
- - as you test, to track, 
-  - weird state types solution: arrays, numbers, buttons, etc ?
-
- - UI desires
-  - off-screen divs get pointers-to so that we don't get lost
-  - 'h' or something to zoom-to-extents
-
+## Documentation
  - GIFS
   - load a program
   - drag around
@@ -46,10 +34,6 @@ This project serves the developement environment / api we use to write and repre
   - rm modules
   - change settings 
 
- - next spiral
-  - programs come in chunk-wise and get placed 
-  - programs are modules are heirarchical 
-
 ## Questionable Moves
  - module deletion seems unclean
  - input / output objects should be able to unhook themselves: 
@@ -57,7 +41,7 @@ This project serves the developement environment / api we use to write and repre
 
 ## WRT Representations
 
-OK
+OK, should write this out properly at some point.
 
 Module have 
  Inputs
@@ -75,19 +59,13 @@ Modules-that-represent-remote-computing also have
 
 To assemble a representation of these, we want to have a kind of 'netlist' that, for convenience, we'll treat like a JSON object. We want heirarchy, so consider the representation having 'top-level' outputs / inputs / state as well ? 
 
-
 ## Programming Notes
 
 ### 15 Minute Tasks 
  - @ views.js, uiRequestModuleMenu and uiRequestProgramMenu don't properly build trees from folder structure. similarly, reciprical fn's in client.js do the same 
  - @ these load / save functions could also reach into the modules' source to retrieve their proper names, as spec'd in description ... 
-
  - 's' for save program uses hack-asf DOM alert to ask for path
 
-title bar
-L for load prgmem
-M for add module
-
 - once we can plan gcode sequence, work towards more
  - better hardware abstraction, i.e.
    stepper.port = bridge.port('0,1')
@@ -113,6 +91,8 @@ M for add module
 
 ## Want
 - log() for logs-from-module tagged 
+- off-screen divs get pointers-to so that we don't get lost
+  - 'h' or something to zoom-to-extents
 
 ## Demo Desires 
 - want to show immediacy of hardware: software representation
diff --git a/src/hardware/bridge.js b/src/hardware/bridge.js
index 192e24e916e44e6546b7ad5b3f00559f1f7ff1bf..ddf2d97de1732964c001a9e32783cecfde8a0314 100644
--- a/src/hardware/bridge.js
+++ b/src/hardware/bridge.js
@@ -1,5 +1,5 @@
 // boilerplate atkapi header
-const InOut = require('../../lib/inout.js')
+const InOut = require('../../lib/jsunit.js')
 let Input = InOut.Input
 let Output = InOut.Output
 
@@ -28,12 +28,11 @@ function ATKBridge() {
     state.rF = '0,5'
     state.rG = '0'
 
-    state.findPort = Button('click to find atk port')
+    state.findPort = Button('click to find atk port', findPort)
     state.portName = '---'
-    state.connect = Button('click to connect')
+    state.connect = Button('click to connect', openPort)
     state.portStatus = 'closed' // or we hope it will be 
     state.terminal = 'address | key:values'
-    state.sendRawPacket = Button('sendRaw')
 
     /*
     ------------------------------------------------------
@@ -43,8 +42,6 @@ function ATKBridge() {
 
     port = null
 
-    state.onChange('findPort', findPort)
-
     function findPort() {
         serialport.list(function(err, ports) {
             ports.forEach(function(port) {
@@ -57,7 +54,6 @@ function ATKBridge() {
         })
     }
 
-    state.onChange('connect', openPort)
     bridge.init = openPort
 
     function openPort() {
@@ -128,20 +124,6 @@ function ATKBridge() {
         })
     }
 
-    state.onChange('sendRawPacket', function() {
-        if (parseTerminal(state.terminal)) {
-            state.sendRawPacket.isPressed = false
-        } else {
-            state.terminal = 'not parsed successfully'
-            state.sendRawPacket.isPressed = false
-        }
-    })
-
-    function parseTerminal(str) {
-        console.log("BRIDGE TERMINAL PARSE NOT YET")
-        return false
-    }
-
     function onSoftwareInput(key, pckt) {
         // it would be responsible to check this over now, but hey 
         var packet = JSON.parse(JSON.stringify(pckt))
diff --git a/src/hardware/stepper.js b/src/hardware/stepper.js
index eadb18d2659d04ff323545789bd07840209176b8..cbe937486da163fdcdfe0ead21ca4c323f728f7c 100644
--- a/src/hardware/stepper.js
+++ b/src/hardware/stepper.js
@@ -1,5 +1,5 @@
 // boilerplate atkapi header
-const InOut = require('../../lib/inout.js')
+const InOut = require('../../lib/jsunit.js')
 let Input = InOut.Input
 let Output = InOut.Output
 
@@ -28,16 +28,11 @@ function Stepper() {
     state.spu = 200 // steps per unit 
     state.rawMove = -10
 
-    state.makeMove = Button('test move')
+    state.makeMove = Button('test move', onRawMove)
 
     state.lead = 0
     state.position = 0 // in steps 
 
-    state.onChange('makeMove', function() {
-        onRawMove()
-        state.makeMove.isPressed = false
-    })
-
     stepper.inputs = {
         move: Input('move instruction', onNewInstruction),
         packet: Input('headless packet', onHardwareIn),