diff --git a/modcc/printer/cprinter.cpp b/modcc/printer/cprinter.cpp
index 9b78f551d920620403e93c1e6e60adf4af097075..0e333686f31edc7a194d262cd7d12ade200da1b1 100644
--- a/modcc/printer/cprinter.cpp
+++ b/modcc/printer/cprinter.cpp
@@ -369,21 +369,24 @@ std::string emit_cpp_source(const Module& module_, const printer_options& opt) {
 
     // Nrn methods:
 
-    net_receive && out <<
-        "void " << class_name << "::deliver_events(deliverable_event_stream::state events) {\n" << indent <<
-        "auto ncell = events.n_streams();\n"
-        "for (size_type c = 0; c<ncell; ++c) {\n" << indent <<
-        "auto begin = events.begin_marked(c);\n"
-        "auto end = events.end_marked(c);\n"
-        "for (auto p = begin; p<end; ++p) {\n" << indent <<
-        "if (p->mech_id==mechanism_id_) net_receive(p->mech_index, p->weight);\n" << popindent <<
-        "}\n" << popindent <<
-        "}\n" << popindent <<
-        "}\n"
-        "\n"
-        "void " << class_name << "::net_receive(int i_, value_type weight) {\n" << indent <<
-        cprint(net_receive->body()) << popindent <<
-        "}\n\n";
+    if (net_receive) {
+        const std::string weight_arg = net_receive->args().empty() ? "weight" : net_receive->args().front()->is_argument()->name();
+        out <<
+            "void " << class_name << "::deliver_events(deliverable_event_stream::state events) {\n" << indent <<
+            "auto ncell = events.n_streams();\n"
+            "for (size_type c = 0; c<ncell; ++c) {\n" << indent <<
+            "auto begin = events.begin_marked(c);\n"
+            "auto end = events.end_marked(c);\n"
+            "for (auto p = begin; p<end; ++p) {\n" << indent <<
+            "if (p->mech_id==mechanism_id_) net_receive(p->mech_index, p->weight);\n" << popindent <<
+            "}\n" << popindent <<
+            "}\n" << popindent <<
+            "}\n"
+            "\n"
+            "void " << class_name << "::net_receive(int i_, value_type " << weight_arg << ") {\n" << indent <<
+            cprint(net_receive->body()) << popindent <<
+            "}\n\n";
+    }
 
     auto emit_body = [&](APIMethod *p) {
         if (with_simd) {
diff --git a/modcc/printer/gpuprinter.cpp b/modcc/printer/gpuprinter.cpp
index b685d0fbb14e2c157eef159eccb152a1b67e6db1..b0f67d1427a607586ab26fc7c4e3947f28e20016 100644
--- a/modcc/printer/gpuprinter.cpp
+++ b/modcc/printer/gpuprinter.cpp
@@ -293,6 +293,7 @@ std::string emit_gpu_cu_source(const Module& module_, const printer_options& opt
 
     // event delivery
     if (net_receive) {
+        const std::string weight_arg = net_receive->args().empty() ? "weight" : net_receive->args().front()->is_argument()->name();
         out << "__global__\n"
             << "void deliver_events(int mech_id_, " <<  ppack_name << " params_, "
             << "deliverable_event_stream_state events) {\n" << indent
@@ -305,7 +306,7 @@ std::string emit_gpu_cu_source(const Module& module_, const printer_options& opt
             << "for (auto p = begin; p<end; ++p) {\n" << indent
             << "if (p->mech_id==mech_id_) {\n" << indent
             << "auto tid_ = p->mech_index;\n"
-            << "auto weight = p->weight;\n"
+            << "auto " << weight_arg << " = p->weight;\n"
             << cuprint(net_receive->body())
             << popindent << "}\n"
             << popindent << "}\n"