{
        struct nf_conntrack_helper *helper;
        struct nf_conn_help *help;
+       int ret = 0;
 
        helper = nf_conntrack_helper_try_module_get(name, info->family,
                                                    key->ip.proto);
                return -ENOMEM;
        }
 
+#ifdef CONFIG_NF_NAT_NEEDED
+       if (info->nat) {
+               ret = nf_nat_helper_try_module_get(name, info->family,
+                                                  key->ip.proto);
+               if (ret) {
+                       nf_conntrack_helper_put(helper);
+                       OVS_NLERR(log, "Failed to load \"%s\" NAT helper, error: %d",
+                                 name, ret);
+                       return ret;
+               }
+       }
+#endif
        rcu_assign_pointer(help->helper, helper);
        info->helper = helper;
-
-       if (info->nat)
-               request_module("ip_nat_%s", name);
-
-       return 0;
+       return ret;
 }
 
 #if IS_ENABLED(CONFIG_NF_NAT)
 
 static void __ovs_ct_free_action(struct ovs_conntrack_info *ct_info)
 {
-       if (ct_info->helper)
+       if (ct_info->helper) {
+#ifdef CONFIG_NF_NAT_NEEDED
+               if (ct_info->nat)
+                       nf_nat_helper_put(ct_info->helper);
+#endif
                nf_conntrack_helper_put(ct_info->helper);
+       }
        if (ct_info->ct) {
                if (ct_info->timeout[0])
                        nf_ct_destroy_timeout(ct_info->ct);