diff --git a/bin/r2_control b/bin/r2_control
index c4b0cf6ee831b56b23e9be76f1b8fb4137c218f9..ba75844628114500da2cb7bb9a35ff57d3c950a2 100755
Binary files a/bin/r2_control and b/bin/r2_control differ
diff --git a/run.sh b/run.sh
index 102768f45e765453d802c3d08fa3d9adb0c08438..d089c8a69667ecc9c0fbc4f4e0217362250569d5 100755
--- a/run.sh
+++ b/run.sh
@@ -1,4 +1,4 @@
-export ROS_PACKAGE_PATH=/opt/ros/indigo/share:/opt/ros/indigo/stacks:~/Documents/raven_2:~/Documents/raven_2/raven_visualization; 
+export ROS_PACKAGE_PATH=/opt/ros/indigo/share:/opt/ros/indigo/stacks:~/homa_wksp/raven_2:~/homa_wksp/raven_2/raven_visualization; 
 
 
 
diff --git a/src/raven/fwd_cable_coupling.cpp b/src/raven/fwd_cable_coupling.cpp
index 891d9e1602127d512bcba09bca79b34ecc8d996f..ea3c6a360317310776ae30ccfa6e5d615eed2788 100755
--- a/src/raven/fwd_cable_coupling.cpp
+++ b/src/raven/fwd_cable_coupling.cpp
@@ -180,6 +180,7 @@ void fwdMechCableCoupling(struct mechanism *mech)
 		th6 = (1.0/tr6) * (m6 - m4/GB_RATIO);
 		th7 = (1.0/tr7) * (m7 - m4/GB_RATIO);
 	}
+// Commented out
 #ifndef simulator
 	// Now have solved for th1, th2, d3, th4, th5, th6
 	mech->joint[SHOULDER].jpos 		= th1;// - mech->joint[SHOULDER].jpos_off;
@@ -189,6 +190,8 @@ void fwdMechCableCoupling(struct mechanism *mech)
 	mech->joint[WRIST].jpos 		= th5;// - mech->joint[WRIST].jpos_off;
 	mech->joint[GRASP1].jpos 		= th6;// - mech->joint[GRASP1].jpos_off;
 	mech->joint[GRASP2].jpos 		= th7;// - mech->joint[GRASP2].jpos_off;
+
+// Commented out
 #else
 	mech->joint[SHOULDER].jpos 		= mech->joint[SHOULDER].jpos_d;// - mech->joint[SHOULDER].jpos_off;
 	mech->joint[ELBOW].jpos 		= mech->joint[ELBOW].jpos_d;// - mech->joint[ELBOW].jpos_off;
diff --git a/src/raven/local_io.cpp b/src/raven/local_io.cpp
index 95e452a10e856ccb331605720e6229e4c26bcd21..018a1eb53619a9473557d56ce9b8c9e91253d4e9 100755
--- a/src/raven/local_io.cpp
+++ b/src/raven/local_io.cpp
@@ -199,6 +199,7 @@ void teleopIntoDS1(struct u_struct *us_t)
 	data1.rd[i].grasp -= us_t->grasp[armidx];
 	if (data1.rd[i].grasp>graspmax) data1.rd[i].grasp=graspmax;
 	else if(data1.rd[i].grasp<graspmin) data1.rd[i].grasp=graspmin;
+
 #else
 	// Set Position command
         data1.xd[i].x = us_t->delx[armidx];
@@ -222,6 +223,11 @@ void teleopIntoDS1(struct u_struct *us_t)
 		    for (int k=0;k<3;k++)
 		        data1.rd[1].R[j][k] = us_t->R_r[j][k];
 	}  
