diff -Bbur jSSC-0.9.0-Release/src/jssc/SerialPort.java jSSC-0.9.0-briar/src/jssc/SerialPort.java
--- jSSC-0.9.0-Release/src/jssc/SerialPort.java	2011-12-21 13:29:10.000000000 +0000
+++ jSSC-0.9.0-briar/src/jssc/SerialPort.java	2012-12-06 15:07:37.786033300 +0000
@@ -30,13 +30,13 @@
  */
 public class SerialPort {
 
-    private SerialNativeInterface serialInterface;
-    private SerialPortEventListener eventListener;
-    private int portHandle;
-    private String portName;
-    private boolean portOpened = false;
-    private boolean maskAssigned = false;
-    private boolean eventListenerAdded = false;
+    private volatile SerialNativeInterface serialInterface;
+    private volatile SerialPortEventListener eventListener;
+    private volatile int portHandle;
+    private volatile String portName;
+    private volatile boolean portOpened = false;
+    private volatile boolean maskAssigned = false;
+    private volatile boolean eventListenerAdded = false;
     
 
     public static final int BAUDRATE_110 = 110;
@@ -915,7 +915,7 @@
 
     private class EventThread extends Thread {
 
-        private boolean threadTerminated = false;
+        private volatile boolean threadTerminated = false;
         
         @Override
         public void run() {
diff -Bbur jSSC-0.9.0-Release/src/jssc/SerialPortList.java jSSC-0.9.0-briar/src/jssc/SerialPortList.java
--- jSSC-0.9.0-Release/src/jssc/SerialPortList.java	2011-12-21 13:30:30.000000000 +0000
+++ jSSC-0.9.0-briar/src/jssc/SerialPortList.java	2012-12-06 14:31:50.142033801 +0000
@@ -97,20 +97,15 @@
      */
     private static String[] getLinuxPortNames() {
         String[] returnArray = new String[]{};
-        try {
-            Process dmesgProcess =  Runtime.getRuntime().exec("dmesg");
-            BufferedReader reader = new BufferedReader(new InputStreamReader(dmesgProcess.getInputStream()));
+        File dir = new File("/dev");
+        if(dir.exists() && dir.isDirectory()){
+            File[] files = dir.listFiles();
+            if(files.length > 0){
             TreeSet<String> portsTree = new TreeSet<String>();
             ArrayList<String> portsList = new ArrayList<String>();
-            String buffer = "";
-            while((buffer = reader.readLine()) != null && !buffer.isEmpty()){
-                if(buffer.matches(".*(ttyS|ttyUSB)[0-9]{1,3}.*")){
-                    String[] tmp = buffer.split(" ");
-                    for(String value : tmp){
-                        if(value.matches("(ttyS|ttyUSB)[0-9]{1,3}")){
-                            portsTree.add("/dev/" + value);
-                        }
-                    }
+                for(File file : files){
+                    if(!file.isDirectory() && !file.isFile() && file.getName().matches(".*(ttyS|ttyUSB|ttyACM)[0-9]{1,3}.*")){
+                        portsTree.add("/dev/" + file.getName());
                 }
             }
             for(String portName : portsTree){
@@ -130,10 +125,7 @@
                 }
             }
             returnArray = portsList.toArray(returnArray);
-            reader.close();
         }
-        catch (IOException ex) {
-            //Do nothing
         }
         return returnArray;
     }
@@ -179,7 +171,7 @@
                 TreeSet<String> portsTree = new TreeSet<String>();
                 ArrayList<String> portsList = new ArrayList<String>();
                 for(File file : files){
-                    if(!file.isDirectory() && !file.isFile() && file.getName().matches("tty.(serial.*|usbserial.*)")){
+                    if(!file.isDirectory() && !file.isFile() && file.getName().matches("tty.(modem.*|usbmodem.*|serial.*|usbserial.*)")){
                         portsTree.add("/dev/" + file.getName());
                     }
                 }
