diff --git a/laser/LaosMotion/LaosMotion.cpp b/laser/LaosMotion/LaosMotion.cpp
index 3c7f503..cf0846b 100644
--- a/laser/LaosMotion/LaosMotion.cpp
+++ b/laser/LaosMotion/LaosMotion.cpp
@@ -55,7 +55,7 @@ DigitalOut edir(p30);  // NOK: CAN, (TODO)
 PwmOut pwm(p22);                // O1: PWM (Yellow)
 DigitalOut laser_enable(p21);   // O2: enable laser
 DigitalOut o3(p6);              // 03: NC
-DigitalOut *laser = NULL;           // O4: (p5) LaserON (White)
+DigitalOut laser(p5);           // O4: (p5) LaserON (White)
 
 // Analog in/out (cover sensor) + NC
 DigitalIn cover(p19);
@@ -95,8 +95,6 @@ LaosMotion::LaosMotion()
 #endif
   pwm.period(1.0 / cfg->pwmfreq);
   pwm = cfg->pwmmin/100.0;
-  if ( laser == NULL ) laser = new DigitalOut(LASER_PIN);
-  *laser = LASEROFF;
 
   mark_speed = cfg->speed;
   //start.mode(PullUp);
@@ -154,7 +152,7 @@ void LaosMotion::reset()
 {
   step = command = xstep = xdir = ystep = ydir = zstep = zdir = 0;
   ofsx = ofsy = ofsz = 0;
-  *laser = LASEROFF;
+  laser = LASEROFF;
   enable = cfg->enable;
   cover.mode(PullUp);
 }
@@ -217,7 +215,7 @@ void LaosMotion::moveTo(int x, int y, int z, int speed)
 **/
 void LaosMotion::write(int i)
 {
-  static int x=0,y=0,z=0,power=10000;
+  static int x,y,z,power=10000;
   //if (  plan_queue_empty() ) 
   //printf("Empty\n");
   if ( step == 0 )
@@ -239,7 +237,6 @@ void LaosMotion::write(int i)
               case 2: 
                 action.target.y = i/1000.0;;
                 step=0;
-                action.target.z = 0;
                 action.param = power;
                 action.ActionType =  (command ? AT_LASER : AT_MOVE);
                 if ( bitmap_enable && action.ActionType == AT_LASER) 
@@ -256,12 +253,8 @@ void LaosMotion::write(int i)
             switch(step)
             {
               case 1: 
-                step = 0;
-                z = action.target.z = i/1000.0;;                
-                action.param = power;
-                action.ActionType =  AT_MOVE;
-                action.target.feed_rate =  60.0 * cfg->speed;
-                plan_buffer_line(&action);                 
+                z = i; 
+                step = 0; 
                 break;
             }
          case 4: // set x,y,z (absolute)
@@ -323,7 +316,7 @@ void LaosMotion::write(int i)
             }
             else // copy data
             {
-              if ( step-2 == bitmap_size ) // last dword received
+              if ( step-2 == bitmap_size )
               {
                 step = 0;
                 printf("Bitmap: received %d dwords\n\r", bitmap_size);
@@ -435,3 +428,4 @@ void LaosMotion::home(int x, int y, int z)
 
 
 
+
diff --git a/laser/LaosMotion/grbl/stepper.c b/laser/LaosMotion/grbl/stepper.c
index 260c779..09ed63e 100644
--- a/laser/LaosMotion/grbl/stepper.c
+++ b/laser/LaosMotion/grbl/stepper.c
@@ -145,7 +145,7 @@ static inline void  set_direction_pins (void)
 {
   xdir = ( (direction_bits & (1<<X_DIRECTION_BIT))? 0 : 1 );
   ydir = ( (direction_bits & (1<<Y_DIRECTION_BIT))? 0 : 1 );   
-  zdir = ( (direction_bits & (1<<Z_DIRECTION_BIT))? 0 : 1 );
+  // zdir = ( (direction_bits & (1<<Z_DIRECTION_BIT))?0:1);
   // edir = ( (direction_bits & (1<<E_DIRECTION_BIT))?0:1);   
 }
 
@@ -154,7 +154,7 @@ static inline void  set_step_pins (uint32_t bits)
 {
   xstep = ( (bits & (1<<X_STEP_BIT))?1:0 ); 
   ystep = ( (bits & (1<<Y_STEP_BIT))?1:0 );
-  zstep = ( (bits & (1<<Z_STEP_BIT))?1:0 );  
+ // zstep = ( (bits & (1<<Z_STEP_BIT))?1:0 );  
  // estep = ( (bits & (1<<E_STEP_BIT))?1:0 );        
 }
 
@@ -164,7 +164,7 @@ static inline void  clear_all_step_pins (void)
   
   xstep =( (step_inv & (1<<X_STEP_BIT)) ? 1 : 0 ); 
   ystep =( (step_inv & (1<<Y_STEP_BIT)) ? 1 : 0 ); 
-  zstep =( (step_inv & (1<<Z_STEP_BIT)) ? 0 : 1 ); 
+  // zstep =( (step_inv & (1<<Z_STEP_BIT)) ? 0 : 1 ); 
   // estep =( (step_inv & (1<<E_STEP_BIT)) ? 0 : 1 ); 
 }
 
@@ -203,7 +203,7 @@ static void st_go_idle()
   timer.detach();
   running = 0;
   clear_all_step_pins();
-  *laser = LASEROFF;
+  laser = LASEROFF;
   pwm = cfg->pwmmax / 100.0;  // set pwm to max;
   //printf("idle()..\n");
 }
