Works in half duplex. Could be turned in at this revision with some commenting and the addition of a readme. Revert to here if future commits go wrong.