+
+        // Get the encoder values
+	for (int ch=0;ch<16;ch++)
+	    data1.enc_d[ch] = us_t->encVals[ch];
+
         // Get the initial joint positions from input
 	/*if (us_t->sequence == 1)	    
             for (int j=0;j<16;j++)          
diff --git a/src/raven/log.cpp b/src/raven/log.cpp
index 5307841eadc7b2de1b639a35c57dad5422a0efd5..897bae51ec55f478e94f3781a5e7599e3c5509cf 100755
--- a/src/raven/log.cpp
+++ b/src/raven/log.cpp
@@ -36,7 +36,7 @@ const static size_t MAX_MSG_LEN =1024;
 //#define simulator_logging
 #ifdef save_logs
 #include <fstream>
-extern char raven_path[];
+extern char* raven_path;
 extern int inject_mode;
 extern int logging;
 /**\fn int log_file(const char* fmt,...)
diff --git a/src/raven/network_layer.cpp b/src/raven/network_layer.cpp
index 0939fe970a97dd966a269c5c86384283b177534b..bfd5fefcf3fb4271c8c0d5ec84aaddf279250eaa 100755
--- a/src/raven/network_layer.cpp
+++ b/src/raven/network_layer.cpp
@@ -326,8 +326,8 @@ void* network_process(void* param1)
 
 #ifdef save_logs
         log_file("NETWORK) Receieved Data on Socket, Size = %d", uSize);         
-        //log_msg("Pos Arm 0 = %d, %d, %d", u.delx[0], u.dely[0], u.delz[0]);         
-        //log_msg("Pos Arm 1 = %d, %d, %d", u.delx[1], u.dely[1], u.delz[1]);         
+      //log_msg("Pos Arm 0 = %d, %d, %d", u.delx[0], u.dely[0], u.delz[0]);         
+      //log_msg("Pos Arm 1 = %d, %d, %d", u.delx[1], u.dely[1], u.delz[1]);         
 
 
 #endif
diff --git a/src/raven/overdrive_detect.cpp b/src/raven/overdrive_detect.cpp
index 236604851a49db19f077befdf3a469abfd8ef0e6..9f19f53f2da94bad857af3029e266f34e4f4da78 100755
--- a/src/raven/overdrive_detect.cpp
+++ b/src/raven/overdrive_detect.cpp
@@ -59,7 +59,6 @@ int overdriveDetect(struct device *device0)
         {
             _joint = &(device0->mech[i].joint[j]);
             int _dac_max = DOF_types[_joint->type].DAC_max;
-
             // Kill current if greater than MAX_INST_DAC.  Probably indicates a problem.
             if (abs(_joint->current_cmd) > MAX_INST_DAC)
             {
diff --git a/src/raven/rt_process_preempt.cpp b/src/raven/rt_process_preempt.cpp
index d13e2b8f8988336854ed60e2c8d12740bbad5677..3d5134e578732d3719587fdf6fb65921bc6e399c 100755
--- a/src/raven/rt_process_preempt.cpp
+++ b/src/raven/rt_process_preempt.cpp
@@ -95,10 +95,7 @@ int NUM_MECH=0;   // Define NUM_MECH as a C variable, not a c++ variable
 
 #ifdef save_logs
 #include <fstream>
-//char* ROS_PACKAGE_PATH;
-//ROS_PACKAGE_PATH = getenv("ROS_PACKAGE_PATH");
-//if (ROS_PACKAGE_PATH != NULL)
-char raven_path[] = "/home/alemzad1/homa_wksp/raven_2";
+char* raven_path = new char[100];
 int inject_mode;
 int logging = 0;
 int no_pack_cnt = 0;
@@ -353,9 +350,13 @@ static void *rt_process(void* )
       //Update Atmel Output Pins
       updateAtmelOutputs(&device0, currParams.runlevel);
 
-#ifdef simulator  
+#ifndef simulator  
       //Fill USB Packet and send it out   
       putUSBPackets(&device0); //disable usb for par port test
+#else
+#ifdef log_USB 
+      writeUSBPackets(&device0);
+#endif
 #endif
       //Publish current raven state
       publish_ravenstate_ros(&device0,&currParams);   // from local_io
@@ -452,16 +453,41 @@ int main(int argc, char **argv)
 #endif
 
 #ifdef save_logs
+  char* ROS_PACKAGE_PATH;
+  ROS_PACKAGE_PATH = getenv("ROS_PACKAGE_PATH");
+  if (ROS_PACKAGE_PATH!= NULL)
+  {
+     raven_path = strtok(ROS_PACKAGE_PATH,":");
+     while(raven_path!= NULL){
+	 if (strstr(raven_path,"raven_2") != NULL){
+             printf("%s\n",raven_path);      
+	     break;
+         }
+	 raven_path = strtok(NULL,":");
+     }        	
+  }
+
   std::ofstream logfile;
   log_msg("************** Inject mode = %d\n",inject_mode);
-  char buff[50];
 
+  char buff[50];
   if (inject_mode == 0)
       sprintf(buff,"%s/sim_log.txt", raven_path);
   else     
       sprintf(buff,"%s/fault_log_%d.txt", raven_path, inject_mode);
-  logfile.open(buff,std::ofstream::out); 
+  logfile.open(buff,std::ofstream::out);  
+
+#ifdef log_USB
+  std::ofstream USBlogfile;  
+  sprintf(buff,"%s/USB0_log.txt", raven_path);
+  USBlogfile.open(buff,std::ofstream::out);
+  USBlogfile.close(); 
+  sprintf(buff,"%s/USB1_log.txt", raven_path);
+  USBlogfile.open(buff,std::ofstream::out);
+  USBlogfile.close(); 
 #endif
+#endif
+
 
   // init reconfigure
   dynamic_reconfigure::Server<raven_2::MyStuffConfig> srv;
diff --git a/src/raven/rt_raven.cpp b/src/raven/rt_raven.cpp
index ef5c586ca6ea97d21b3a9467c798466dcefc098d..59f984a222482bee5e2a04888bebcffee0cda67b 100755
--- a/src/raven/rt_raven.cpp
+++ b/src/raven/rt_raven.cpp
@@ -282,6 +282,9 @@ int raven_cartesian_space_command(struct device *device0, struct param_pass *cur
     _mech = NULL;  _joint = NULL;
     while (loop_over_joints(device0, _mech, _joint, i,j) )
     {
+#ifdef simulator_packetgen
+	mpos_PD_control(_joint);
+#else
         if (currParams->runlevel != RL_PEDAL_DN)
         {
             _joint->tau_d=0;
@@ -290,6 +293,7 @@ int raven_cartesian_space_command(struct device *device0, struct param_pass *cur
         {
     	    mpos_PD_control(_joint);
         }
+#endif
     }
 
     // Gravity compensation calculation
diff --git a/src/raven/state_estimate.cpp b/src/raven/state_estimate.cpp
index ea07dba7b0cee2841e13aa9978072eda8e7d4b2e..f06f5c7b6e63d6e120ff7bc9cc2fd4eabdf901dd 100755
--- a/src/raven/state_estimate.cpp
+++ b/src/raven/state_estimate.cpp
@@ -50,12 +50,10 @@ void stateEstimate(struct robot_device *device0)
         for (j = 0; j < MAX_DOF_PER_MECH; j++)
         {
             _joint = &(device0->mech[i].joint[j]);
-
 //            if (_joint->type == TOOL_ROT_GOLD || _joint->type == TOOL_ROT_GOLD)
 //                encToMPos(_joint);
 //            else
                 getStateLPF(_joint, device0->mech[i].tool_type);
-
         }
     }
 }
diff --git a/src/raven/t_to_DAC_val.cpp b/src/raven/t_to_DAC_val.cpp
index a3ceeeb8d2bea4ce005ba887d2469dcce142f7dd..5dcc427a42903221d14ab35eeca89d93223c869a 100755
--- a/src/raven/t_to_DAC_val.cpp
+++ b/src/raven/t_to_DAC_val.cpp
@@ -73,8 +73,6 @@ int TorqueToDAC(struct device *device0)
 
             device0->mech[i].joint[j].current_cmd = tToDACVal( &(device0->mech[i].joint[j]) );  // Convert torque to DAC value
 
-
-
             if ( soft_estopped )
                 device0->mech[i].joint[j].current_cmd = 0;
 
diff --git a/src/raven/update_device_state.cpp b/src/raven/update_device_state.cpp
index 33aae79c13513a50bffd6bd76a7ae32976ef4c54..77b595aba0b3c659b47099ebb4f2e48905e94714 100755
--- a/src/raven/update_device_state.cpp
+++ b/src/raven/update_device_state.cpp
@@ -99,27 +99,10 @@ int updateDeviceState(struct param_pass *currParams, struct param_pass *rcvdPara
     // set desired mech position in pedal_down runlevel
     if (currParams->runlevel == RL_PEDAL_DN)
     {
+
 #ifdef simulator 
-        //log_file("RT_PROCESS) Pedal is down. Update device state.\n");         
-        //currParams->robotControlMode = cartesian_space_control;////Added
 	if (currParams->last_sequence == 1)
 	{
-            //for (int j=0;j<16;j++)    
-            //    log_file("jpos %d = %f\n", j,rcvdParams->jpos_d[j]);
- 	    /*device0->mech[0].joint[SHOULDER].jpos_d = rcvdParams->jpos_d[0];
-     	    device0->mech[0].joint[ELBOW].jpos_d = rcvdParams->jpos_d[1];
-	    device0->mech[0].joint[Z_INS].jpos_d = rcvdParams->jpos_d[2];
-	    device0->mech[0].joint[TOOL_ROT].jpos_d = rcvdParams->jpos_d[4];
-	    device0->mech[0].joint[WRIST].jpos_d = rcvdParams->jpos_d[5];
-	    device0->mech[0].joint[GRASP1].jpos_d = rcvdParams->jpos_d[6];
-	    device0->mech[0].joint[GRASP2].jpos_d = rcvdParams->jpos_d[7];
-	    device0->mech[1].joint[SHOULDER].jpos_d = rcvdParams->jpos_d[8];
-     	    device0->mech[1].joint[ELBOW].jpos_d = rcvdParams->jpos_d[9];
-	    device0->mech[1].joint[Z_INS].jpos_d = rcvdParams->jpos_d[10];
-	    device0->mech[1].joint[TOOL_ROT].jpos_d = rcvdParams->jpos_d[12];
-	    device0->mech[1].joint[WRIST].jpos_d = rcvdParams->jpos_d[13];
-	    device0->mech[1].joint[GRASP1].jpos_d = rcvdParams->jpos_d[14];
-	    device0->mech[1].joint[GRASP2].jpos_d = rcvdParams->jpos_d[15];*/
 	    device0->mech[0].joint[SHOULDER].jpos_d = 0.521722;
      	    device0->mech[0].joint[ELBOW].jpos_d = 1.585218;
 	    device0->mech[0].joint[Z_INS].jpos_d = 0.400515;
@@ -135,6 +118,15 @@ int updateDeviceState(struct param_pass *currParams, struct param_pass *rcvdPara
 	    device0->mech[1].joint[GRASP1].jpos_d = 0.702793;
 	    device0->mech[1].joint[GRASP2].jpos_d = 0.729010;
 	}
+#endif
+#ifdef simulator_packetgen
+        for (int i = 0; i < NUM_MECH; i++)
+        {        
+            for (int ch=0;ch<8;ch++)
+	    {
+                device0->mech[i].joint[ch].enc_val = rcvdParams->enc_d[i*8+ch]; 
+            }     
+	}
 #endif
         for (int i = 0; i < NUM_MECH; i++)
         {