diff --git a/sm5/smartctl.c b/sm5/smartctl.c
index 90619ec5a6046a750b731555b3dafc486a77afa7..3487d7e89bcf3c4a368c9053591830915e3d882a 100644
--- a/sm5/smartctl.c
+++ b/sm5/smartctl.c
@@ -38,7 +38,7 @@
 #include "scsiprint.h"
 
 extern const char *CVSid1, *CVSid2, *CVSid4, *CVSid5; 
-const char* CVSid6="$Id: smartctl.c,v 1.19 2002/10/24 13:36:37 ballen4705 Exp $"
+const char* CVSid6="$Id: smartctl.c,v 1.20 2002/10/25 08:50:21 ballen4705 Exp $"
 CVSID1 CVSID2 CVSID4 CVSID5 CVSID6;
 
 unsigned char driveinfo               = FALSE;
@@ -206,7 +206,7 @@ void ParseOpts (int argc, char** argv){
   extern char *optarg;
   extern int optopt, optind, opterr;
   
-  opterr=1;
+  opterr=optopt=0;
   while (-1 != (optchar = getopt(argc, argv, opts))) {
     switch (optchar){
     case QUIETMODE:
@@ -291,17 +291,16 @@ void ParseOpts (int argc, char** argv){
       break;
     case 'h':
     case '?':
-      veryquietmode=FALSE;
-      printslogan();
-      Usage();
-      exit(0);	
-      break;
     default:
       veryquietmode=FALSE;
-      pout("\n");
       printslogan();
+      if (optopt){
+	pout("=======> UNRECOGNIZED OPTION: %c <=======\n\n",optopt);
+	Usage();
+	exit(FAILCMD);
+      }
       Usage();
-      exit(FAILCMD);	
+      exit(0);	
     }
   }
   // Do this here, so results are independent of argument order	
diff --git a/sm5/smartctl.cpp b/sm5/smartctl.cpp
index 3e2e2d8e151514308f3a1c2a7ae1cac5c2707ee7..75b8b2cf214969099495d0d3b8a37c07a3bd8f44 100644
--- a/sm5/smartctl.cpp
+++ b/sm5/smartctl.cpp
@@ -38,7 +38,7 @@
 #include "scsiprint.h"
 
 extern const char *CVSid1, *CVSid2, *CVSid4, *CVSid5; 
-const char* CVSid6="$Id: smartctl.cpp,v 1.19 2002/10/24 13:36:37 ballen4705 Exp $"
+const char* CVSid6="$Id: smartctl.cpp,v 1.20 2002/10/25 08:50:21 ballen4705 Exp $"
 CVSID1 CVSID2 CVSID4 CVSID5 CVSID6;
 
 unsigned char driveinfo               = FALSE;
@@ -206,7 +206,7 @@ void ParseOpts (int argc, char** argv){
   extern char *optarg;
   extern int optopt, optind, opterr;
   
-  opterr=1;
+  opterr=optopt=0;
   while (-1 != (optchar = getopt(argc, argv, opts))) {
     switch (optchar){
     case QUIETMODE:
@@ -291,17 +291,16 @@ void ParseOpts (int argc, char** argv){
       break;
     case 'h':
     case '?':
-      veryquietmode=FALSE;
-      printslogan();
-      Usage();
-      exit(0);	
-      break;
     default:
       veryquietmode=FALSE;
-      pout("\n");
       printslogan();
+      if (optopt){
+	pout("=======> UNRECOGNIZED OPTION: %c <=======\n\n",optopt);
+	Usage();
+	exit(FAILCMD);
+      }
       Usage();
-      exit(FAILCMD);	
+      exit(0);	
     }
   }
   // Do this here, so results are independent of argument order