diff --git a/software/coordinator2.py b/software/coordinator2.py
index b479a21fb2512786cdcd87cf709b99e1a9c64dc4..12b22e5e4ae32a0093ae9016bef97422e84a3a58 100644
--- a/software/coordinator2.py
+++ b/software/coordinator2.py
@@ -56,6 +56,49 @@ def calculate_checksum(*args):
         s += sum(bytes(a, 'utf-8'))
     return hex( s&0xFF )[2:].upper().zfill(2)
 
+def handle_match_tx( src_id, ts, match_tx ):
+    seq_nr = match_tx.group("seq_nr")
+    checksum = match_tx.group("checksum")
+    
+    expected_checksum = calculate_checksum( seq_nr )
+    if expected_checksum == checksum:
+        session = Session()
+        session.add(TX(serial_id = src_id, ts=ts, seq_nr = seq_nr ))
+        session.commit()
+        #logger.log("[{}] TX: #{}".format( src_id, seq_nr ))
+        return True
+    else:
+        logger.debug("Corrupt Line")
+        return False
+
+def handle_match_rx( src_id, ts, match_rx ):
+    node_id = match_rx.group("node_id")
+    seq_nr = match_rx.group("seq_nr")
+    rssi = match_rx.group('rssi')
+    lqi = match_rx.group('lqi')
+    checksum = match_rx.group("checksum")
+    expected_checksum = calculate_checksum( node_id, '|', seq_nr, '|', rssi, '|', lqi )
+
+    if expected_checksum == checksum:
+        session = Session()
+        session.add(RX(serial_id = src_id, ts=ts, seq_nr = seq_nr, node_id = node_id, rssi = rssi, lqi = lqi))
+        # TODO(rh): Add sqlite3.OperationalError
+        session.commit()
+        #logger.log("[{}] RX: #{} from {}".format( src_id, node_id, seq_nr ))
+        return True
+    else:
+        logger.debug("Corrupt Line {} != {}".format( expected_checksum, checksum) )
+        return False
+
+def handle_match_rx_corrupt( src_id, ts, match_rx_corrupt ):
+    rssi = match_rx_corrupt.group('rssi')
+    lqi = match_rx_corrupt.group('lqi')
+    payload = match_rx_corrupt.group('payload').strip()
+    logger.debug( "Corrupt: {}dBm, {}, {}".format( rssi, lqi, payload ) )
+    session = Session()
+    session.add(Corrupt(serial_id = src_id, ts=ts, rssi = rssi, lqi = lqi, payload = payload))
+    session.commit()
+    return True
 
 def handle_serial_rx(d):
     src_id = d['src']['id'][0]
@@ -65,51 +108,15 @@ def handle_serial_rx(d):
     match_ifconfig = re_ifconfig.match(line)
     if match_ifconfig is not None:
         return True
-
     match_tx = re_tx.match(line)
     if match_tx is not None:
-        seq_nr = match_tx.group("seq_nr")
-        checksum = match_tx.group("checksum")
-        
-        expected_checksum = calculate_checksum( seq_nr )
-        if expected_checksum == checksum:
-            session = Session()
-            session.add(TX(serial_id = src_id, ts=ts, seq_nr = seq_nr ))
-            session.commit()
-            #logger.log("[{}] TX: #{}".format( src_id, seq_nr ))
-            return True
-        else:
-            logger.debug("Corrupt Line")
-            return False
+        return handle_match_tx( src_id, ts, match_tx )
     match_rx = re_rx.match(line)
     if match_rx is not None:
-        node_id = match_rx.group("node_id")
-        seq_nr = match_rx.group("seq_nr")
-        rssi = match_rx.group('rssi')
-        lqi = match_rx.group('lqi')
-        checksum = match_rx.group("checksum")
-        expected_checksum = calculate_checksum( node_id, '|', seq_nr, '|', rssi, '|', lqi )
-
-        if expected_checksum == checksum:
-            session = Session()
-            session.add(RX(serial_id = src_id, ts=ts, seq_nr = seq_nr, node_id = node_id, rssi = rssi, lqi = lqi))
-            session.commit()
-            #logger.log("[{}] RX: #{} from {}".format( src_id, node_id, seq_nr ))
-            return True
-        else:
-            logger.debug("Corrupt Line {} != {}".format( expected_checksum, checksum) )
-            return False
-        return True
+        return handle_match_rx( src_id, ts, match_rx )
     match_rx_corrupt = re_rx_corrupt.match(line)
     if match_rx_corrupt is not None:
-        rssi = match_rx_corrupt.group('rssi')
-        lqi = match_rx_corrupt.group('lqi')
-        payload = match_rx_corrupt.group('payload').strip()
-        logger.debug( "Corrupt: {}dBm, {}, {}".format( rssi, lqi, payload ) )
-        session = Session()
-        session.add(Corrupt(serial_id = src_id, ts=ts, rssi = rssi, lqi = lqi, payload = payload))
-        session.commit()
-        return True
+        return handle_match_rx_corrupt( src_id, ts, match_rx_corrupt  )
     return False
 
 class PRREvalClient(Client):
@@ -130,11 +137,16 @@ class PRREvalClient(Client):
                     logger.log( "PAYLOAD={} ".format(payload) )
                     self.send_all( "payload {}\n".format( payload )  )
                     sleep( 0.5 )
+                    # TODO(rh) START ROUND:
+                    # round = Round( channel=channel, power=power, payload=payload )
+                    # session.add( round )
+                    # sessionc.commit()
                     for sender in NODES:
                         self.send({'dst': {'id': sender}, 'type': 'serial_tx', 'line': 'tx 5 200000\n'})
                         # 5 packets, 200ms -> 1 second
                         sleep( 1.5 )
-    
+                        self.send({'dst': {'id': sender}, 'type': 'serial_tx', 'line': 'ifconfig 3 set state idle\n'})
+
     def run(self):
         while True:
             try:
@@ -144,7 +156,7 @@ class PRREvalClient(Client):
                 break
 
     def set_channel(self, channel):
-        self.send_all("ifconfig 3 set state idle\n")
+        #self.send_all("ifconfig 3 set state idle\n")
         self.send_all("ifconfig 3 set channel {}\n".format( channel ))
     
     def set_txpower(self, power):