diff --git a/modcc/cprinter.cpp b/modcc/cprinter.cpp
index 3559e3272d38d49cf66e751f584c52a3cb14549e..8e7ad9b01666f2bf4200d7e0fff17698340da876 100644
--- a/modcc/cprinter.cpp
+++ b/modcc/cprinter.cpp
@@ -827,7 +827,6 @@ void CPrinter::print_APIMethod_optimized(APIMethod* e) {
     decrease_indentation();
 
     aliased_output_ = false;
-    return;
 }
 
 void CPrinter::visit(CallExpression *e) {
diff --git a/modcc/modcc.cpp b/modcc/modcc.cpp
index 7ff7a0ac1713c2fe6acd40c2f385fed100f111a8..d8caef1ff43195ecf8e5a27cf6da7ab9cd8da89c 100644
--- a/modcc/modcc.cpp
+++ b/modcc/modcc.cpp
@@ -17,8 +17,6 @@
 
 using namespace arb;
 
-//#define VERBOSE
-
 int main(int argc, char **argv) {
 
     // parse command line arguments
diff --git a/modcc/module.cpp b/modcc/module.cpp
index ca4b0028d66a2b2b6971365caf781d9f02824695..e4e8f4c64ca7c6ded847249c6fcad5ca28c58336 100644
--- a/modcc/module.cpp
+++ b/modcc/module.cpp
@@ -267,27 +267,26 @@ bool Module::semantic() {
     //.........................................................................
     // nrn_init : based on the INITIAL block (i.e. the 'initial' procedure
     //.........................................................................
+
+    // insert an empty INITIAL block if none was defined in the .mod file.
+    if( !has_symbol("initial", symbolKind::procedure) ) {
+        symbols_["initial"] = make_symbol<ProcedureExpression>(
+                Location(), "initial",
+                std::vector<expression_ptr>(),
+                make_expression<BlockExpression>(Location(), expr_list_type(), false)
+        );
+    }
     auto initial_api = make_empty_api_method("nrn_init", "initial");
     auto api_init  = initial_api.first;
     auto proc_init = initial_api.second;
+    auto& init_body = api_init->body()->statements();
 
-    if(api_init)
-    {
-        auto& body = api_init->body()->statements();
-
-        for(auto& e : *proc_init->body()) {
-            body.emplace_back(e->clone());
-        }
-
-        api_init->semantic(symbols_);
-    }
-    else {
-        if(!proc_init) {
-            error("an INITIAL block is required", Location());
-        }
-        return false;
+    for(auto& e : *proc_init->body()) {
+        init_body.emplace_back(e->clone());
     }
 
+    api_init->semantic(symbols_);
+
     // Look in the symbol table for a procedure with the name "breakpoint".
     // This symbol corresponds to the BREAKPOINT block in the .mod file
     // There are two APIMethods generated from BREAKPOINT.