--- logitech_applet-0.4test1/logitech_applet.c.mx518	2004-09-21 20:18:55.000000000 +0800
+++ logitech_applet-0.4test1/logitech_applet.c	2005-05-03 08:04:38.000000000 +0800
@@ -251,6 +251,7 @@ struct device_table {
     { VENDOR_LOGITECH, 0xC012, "M-BL63B", "MouseMan Dual Optical", HAS_RES },
     { VENDOR_LOGITECH, 0xC01B, "M-BP86", "MX310 Optical Mouse", HAS_RES },
     { VENDOR_LOGITECH, 0xC01D, "M-BS81A", "MX510 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR },
+    { VENDOR_LOGITECH, 0xC01E, "M-BS81A", "MX518 Optical Mouse", HAS_RES },
     { VENDOR_LOGITECH, 0xC024, "M-BP82", "MX300 Optical Mouse", HAS_RES },
     { VENDOR_LOGITECH, 0xC025, "M-BP81A", "MX500 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR },
     { VENDOR_LOGITECH, 0xC031, "M-UT58A", "iFeel Mouse (silver)", HAS_RES },
@@ -318,8 +319,12 @@ int main(int argc, char **argv)
 		resolution = 400;
 	    else if (!strcmp("800", optarg))
 		resolution = 800;
+	    else if (!strcmp("1200", optarg))
+		resolution = 1200;
+	    else if (!strcmp("1600", optarg))
+		resolution = 1600;
 	    else
-		printf("Bad argument (should be 400 or 800)\n");
+		printf("Bad argument (should be 400 or 800;\non some models 1200 and 1600 are acceptable)\n");
             break;
         case 'v':
 	    version();
@@ -363,14 +368,22 @@ int main(int argc, char **argv)
 				    break;
 				case 4: printf("800cpi\n");
 				    break;
+				case 5: printf("1200cpi\n");
+				    break;
+				case 6: printf("1600cpi\n");
+				    break;
 				default: printf("(Unexpected result:%i)\n", resolution);
 				    break;
 				}
 			} else {
 			    if (400 == resolution)
 				set_resolution(dev, 0x03);
-			    else 
+			    else if (800 == resolution)
 				set_resolution(dev, 0x04);
+			    else if (1200 == resolution)
+				set_resolution(dev, 0x05);
+			    else 
+				set_resolution(dev, 0x06);
 			}
 		    }
 
