diff --git a/linear_pendulum_2009/avr/vel_control.c b/linear_pendulum_2009/avr/vel_control.c
index 5024d75bfe7272adfd579bfc083e4b0e7e585880..3b10f60d33e7c2359f979b26ecf1ec538e20b266 100644
--- a/linear_pendulum_2009/avr/vel_control.c
+++ b/linear_pendulum_2009/avr/vel_control.c
@@ -28,12 +28,14 @@ volatile int32_t Ke = 45; // 6 frac bits
 volatile int32_t Ksat = 3; // 6 frac bits
 
 // encoder variables
-#define ENCODERY  (PIND&(uint8_t)(1<<2))        //Positional encoder pins
-#define ENCODERX  (PINB&(uint8_t)(1<<1))        //Positional encoder pins
+//#define ENCODERY  (PIND&(uint8_t)(1<<2))        //Positional encoder pins
+//#define ENCODERX  (PINB&(uint8_t)(1<<1))        //Positional encoder pins
+#define ENCODERY  (PIND&0x04)        //Positional encoder pins
+#define ENCODERX  ((PINB&0x02)<<1)        //Positional encoder pins
+
 volatile int16_t pos = 0;
 volatile int16_t posTemp = 0;
 volatile int16_t oldPos = 0;
-volatile int16_t deltaPos = 0;
 volatile int8_t newX;
 volatile int8_t newY;
 volatile int8_t oldX;
@@ -86,46 +88,81 @@ void setPos()
 
 }
 
-/* Timer 2, Encoder */
+/* Timer 2, Encoder counter, 73 kHz */
 SIGNAL(SIG_OUTPUT_COMPARE2) {
-  
-  deltaPos = 0;
+
+   
+
   // Update position from encoder
   newX = ENCODERX;
   newY = ENCODERY;
-  if((newX != oldX) || (newY != oldY))                            //Check if any value changed
-    {
+  if((newX != oldX) || (newY != oldY)) {                            //Check if any value changed
+      /*
       sum = (oldX<<2)+oldY+newX+(newY>>2);                    //Find state
       if (sum == 2 || sum == 4 || sum == 11 || sum == 13) {      //Predetermined values determine direction
-	//pos = pos+1;
-	deltaPos = 1;
+	pos = pos+1;
       } else if (sum == 1 || sum == 7 || sum ==  8 || sum == 14) {
-	//pos = pos-1;
-	deltaPos = -1;
+	pos = pos-1;
+      } else {
+	brake = 1; // emergency brake
+      }
+      */
+      if ((oldX == newY) && (oldY != newX)) {
+	pos = pos+1;
+      } else if ((oldX != newY) && (oldY == newX)) {
+	pos = pos-1;
       } else {
 	brake = 1;
-	// emergency brake
       }
       oldX = newX;
       oldY = newY;
-    }
+  }
+
+
+
+}
+
+
+/* Timer 1, serial communication */
+SIGNAL(SIG_OUTPUT_COMPARE0) {
+
+  TIMSK &= ~(BV(OCIE1A)|BV(OCIE0));
 
+  sei(); // enable interrupts from timer 0 and timer 2
+  
+  //PORTC |= 0x10;  // to clock calulation time
 
-  // velocity estimation cut-off frequency 500 Hz
-  pos = pos+deltaPos;    // update oldPos, 0 frac bits on pos and oldPos
+  uint8_t status = UCSRA;
+  if (status & (1<<RXC)) {
+    char ch = UDR;
+    pccom_receiveByte(ch);
+    
+    if (status & ((1<<FE)|(1<<DOR)|(1<<PE))) { 
+      //main_emergencyStop(); // stop on USART error
+    }     
+  }
+  
+  // Poll UART sender
+  if (UCSRA & (1<<UDRE)) {
+    int16_t toSend = pccom_getNextByteToSend();
+    if (toSend >= 0) UDR = (char)toSend;
+  }
+  //PORTC &= ~0x10; 
   
+  TIMSK |= (BV(OCIE1A)|BV(OCIE0)); 
+ 
 }
 
 
 
