static int __init ebtable_filter_init(void)
 {
-       int i, j, ret;
+       int ret;
 
        ret = ebt_register_table(&frame_filter);
        if (ret < 0)
                return ret;
-       for (i = 0; i < ARRAY_SIZE(ebt_ops_filter); i++)
-               if ((ret = nf_register_hook(&ebt_ops_filter[i])) < 0)
-                       goto cleanup;
-       return ret;
-cleanup:
-       for (j = 0; j < i; j++)
-               nf_unregister_hook(&ebt_ops_filter[j]);
-       ebt_unregister_table(&frame_filter);
+       ret = nf_register_hooks(ebt_ops_filter, ARRAY_SIZE(ebt_ops_filter));
+       if (ret < 0)
+               ebt_unregister_table(&frame_filter);
        return ret;
 }
 
 static void __exit ebtable_filter_fini(void)
 {
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(ebt_ops_filter); i++)
-               nf_unregister_hook(&ebt_ops_filter[i]);
+       nf_unregister_hooks(ebt_ops_filter, ARRAY_SIZE(ebt_ops_filter));
        ebt_unregister_table(&frame_filter);
 }
 
 
 
 static int __init ebtable_nat_init(void)
 {
-       int i, ret, j;
+       int ret;
 
        ret = ebt_register_table(&frame_nat);
        if (ret < 0)
                return ret;
-       for (i = 0; i < ARRAY_SIZE(ebt_ops_nat); i++)
-               if ((ret = nf_register_hook(&ebt_ops_nat[i])) < 0)
-                       goto cleanup;
-       return ret;
-cleanup:
-       for (j = 0; j < i; j++)
-               nf_unregister_hook(&ebt_ops_nat[j]);
-       ebt_unregister_table(&frame_nat);
+       ret = nf_register_hooks(ebt_ops_nat, ARRAY_SIZE(ebt_ops_nat));
+       if (ret < 0)
+               ebt_unregister_table(&frame_nat);
        return ret;
 }
 
 static void __exit ebtable_nat_fini(void)
 {
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(ebt_ops_nat); i++)
-               nf_unregister_hook(&ebt_ops_nat[i]);
+       nf_unregister_hooks(ebt_ops_nat, ARRAY_SIZE(ebt_ops_nat));
        ebt_unregister_table(&frame_nat);
 }