diff --git a/lib/jna.jar b/lib/jna.jar
new file mode 100644
index 0000000000000000000000000000000000000000..55ca1eb4e308338763b7170743a7f7d1179a2c47
Binary files /dev/null and b/lib/jna.jar differ
diff --git a/lib/purejavacomm.jar b/lib/purejavacomm.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2fc07fd7087e30b949f8293ac8e05ef34f11d171
Binary files /dev/null and b/lib/purejavacomm.jar differ
diff --git a/nbproject/project.properties b/nbproject/project.properties
index 9904b55757cdf655835f68f29577d875999e47ed..5fa7ece3b14a6babd8f7e908b842ded8aafc0d5c 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -27,10 +27,14 @@ dist.javadoc.dir=${dist.dir}/javadoc
 endorsed.classpath=
 excludes=
 file.reference.commons-net-3.1.jar=lib/commons-net-3.1.jar
+file.reference.jna.jar=lib/jna.jar
+file.reference.purejavacomm.jar=lib/purejavacomm.jar
 includes=**
 jar.compress=false
 javac.classpath=\
-    ${file.reference.commons-net-3.1.jar}
+    ${file.reference.commons-net-3.1.jar}:\
+    ${file.reference.jna.jar}:\
+    ${file.reference.purejavacomm.jar}
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
diff --git a/src/com/t_oster/liblasercut/drivers/Lasersaur.java b/src/com/t_oster/liblasercut/drivers/Lasersaur.java
index d3ca1a2e757cf47ad98f8e45ed05ac987292ce4d..d71c36710e3de4d2ad7394e519535837eec0118f 100644
--- a/src/com/t_oster/liblasercut/drivers/Lasersaur.java
+++ b/src/com/t_oster/liblasercut/drivers/Lasersaur.java
@@ -29,6 +29,8 @@ import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
+import purejavacomm.CommPort;
+import purejavacomm.CommPortIdentifier;
 
 /**
  * This class implements a driver for the LAOS Lasercutter board. Currently it
@@ -386,9 +388,15 @@ public class Lasersaur extends LaserCutter {
     ByteArrayOutputStream buffer = null;
     pl.taskChanged(this, "checking job");
     checkJob(job);
-    buffer = new ByteArrayOutputStream();
-    out = new BufferedOutputStream(buffer);
-    pl.taskChanged(this, "buffering");
+    pl.taskChanged(this, "connecting");
+    CommPortIdentifier cpi = CommPortIdentifier.getPortIdentifier(this.getComPort());
+    if (cpi == null)
+    {
+      throw new Exception("Error: Could not Open COM-Port '"+this.getComPort()+"'");
+    }
+    CommPort port = cpi.open("VisiCut", 10000);
+    out = new BufferedOutputStream(port.getOutputStream());
+    pl.taskChanged(this, "sending");
     out.write(this.generateInitializationCode());
     pl.progressChanged(this, 20);
     if (job.contains3dRaster()) {
@@ -405,7 +413,7 @@ public class Lasersaur extends LaserCutter {
     pl.progressChanged(this, 80);
     out.write(this.generateShutdownCode());
     out.close();
-    System.out.write(buffer.toByteArray());
+    port.close();
     pl.taskChanged(this, "sent.");
     pl.progressChanged(this, 100);
   }