diff --git a/drivers/klist/klist.c b/drivers/klist/klist.c
index 002de8a608ce692790e872e0e0370e756470eb1f..3f17b33ea1443bd241f7be3268792c03128f9883 100644
--- a/drivers/klist/klist.c
+++ b/drivers/klist/klist.c
@@ -11,9 +11,9 @@
 #include <linux/uaccess.h>
 #include <linux/tty.h>
 #include <asm/errno.h>
-#include <linux/device.h>
-#include <linux/kdev_t.h>
+#include <linux/miscdevice.h>
 
+#define ERR(...) printk(KERN_ERR __VA_ARGS__)
 
 /* #define DEBUG */
 #ifdef DEBUG
@@ -22,8 +22,6 @@
 #define LOG(...)
 #endif
 
-#define ERR(...) printk(KERN_ERR __VA_ARGS__)
-
 /* klist functions */
 #define LIST_CMD 0x1337
 #define LIST_ADD (LIST_CMD + 0)
@@ -35,8 +33,6 @@
 /* consts */
 #define MAX_SIZE 0x400
 
-static struct class *cl;
-
 static long k_list[MAX_SIZE];
 static unsigned long list_size;
 
@@ -172,38 +168,26 @@ struct file_operations list_fops = {
 	unlocked_ioctl: list_ioctl,
 };
 
+static struct miscdevice klist = {
+	.minor = MISC_DYNAMIC_MINOR,
+	.name = "klist",
+	.fops = &list_fops,
+};
+
 static int __init init_list(void)
 {
 	int ret;
 
-	ret = register_chrdev(1337, "klist", &list_fops);
+	ret = misc_register(&klist);
 	LOG("register device: %d\n", ret);
 	list_size = 0;
-	if (ret) {
-		ERR("register device failed.");
-		return ret;
-	}
-
-	//automatically populate /sys/class/ and create /dev/klist on module startup
-	cl = class_create(THIS_MODULE, "klist");
-	if (IS_ERR(cl)) {
-		ERR("automatic /dev/klist creation failed on class_create.");
-		return ret;
-	}
-	if (IS_ERR(device_create(cl, NULL, MKDEV(1337, 0), NULL, "klist"))) {
-		ERR("automatic /dev/klist creation failed on class_create.");
-		class_destroy(cl);
-		return ret;
-	}
 
 	return ret;
 }
 
 static void __exit exit_list(void)
 {
-	device_destroy(cl, MKDEV(1337, 0));
-	class_destroy(cl);
-	unregister_chrdev(1337, "klist");
+	misc_deregister(&klist);
 	LOG("exit.\n");
 }