static int __init aten_init(void)
 {
-       return paride_register(&aten)-1;
+       return paride_register(&aten);
 }
 
 static void __exit aten_exit(void)
 
 
 static int __init bpck_init(void)
 {
-       return paride_register(&bpck)-1;
+       return paride_register(&bpck);
 }
 
 static void __exit bpck_exit(void)
 
        printk(KERN_INFO "bpck6: Copyright 2001 by Micro Solutions, Inc., DeKalb IL. USA\n");
        if(verbose)
                printk(KERN_DEBUG "bpck6: verbose debug enabled.\n");
-       return paride_register(&bpck6) - 1;
+       return paride_register(&bpck6);
 }
 
 static void __exit bpck6_exit(void)
 
 
 static int __init comm_init(void)
 {
-       return paride_register(&comm)-1;
+       return paride_register(&comm);
 }
 
 static void __exit comm_exit(void)
 
 
 static int __init dstr_init(void)
 {
-       return paride_register(&dstr)-1;
+       return paride_register(&dstr);
 }
 
 static void __exit dstr_exit(void)
 
 #ifdef CONFIG_PARIDE_EPATC8
        epatc8 = 1;
 #endif
-       return paride_register(&epat)-1;
+       return paride_register(&epat);
 }
 
 static void __exit epat_exit(void)
 
 
 static int __init epia_init(void)
 {
-       return paride_register(&epia)-1;
+       return paride_register(&epia);
 }
 
 static void __exit epia_exit(void)
 
 
 static int __init fit2_init(void)
 {
-       return paride_register(&fit2)-1;
+       return paride_register(&fit2);
 }
 
 static void __exit fit2_exit(void)
 
 
 static int __init fit3_init(void)
 {
-       return paride_register(&fit3)-1;
+       return paride_register(&fit3);
 }
 
 static void __exit fit3_exit(void)
 
 
 static int __init friq_init(void)
 {
-       return paride_register(&friq)-1;
+       return paride_register(&friq);
 }
 
 static void __exit friq_exit(void)
 
 
 static int __init frpw_init(void)
 {
-       return paride_register(&frpw)-1;
+       return paride_register(&frpw);
 }
 
 static void __exit frpw_exit(void)
 
 
 static int __init kbic_init(void)
 {
-       return (paride_register(&k951)||paride_register(&k971))-1;
+       int rv;
+
+       rv = paride_register(&k951);
+       if (rv < 0)
+               return rv;
+       rv = paride_register(&k971);
+       if (rv < 0)
+               paride_unregister(&k951);
+       return rv;
 }
 
 static void __exit kbic_exit(void)
 
 
 static int __init ktti_init(void)
 {
-       return paride_register(&ktti)-1;
+       return paride_register(&ktti);
 }
 
 static void __exit ktti_exit(void)
 
 
 static int __init on20_init(void)
 {
-       return paride_register(&on20)-1;
+       return paride_register(&on20);
 }
 
 static void __exit on20_exit(void)
 
 
 static int __init on26_init(void)
 {
-       return paride_register(&on26)-1;
+       return paride_register(&on26);
 }
 
 static void __exit on26_exit(void)
 
                if (protocols[k] && !strcmp(pr->name, protocols[k]->name)) {
                        printk("paride: %s protocol already registered\n",
                               pr->name);
-                       return 0;
+                       return -1;
                }
        k = 0;
        while ((k < MAX_PROTOS) && (protocols[k]))
                k++;
        if (k == MAX_PROTOS) {
                printk("paride: protocol table full\n");
-               return 0;
+               return -1;
        }
        protocols[k] = pr;
        pr->index = k;
        printk("paride: %s registered as protocol %d\n", pr->name, k);
-       return 1;
+       return 0;
 }
 
 EXPORT_SYMBOL(paride_register);