diff --git a/src/emc/rs274ngc/interp_check.cc b/src/emc/rs274ngc/interp_check.cc
index 411108a7c..ffa3a3d5e 100644
--- a/src/emc/rs274ngc/interp_check.cc
+++ b/src/emc/rs274ngc/interp_check.cc
@@ -322,12 +322,13 @@ int Interp::check_other_codes(block_pointer block)       //!< pointer to a block
           (motion != G_70) &&
           (motion != G_2) && (motion != G_3) &&
 	  (motion != G_74) && (motion != G_84) &&
+	  (motion != G_83) &&
           (block->m_modes[9] != 50) && (block->m_modes[9] != 51) && (block->m_modes[9] != 52) &&
           (block->m_modes[9] != 53) && (block->m_modes[5] != 62) && (block->m_modes[5] != 63) &&
           (block->m_modes[5] != 64) && (block->m_modes[5] != 65) && (block->m_modes[5] != 66) &&
           (block->m_modes[7] != 19) && (block->user_m != 1) &&
           (block->o_type != M_98)),
-          _("P word with no G2 G3 G4 G10 G64 G5 G5.2 G76 G82 G86 G88 G89"
+          _("P word with no G2 G3 G4 G10 G64 G5 G5.2 G76 G82 G83 G86 G88 G89"
             " or M50 M51 M52 M53 M62 M63 M64 M65 M66 M98 "
             "or user M code to use it"));
       int p_value = round_to_int(block->p_number);
diff --git a/src/emc/rs274ngc/interp_cycles.cc b/src/emc/rs274ngc/interp_cycles.cc
index 1a5f36d06..2783ed010 100644
--- a/src/emc/rs274ngc/interp_cycles.cc
+++ b/src/emc/rs274ngc/interp_cycles.cc
@@ -144,7 +144,8 @@ int Interp::convert_cycle_g83(block_pointer block,
                               double r,  //!< initial z-value                 
                               double clear_z,    //!< z-value of clearance plane      
                               double bottom_z,   //!< value of z at bottom of cycle   
-                              double delta)      //!< size of z-axis feed increment   
+                              double delta,
+			      double dwell)      //!< size of z-axis feed increment   
 {
   double current_depth;
   double rapid_delta;
@@ -165,6 +166,8 @@ int Interp::convert_cycle_g83(block_pointer block,
     cycle_traverse(block, plane, x, y, current_depth + rapid_delta);
   }
   cycle_feed(block, plane, x, y, bottom_z);
+  if (dwell>0)
+	  DWELL(dwell);
   cycle_traverse(block, plane, x, y, clear_z);
 
   return INTERP_OK;
@@ -1009,7 +1012,7 @@ int Interp::convert_cycle_xy(int motion, //!< a g-code between G_81 and G_89, a
     block->q_number =
       block->q_number == -1.0 ? settings->cycle_q : block->q_number;
     CYCLE_MACRO(convert_cycle_g83(block, CANON_PLANE_XY, aa, bb, r, clear_cc, cc,
-                                  block->q_number))
+                                  block->q_number, block->p_flag?block->p_number:0.0 /* dwell time */))
       settings->cycle_q = block->q_number;
     break;
   case G_74:
@@ -1191,7 +1194,7 @@ int Interp::convert_cycle_uv(int motion, //!< a g-code between G_81 and G_89, a
     block->q_number =
       block->q_number == -1.0 ? settings->cycle_q : block->q_number;
     CYCLE_MACRO(convert_cycle_g83(block, CANON_PLANE_UV, aa, bb, r, clear_cc, cc,
-                                  block->q_number))
+                                  block->q_number, block->p_flag?block->p_number:0.0))
       settings->cycle_q = block->q_number;
     break;
   case G_73:
@@ -1437,7 +1440,7 @@ int Interp::convert_cycle_yz(int motion, //!< a g-code between G_81 and G_89, a
     block->q_number =
       block->q_number == -1.0 ? settings->cycle_q : block->q_number;
     CYCLE_MACRO(convert_cycle_g83(block, CANON_PLANE_YZ, aa, bb, r, clear_cc, cc,
-                                  block->q_number))
+                                  block->q_number, block->p_flag?block->p_number:0.0))
       settings->cycle_q = block->q_number;
     break;
   case G_74:
@@ -1616,7 +1619,7 @@ int Interp::convert_cycle_vw(int motion, //!< a g-code between G_81 and G_89, a
     block->q_number =
       block->q_number == -1.0 ? settings->cycle_q : block->q_number;
     CYCLE_MACRO(convert_cycle_g83(block, CANON_PLANE_VW, aa, bb, r, clear_cc, cc,
-                                  block->q_number))
+                                  block->q_number, block->p_flag?block->p_number:0.0))
       settings->cycle_q = block->q_number;
     break;
   case G_73:
@@ -1870,7 +1873,7 @@ int Interp::convert_cycle_zx(int motion, //!< a g-code between G_81 and G_89, a
     block->q_number =
       block->q_number == -1.0 ? settings->cycle_q : block->q_number;
     CYCLE_MACRO(convert_cycle_g83(block, CANON_PLANE_XZ, aa, bb, r, clear_cc, cc,
-                                  block->q_number))
+                                  block->q_number, block->p_flag?block->p_number:0.0))
       settings->cycle_q = block->q_number;
     break;
   case G_74:
@@ -2057,7 +2060,7 @@ int Interp::convert_cycle_wu(int motion, //!< a g-code between G_81 and G_89, a
     block->q_number =
       block->q_number == -1.0 ? settings->cycle_q : block->q_number;
     CYCLE_MACRO(convert_cycle_g83(block, CANON_PLANE_UW, aa, bb, r, clear_cc, cc,
-                                  block->q_number))
+                                  block->q_number, block->p_flag?block->p_number:0.0))
       settings->cycle_q = block->q_number;
     break;
   case G_74:
