diff --git a/sm5/smartctl.c b/sm5/smartctl.c
index 7dec5b647b77787f0e5cb16baf78b8a33334f2dd..3d0d5440ce468847254267fc33a74b5e58a9925e 100644
--- a/sm5/smartctl.c
+++ b/sm5/smartctl.c
@@ -51,7 +51,7 @@ extern const char *os_solaris_ata_s_cvsid;
 extern const char *int64_vc6_c_cvsid;
 #endif
 extern const char *atacmdnames_c_cvsid, *atacmds_c_cvsid, *ataprint_c_cvsid, *knowndrives_c_cvsid, *os_XXXX_c_cvsid, *scsicmds_c_cvsid, *scsiprint_c_cvsid, *utility_c_cvsid;
-const char* smartctl_c_cvsid="$Id: smartctl.c,v 1.132 2004/08/13 13:57:12 arvoreen Exp $"
+const char* smartctl_c_cvsid="$Id: smartctl.c,v 1.133 2004/08/16 00:57:29 ballen4705 Exp $"
 ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID INT64_H_CVSID KNOWNDRIVES_H_CVSID SCSICMDS_H_CVSID SCSIPRINT_H_CVSID SMARTCTL_H_CVSID UTILITY_H_CVSID;
 
 // This is a block containing all the "control variables".  We declare
@@ -840,7 +840,8 @@ int main (int argc, char **argv){
   
   if (con->controller_port) {
     // figure out 3Ware type
-    con->controller_type = guess_device_type(device);
+    if (CONTROLLER_SCSI == (con->controller_type = guess_device_type(device)))
+	con->controller_type=THREE_WARE_678K;
   }
 
   // set up mode for open() call.  SCSI case is:
@@ -859,7 +860,7 @@ int main (int argc, char **argv){
       else if (con->controller_type == THREE_WARE_678K_CHAR)
 	mode="ATA_3WARE_678K";
       else 
-	mode="ATA_3WARE_UNKNOWN";
+	mode="ATA";
     }
     break;
   }
diff --git a/sm5/smartctl.cpp b/sm5/smartctl.cpp
index 443e0a72d57ec61dd491707afe2ad769bcd9f426..af79849cf1b4ea535b7dd5c74df6c2fe3b0b0571 100644
--- a/sm5/smartctl.cpp
+++ b/sm5/smartctl.cpp
@@ -51,7 +51,7 @@ extern const char *os_solaris_ata_s_cvsid;
 extern const char *int64_vc6_c_cvsid;
 #endif
 extern const char *atacmdnames_c_cvsid, *atacmds_c_cvsid, *ataprint_c_cvsid, *knowndrives_c_cvsid, *os_XXXX_c_cvsid, *scsicmds_c_cvsid, *scsiprint_c_cvsid, *utility_c_cvsid;
-const char* smartctl_c_cvsid="$Id: smartctl.cpp,v 1.132 2004/08/13 13:57:12 arvoreen Exp $"
+const char* smartctl_c_cvsid="$Id: smartctl.cpp,v 1.133 2004/08/16 00:57:29 ballen4705 Exp $"
 ATACMDS_H_CVSID ATAPRINT_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID INT64_H_CVSID KNOWNDRIVES_H_CVSID SCSICMDS_H_CVSID SCSIPRINT_H_CVSID SMARTCTL_H_CVSID UTILITY_H_CVSID;
 
 // This is a block containing all the "control variables".  We declare
@@ -840,7 +840,8 @@ int main (int argc, char **argv){
   
   if (con->controller_port) {
     // figure out 3Ware type
-    con->controller_type = guess_device_type(device);
+    if (CONTROLLER_SCSI == (con->controller_type = guess_device_type(device)))
+	con->controller_type=THREE_WARE_678K;
   }
 
   // set up mode for open() call.  SCSI case is:
@@ -859,7 +860,7 @@ int main (int argc, char **argv){
       else if (con->controller_type == THREE_WARE_678K_CHAR)
 	mode="ATA_3WARE_678K";
       else 
-	mode="ATA_3WARE_UNKNOWN";
+	mode="ATA";
     }
     break;
   }
diff --git a/sm5/utility.h b/sm5/utility.h
index a6809e020f4c93c146f9f3c067f54fe64fe793b6..a2f5e988afdef363ac3da2ca3098cd2d17447140 100644
--- a/sm5/utility.h
+++ b/sm5/utility.h
@@ -25,7 +25,7 @@
 #ifndef UTILITY_H_
 #define UTILITY_H_
 
-#define UTILITY_H_CVSID "$Id: utility.h,v 1.35 2004/08/13 13:57:12 arvoreen Exp $\n"
+#define UTILITY_H_CVSID "$Id: utility.h,v 1.36 2004/08/16 00:57:29 ballen4705 Exp $\n"
 
 #include <time.h>
 #include <sys/types.h> // for regex.h (according to POSIX)
@@ -167,9 +167,9 @@ void MsecToText(unsigned int msec, char *txt);
 #define CONTROLLER_TYPE(x)	(x->controller_type & CONTROLLER_MASK)
 
 // 3Ware controller types
-#define THREE_WARE_9000_CHAR  (CONTROLLER_3WARE & 1)
-#define THREE_WARE_678K       (CONTROLLER_3WARE & 2)
-#define THREE_WARE_678K_CHAR  (CONTROLLER_3WARE & 3)
+#define THREE_WARE_9000_CHAR  (CONTROLLER_3WARE | 1)
+#define THREE_WARE_678K       (CONTROLLER_3WARE | 2)
+#define THREE_WARE_678K_CHAR  (CONTROLLER_3WARE | 3)
 #define THREE_WARE_TYPE_MASK	0x0F
 
 #define THREE_WARE_TYPE(x) (x->controller_type & THREE_WARE_TYPE_MASK)