}
 EXPORT_SYMBOL_GPL(sysdev_class_remove_file);
 
-/*
- * declare system_subsys
- */
-static decl_subsys(system, NULL);
+static struct kset *system_kset;
 
 int sysdev_class_register(struct sysdev_class * cls)
 {
        pr_debug("Registering sysdev class '%s'\n",
                 kobject_name(&cls->kset.kobj));
        INIT_LIST_HEAD(&cls->drivers);
-       cls->kset.kobj.parent = &system_subsys.kobj;
+       cls->kset.kobj.parent = &system_kset->kobj;
        cls->kset.kobj.ktype = &ktype_sysdev_class;
-       cls->kset.kobj.kset = &system_subsys;
+       cls->kset.kobj.kset = system_kset;
        return kset_register(&cls->kset);
 }
 
        pr_debug("Shutting Down System Devices\n");
 
        mutex_lock(&sysdev_drivers_lock);
-       list_for_each_entry_reverse(cls, &system_subsys.list,
-                                   kset.kobj.entry) {
+       list_for_each_entry_reverse(cls, &system_kset->list, kset.kobj.entry) {
                struct sys_device * sysdev;
 
                pr_debug("Shutting down type '%s':\n",
 
        pr_debug("Suspending System Devices\n");
 
-       list_for_each_entry_reverse(cls, &system_subsys.list,
-                                   kset.kobj.entry) {
-
+       list_for_each_entry_reverse(cls, &system_kset->list, kset.kobj.entry) {
                pr_debug("Suspending type '%s':\n",
                         kobject_name(&cls->kset.kobj));
 
        }
 
        /* resume other classes */
-       list_for_each_entry_continue(cls, &system_subsys.list,
-                                       kset.kobj.entry) {
+       list_for_each_entry_continue(cls, &system_kset->list, kset.kobj.entry) {
                list_for_each_entry(err_dev, &cls->kset.list, kobj.entry) {
                        pr_debug(" %s\n", kobject_name(&err_dev->kobj));
                        __sysdev_resume(err_dev);
 
        pr_debug("Resuming System Devices\n");
 
-       list_for_each_entry(cls, &system_subsys.list, kset.kobj.entry) {
+       list_for_each_entry(cls, &system_kset->list, kset.kobj.entry) {
                struct sys_device * sysdev;
 
                pr_debug("Resuming type '%s':\n",
 
 int __init system_bus_init(void)
 {
-       system_subsys.kobj.parent = &devices_kset->kobj;
-       return subsystem_register(&system_subsys);
+       system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);
+       if (!system_kset)
+               return -ENOMEM;
+       return 0;
 }
 
 EXPORT_SYMBOL_GPL(sysdev_register);