return 0;
 }
 
+static acpi_status wmi_method_enable(struct wmi_block *wblock, int enable)
+{
+       struct guid_block *block = NULL;
+       char method[5];
+       struct acpi_object_list input;
+       union acpi_object params[1];
+       acpi_status status;
+       acpi_handle handle;
+
+       block = &wblock->gblock;
+       handle = wblock->handle;
+
+       if (!block)
+               return AE_NOT_EXIST;
+
+       input.count = 1;
+       input.pointer = params;
+       params[0].type = ACPI_TYPE_INTEGER;
+       params[0].integer.value = enable;
+
+       snprintf(method, 5, "WE%02X", block->notify_id);
+       status = acpi_evaluate_object(handle, method, &input, NULL);
+
+       if (status != AE_OK && status != AE_NOT_FOUND)
+               return status;
+       else
+               return AE_OK;
+}
+
 /*
  * Exported WMI functions
  */
 wmi_notify_handler handler, void *data)
 {
        struct wmi_block *block;
+       acpi_status status;
 
        if (!guid || !handler)
                return AE_BAD_PARAMETER;
        block->handler = handler;
        block->handler_data = data;
 
-       return AE_OK;
+       status = wmi_method_enable(block, 1);
+
+       return status;
 }
 EXPORT_SYMBOL_GPL(wmi_install_notify_handler);
 
 acpi_status wmi_remove_notify_handler(const char *guid)
 {
        struct wmi_block *block;
+       acpi_status status;
 
        if (!guid)
                return AE_BAD_PARAMETER;
        if (!block->handler)
                return AE_NULL_ENTRY;
 
+       status = wmi_method_enable(block, 0);
+
        block->handler = NULL;
        block->handler_data = NULL;
 
-       return AE_OK;
+       return status;
 }
 EXPORT_SYMBOL_GPL(wmi_remove_notify_handler);