@@ -328,7 +328,7 @@ static  void st_interrupt (void)
   {
    if ( current_block->options & OPT_BITMAP )
    {
-      *laser =  ! (bitmap[pos_l / 32] & (1 << (pos_l % 32)));
+      laser =  ! (bitmap[pos_l / 32] & (1 << (pos_l % 32)));
       counter_l += bitmap_width;
       // printf("%d %d %d: %d\n\r", bitmap_len, pos_l, counter_l,  (bitmap[pos_l / 32] & (pos_l % 32) ?  1 : 0 ) );
       if (counter_l > 0) 
@@ -340,7 +340,7 @@ static  void st_interrupt (void)
    }
    else
    {
-     *laser = ( current_block->options & OPT_LASER_ON ? LASERON : LASEROFF);      
+     laser = ( current_block->options & OPT_LASER_ON ? LASERON : LASEROFF);      
    }
    
     if (current_block->action_type == AT_MOVE)
@@ -463,3 +463,4 @@ void st_synchronize()
   while(plan_get_current_block()) { sleep_mode(); }    
 }
 
+
diff --git a/laser/LaosMotion/pins.h b/laser/LaosMotion/pins.h
index 8f4e781..1b2c847 100644
--- a/laser/LaosMotion/pins.h
+++ b/laser/LaosMotion/pins.h
@@ -26,9 +26,7 @@ extern DigitalIn zmax;
 extern PwmOut pwm;                // O1: PWM (Yellow)
 extern DigitalOut laser_enable;   // O2: enable laser
 extern DigitalOut o3;              // 03: NC
-
-#define LASER_PIN p5 // note: we define the laser pin here and do not allocate the laser DigitalOut()
-extern DigitalOut *laser;           // O4: LaserON (White), do not statically allocte: because this will cause the laser to switch on at reboot
+extern DigitalOut laser;           // O4: LaserON (White)
 
 
 // Analog in/out (cover sensor) + NC
diff --git a/laser/main.cpp b/laser/main.cpp
index 029ab19..b72b233 100644
--- a/laser/main.cpp
+++ b/laser/main.cpp
@@ -152,17 +152,13 @@ int main()
   
   if ( cfg->autohome )
   {
-    printf("WAIT FOR COVER...\n");
+    printf("HOME...\n");
     wait(1);
   
+    mnu->SetScreen("HOME....");
   
   // Start homing
-    mnu->SetScreen("WAIT FOR COVER....");
-    //if ( cfg->waitforstart ) 
-      while ( !mot->isStart() );
-    mnu->SetScreen("HOME....");
-    printf("HOME...\n");
-
+    while ( !mot->isStart() );
     mot->home(cfg->xhome,cfg->yhome, cfg->zhome);
     // if ( !mot->isHome ) exit(1);
     printf("HOME DONE. (%d,%d, %d)\n",cfg->xhome,cfg->yhome,cfg->zhome);
