   }
 }
 
+class MultiReporter: public Reporter {
+public:
+  MultiReporter(Reporter* reporter1, Reporter* reporter2, Reporter* reporter3);
+  virtual void ReportStop(long pulses);
+  virtual void ReportContinue(long pulses);
+  virtual void ReportStart(long pulses);
+  virtual void ReportIgnore(long pulses);
+private:
+  Reporter* _reporter1;
+  Reporter* _reporter2;
+  Reporter* _reporter3;
+};
+
+MultiReporter::MultiReporter(Reporter* reporter1, Reporter* reporter2, Reporter* reporter3) { 
+  _reporter1 = reporter1;
+  _reporter2 = reporter2;
+  _reporter3 = reporter3;
+}
+
+void MultiReporter::ReportStop(long pulses){
+  if(_reporter1 != NULL) {
+    _reporter1->ReportStop(pulses);
+  }
+  if(_reporter2 != NULL) {
+    _reporter2->ReportStop(pulses);
+  }
+  if(_reporter3 != NULL) {
+    _reporter3->ReportStop(pulses);
+  }
+}
+void MultiReporter::ReportContinue(long pulses) {
+  if(_reporter1 != NULL) {
+    _reporter1->ReportContinue(pulses);
+  }
+  if(_reporter2 != NULL) {
+    _reporter2->ReportContinue(pulses);
+  }
+  if(_reporter3 != NULL) {
+    _reporter3->ReportContinue(pulses);
+  }
+}
+void MultiReporter::ReportStart(long pulses){
+  if(_reporter1 != NULL) {
+    _reporter1->ReportStart(pulses);
+  }
+  if(_reporter2 != NULL) {
+    _reporter2->ReportStart(pulses);
+  }
+  if(_reporter3 != NULL) {
+    _reporter3->ReportStart(pulses);
+  }
+}
+void MultiReporter::ReportIgnore(long pulses){
+  if(_reporter1 != NULL) {
+    _reporter1->ReportIgnore(pulses);
+  }
+  if(_reporter2 != NULL) {
+    _reporter2->ReportIgnore(pulses);
+  }
+  if(_reporter3 != NULL) {
+    _reporter3->ReportIgnore(pulses);
+  }
+}
+
 class SerialReporter: public Reporter {
 public:
   SerialReporter(byte number);

}


Tap* tap1;
Tap* tap2;

// prep - initialize serial (TX on pin 1) and wire up the interrupts for pulses from the taps (pins 2 and 3)
void setup() {
  Serial.begin(9600);
  while(!Serial);
  tap1 = new Tap(new SerialReporter(1));
  attachInterrupt(0, tap1Pulse, RISING);
  tap2 = new Tap(new SerialReporter(2));
  attachInterrupt(1, tap2Pulse, RISING);
}


#define DEBUG_LEVEL 5

#include <SPI.h>
#include <Configuration.h>
#include <Debug.h>
#include <ParsedStream.h>
#include <SpiUart.h>
#include <WiFly.h>
#include <WiFlyClient.h>
#include <WiFlyDevice.h>
#include <WiFlyServer.h>
#include <_Spi.h>

const long _startThreshold = 30;
const long _continueThreshold = 5;
class Reporter {
