diff --git a/radio/nrf24L01/nrf-ftdi-ring.c b/radio/nrf24L01/nrf-ftdi-ring.c
index 6e5f3e7966baa6a661af03b839d84a4d1df938fb..45188939ef41ccebea5a94d9546b40ab68c8fd90 100644
--- a/radio/nrf24L01/nrf-ftdi-ring.c
+++ b/radio/nrf24L01/nrf-ftdi-ring.c
@@ -68,13 +68,21 @@ uint8_t read_register(uint8_t reg){
    _delay_us(1);  //give time after ss high
    return temp;
 }
-
+void write_register(uint8_t reg, uint8_t val){
+   PORTC.OUTCLR = SS_BM; //SS low 
+   _delay_us(1);     
+   SPIC.DATA = W_REGISTER | reg; while(!(SPIC.STATUS & SPI_IF_bm)) {};
+   SPIC.DATA = val ; while(!(SPIC.STATUS & SPI_IF_bm)) {};
+   PORTC.OUTSET = SS_BM; //SS high   
+   _delay_us(1);
+}
 
 
 USART_data_t USART_data;
 
 uint8_t token = 0; //token to pass
 uint8_t tempval = 0;
+const int pll_delay_us = 130;
 
 void check_registers(uint8_t id){
    //debug only
@@ -147,21 +155,14 @@ void rx_from_standby(){
    //enter standby so we can write to configuration register.
    PORTC.OUTCLR = CE_BM; 
    _delay_us(10); //should be 10?
-
    //enter RX mode: set PRIM_RX = 1
    tempval = read_register(CONFIG);
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | CONFIG; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = tempval | PRIM_RX; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_us(1);  //give time to start up   
-
+   write_register(CONFIG, tempval | PRIM_RX)
    //set CE for at least 10 us 
    PORTC.OUTSET = CE_BM;
    _delay_us(10); //should be 10?
-
    //wait for pll to settle
-   _delay_us(130);
+   _delay_us(pll_delay_us);
 }
 
 void setup(){
@@ -192,7 +193,7 @@ void setup(){
    PORTC.DIRSET = CE_BM; //set up CE pin on PC0
    //set up spic.ctrl
    SPIC.CTRL   = SPI_PRESCALER_DIV4_gc |        /* SPI prescaler. */
-                         (0 ? SPI_CLK2X_bm : 0) |    /* SPI Clock double. */
+                         (1 ? SPI_CLK2X_bm : 0) |    /* SPI Clock double. */
                          SPI_ENABLE_bm |                 /* Enable SPI module. */
                          SPI_MASTER_bm |                 /* SPI master. */
                          SPI_MODE_0_gc; //bits driven at falling edge, sampled at rising edge  
@@ -202,49 +203,20 @@ void setup(){
 
    _delay_ms(5); //warm up
 
-
    //turn off auto-retransmit
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | SETUP_RETR; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = 0 ; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high   
-   _delay_ms(1);
-
+   write_register(SETUP_RETR,0);
    //turn off disable auto-acknowledge
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | EN_AA; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = 0 ; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high   
-   _delay_ms(1);
-
+   write_register(EN_AA,0);
    //set the PWR_UP bit in the CONFIG register to 1 to enter standby mode
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | CONFIG; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = PWR_UP; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_ms(1);  //give time to start up 
-
+   write_register(CONFIG,PWR_UP);
+   _delay_ms(3);
    //set up data pipe 0 
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | EN_RXADDR; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = 1; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_ms(1);  //give time to start up 
-
+   write_register(EN_RXADDR,1);
    //set data pipe 0 payload length to 1
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | RX_PW_P0; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = 1; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_ms(1);  //give time to start up 
-
+   write_register(RX_PW_P0,1);
    //set data rate to 2 Mbps with high power
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | RF_SETUP; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = (0<<5) | (1<<3) | (1<<2) | (1<<1); while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_ms(1);  //give time to start up    
-
+   //I think there may be a typo in the data sheet here.
+   write_register(RF_SETUP,(0<<5) | (1<<3) | (1<<2) | (1<<1));
    //flush tx
    PORTC.OUTCLR = SS_BM; //SS low      
    SPIC.DATA = FLUSH_TX; while(!(SPIC.STATUS & SPI_IF_bm)) {};
@@ -252,36 +224,21 @@ void setup(){
    _delay_ms(1);  //give time to start up 
    //flush rx
    PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = FLUSH_TX; while(!(SPIC.STATUS & SPI_IF_bm)) {};
+   SPIC.DATA = FLUSH_RX; while(!(SPIC.STATUS & SPI_IF_bm)) {};
    PORTC.OUTSET = SS_BM; //SS high
    _delay_ms(1);  //give time to start up 
-
    // and mask MAX_RT interrupts on IRQ
    tempval = read_register(CONFIG);
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | CONFIG; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = tempval | MAX_RT; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_ms(1);  //give time to start up 
-   
+   write_register(CONFIG,tempval | MAX_RT)
    //clear all interrupts
    tempval = read_register(STATUS);
-   PORTC.OUTCLR = SS_BM; //SS low      
-   SPIC.DATA = W_REGISTER | STATUS; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = tempval | MAX_RT | RX_DR | TX_DS; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_ms(1);  //give time to start up 
-
-   //
+   write_register(STATUS,tempval | MAX_RT | RX_DR | TX_DS)
+   _delay_ms(1);
 
    sei();
-
    rx_from_standby();
 }
 
-
-// NOTE: we can't do SPIC.DATA &= or |= thing because SPIC.DATA will hold STATUS!!!
-
 void send_token(){
    //transition from RX to standby1 (CE=0)
    PORTC.OUTCLR = CE_BM;   
@@ -296,31 +253,16 @@ void send_token(){
    _delay_us(1); 
 
    tempval = read_register(CONFIG);
-   PORTC.OUTCLR = SS_BM; //SS low  
-   _delay_us(1);            
-   SPIC.DATA = W_REGISTER | CONFIG; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = tempval & (~PRIM_RX); while(!(SPIC.STATUS & SPI_IF_bm)) {};  //make sure PRIM_RX is low
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_us(1);
-
+   write_register(CONFIG, tempval & (~PRIM_RX))
    //pulse CE for at least 10 us 
    PORTC.OUTSET = CE_BM; _delay_us(10); PORTC.OUTCLR = CE_BM;
-
    //wait for pll to settle
-   _delay_us(130);
-
+   _delay_us(pll_delay_us);
    //wait until transmit complete
    while( PORTC.IN & IRQ_BM ){}
-   
    //clear IRQ -- need to be in standby.
    tempval = read_register(STATUS);
-   PORTC.OUTCLR = SS_BM; //SS low  
-   _delay_us(1);            
-   SPIC.DATA = W_REGISTER | STATUS; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = tempval | TX_DS; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_us(1);
-
+   write_register(STATUS, tempval | TX_DS)
    rx_from_standby(); //return to RX mode
 }
 
@@ -340,12 +282,7 @@ void read_token(){
 
    //clear IRQ
    tempval = read_register(STATUS);
-   PORTC.OUTCLR = SS_BM; //SS low  
-   _delay_us(1);            
-   SPIC.DATA = W_REGISTER | STATUS; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   SPIC.DATA = tempval | RX_DR; while(!(SPIC.STATUS & SPI_IF_bm)) {};
-   PORTC.OUTSET = SS_BM; //SS high
-   _delay_us(1);
+   write_register(STATUS, tempval | RX_DR)
    //check_registers(66);
 }
 
@@ -369,6 +306,5 @@ int main(void) {
    }
 }
 
-
 ISR(USARTD0_RXC_vect){USART_RXComplete(&USART_data);}
 ISR(USARTD0_DRE_vect){USART_DataRegEmpty(&USART_data);}