diff --git a/src/com/t_oster/liblasercut/drivers/Lasersaur.java b/src/com/t_oster/liblasercut/drivers/Lasersaur.java
index 2a0e3c5037a05c41d871687f1383173ddc43f929..96e672b8954b74b6f7654fad87f8a63b88963ad9 100644
--- a/src/com/t_oster/liblasercut/drivers/Lasersaur.java
+++ b/src/com/t_oster/liblasercut/drivers/Lasersaur.java
@@ -39,6 +39,7 @@ import purejavacomm.SerialPort;
 public class Lasersaur extends LaserCutter {
 
   private static final String SETTING_COMPORT = "COM-Port/Device";
+  private static final String SETTING_BAUDRATE = "Serial baudrate";
   private static final String SETTING_BEDWIDTH = "Laserbed width";
   private static final String SETTING_BEDHEIGHT = "Laserbed height";
   private static final String SETTING_FLIPX = "X axis goes right to left (yes/no)";
@@ -126,7 +127,7 @@ public class Lasersaur extends LaserCutter {
   public void setFlipXaxis(boolean flipXaxis) {
     this.flipXaxis = flipXaxis;
   }
-  protected String comPort = "ttyUSB0";
+  protected String comPort = "/dev/ttyUSB0";
 
   /**
    * Get the value of port
@@ -146,6 +147,19 @@ public class Lasersaur extends LaserCutter {
     this.comPort = comPort;
   }
 
+  protected int baudRate = 57600;
+
+  public int getBaudRate()
+  {
+    return baudRate;
+  }
+  
+
+  public void setBaudRate(int baudRate)
+  {
+    this.baudRate = baudRate;
+  }
+
   private byte[] generateVectorGCode(VectorPart vp, double resolution) throws UnsupportedEncodingException {
     ByteArrayOutputStream result = new ByteArrayOutputStream();
     PrintStream out = new PrintStream(result, true, "US-ASCII");
@@ -175,6 +189,7 @@ public class Lasersaur extends LaserCutter {
 
   private void setSpeed(PrintStream out, int speedInPercent) {
     if (speedInPercent != currentSpeed) {
+      out.printf(Locale.US, "G0 F%d\n", (int) ((double) speedInPercent * this.getLaserRate() / 100));
       out.printf(Locale.US, "G1 F%d\n", (int) ((double) speedInPercent * this.getLaserRate() / 100));
       currentSpeed = speedInPercent;
     }
@@ -386,7 +401,7 @@ public class Lasersaur extends LaserCutter {
     }
     SerialPort port = (SerialPort) tmp;
     port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
-    port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
+    port.setSerialPortParams(getBaudRate(), SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
     out = new BufferedOutputStream(port.getOutputStream());
     pl.taskChanged(this, "sending");
     writeJob(out, job, pl, port);
@@ -429,7 +444,9 @@ public class Lasersaur extends LaserCutter {
   public List<Double> getResolutions() {
     if (resolutions == null) {
       resolutions = Arrays.asList(new Double[]{
-                500d
+                250d,
+                500d,
+                1000d,
               });
     }
     return resolutions;
@@ -479,6 +496,7 @@ public class Lasersaur extends LaserCutter {
     SETTING_BEDHEIGHT,
     SETTING_FLIPX,
     SETTING_COMPORT,
+    SETTING_BAUDRATE,
     SETTING_LASER_RATE,
     SETTING_SEEK_RATE,
     SETTING_RASTER_WHITESPACE,
@@ -495,6 +513,8 @@ public class Lasersaur extends LaserCutter {
       return this.getAddSpacePerRasterLine();
     } else if (SETTING_COMPORT.equals(attribute)) {
       return this.getComPort();
+    } else if (SETTING_BAUDRATE.equals(attribute)) {
+      return this.getBaudRate();
     } else if (SETTING_FLIPX.equals(attribute)) {
       return this.isFlipXaxis();
     } else if (SETTING_LASER_RATE.equals(attribute)) {
@@ -515,6 +535,8 @@ public class Lasersaur extends LaserCutter {
       this.setAddSpacePerRasterLine((Double) value);
     } else if (SETTING_COMPORT.equals(attribute)) {
       this.setComPort((String) value);
+    } else if (SETTING_BAUDRATE.equals(attribute)) {
+      this.setBaudRate((Integer) value);
     } else if (SETTING_LASER_RATE.equals(attribute)) {
       this.setLaserRate((Double) value);
     } else if (SETTING_SEEK_RATE.equals(attribute)) {
@@ -532,6 +554,7 @@ public class Lasersaur extends LaserCutter {
   public LaserCutter clone() {
     Lasersaur clone = new Lasersaur();
     clone.comPort = comPort;
+    clone.baudRate = baudRate;
     clone.laserRate = laserRate;
     clone.seekRate = seekRate;
     clone.bedHeight = bedHeight;
@@ -543,6 +566,8 @@ public class Lasersaur extends LaserCutter {
 
   @Override
   public void saveJob(PrintStream fileOutputStream, LaserJob job) throws UnsupportedOperationException, IllegalJobException, Exception {
-      writeJob(new BufferedOutputStream(fileOutputStream), job, null, null);
+    currentPower = -1;
+    currentSpeed = -1;
+    writeJob(new BufferedOutputStream(fileOutputStream), job, null, null);
   }
 }