-/* Timer 0, control loop */
-SIGNAL(SIG_OUTPUT_COMPARE0) {
+/* Timer 0, control loop , 1 kHz */
+SIGNAL(SIG_OUTPUT_COMPARE1A) {
 
+  TIMSK &= ~(BV(OCIE0)|BV(OCIE1A));
+  
   sei(); // to enable interupts from timer2
 
-  TIMSK &= ~BV(OCIE0);
-
-  PORTC |= 0x10;  // to clock calulation time
+   
 
   // linear velocity estimator
   // velocity estimate in mm/s 
@@ -221,41 +258,12 @@ SIGNAL(SIG_OUTPUT_COMPARE0) {
   // stop transmission
   outp(BV(TWINT)|BV(TWEN)|BV(TWSTO),TWCR);
 
+ 
 
+  TIMSK |= (BV(OCIE0)|BV(OCIE1A));
 
 
-  // ------- Noncritical section -------
 
-  
-  // Poll UART receiver
-  
-  int8_t tempVar = 0;
-  for (tempVar = 0;tempVar < 10; tempVar++) {
-    uint8_t status = UCSRA;
-    if (status & (1<<RXC)) {
-      char ch = UDR;
-      pccom_receiveByte(ch);
-      
-      if (status & ((1<<FE)|(1<<DOR)|(1<<PE))) { 
-	//main_emergencyStop(); // stop on USART error
-      }     
-    }
-    
-    // Poll UART sender
-    if (UCSRA & (1<<UDRE)) {
-      int16_t toSend = pccom_getNextByteToSend();
-      //if (toSend >= 0) UDR = (char)toSend;
-      while (toSend >= 0) {
-	UDR = (char)toSend;
-	while ((UCSRA & (1<<UDRE)) == 0) {} // wait for previous send
-	toSend = pccom_getNextByteToSend();
-      }
-    }
-  }
-  
-    
-  PORTC &= ~0x10;
-  TIMSK |= BV(OCIE0);
 }
 
 
@@ -268,22 +276,54 @@ int main()
   outp(0x10,DDRC);  // timer calculation port
 
   /* Timer section */
-  // Enable timer2 compare match interrupts
-  outp(BV(OCIE0)|BV(OCIE2),TIMSK);
+  // Enable timer0, timer1, timer2 compare match interrupts
+  outp(BV(OCIE0)|BV(OCIE1A)|BV(OCIE2),TIMSK);
   
-  /* Timer 2, 59 kHz Prescaler 1 */
+  /* Timer 2, 73 kHz Prescaler 1 */
   outp(BV(WGM21)|BV(CS20),TCCR2);
   outp(200,OCR2);
   /* Reset timer 2 */
   outp(0,TCNT2);
+  
+  // --------old-----------------------------------------------
+  /* Timer 1, Prescaler 1, 73/8 kHz*/
+  
+  //outp(BV(WGM12)|BV(CS10),TCCR1B);
+  //outp(0x06,OCR1AH);
+  //outp(0x40,OCR1AL);
+  //outp(0,TCNT1H);
+  //outp(0,TCNT1L);
+  
 
   /* Timer 0, 1 kHz Prescaler 64 */
+  
+  //outp(BV(WGM01)|BV(CS01)|BV(CS00),TCCR0);
+  //outp(230,OCR0);
+  
+  /* Reset timer 0 */
+  //outp(0,TCNT0);
+  
+  // --------new-----------------------------------------------
+  /* Timer 1, 1 kHz */
+  outp(BV(WGM12)|BV(CS10),TCCR1B);
+  outp(0x39,OCR1AH);
+  outp(0x99,OCR1AL);
+  outp(0,TCNT1H);
+  outp(0,TCNT1L);
+  
+
+  /* Timer 0, 10 kHz, Prescaler 64 */
   outp(BV(WGM01)|BV(CS01)|BV(CS00),TCCR0);
-  outp(230,OCR0);
+  //outp(200,OCR0);
+  outp(23,OCR0); // 10 kHz
+
   /* Reset timer 0 */
   outp(0,TCNT0);
+  //----------------------------------------------------------
 
   
+  
+  
   //Serial communication
   outp(0x00, UCSRA);	// USART:
   outp(0x18, UCSRB);	// USART: RxEnable|TxEnable