diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc
index 2bc045e2b9e7907268fbeee62a07c9fb039a6cf9..30393a8fd17ae4b963238cf7b77c3d0b94a7a2b8 100644
--- a/compiler2/ttcn3/AST_ttcn3.cc
+++ b/compiler2/ttcn3/AST_ttcn3.cc
@@ -3847,8 +3847,8 @@ namespace Ttcn {
       if (t->get_fat_runs_on_self()) {
         error("Type of module parameter cannot be of function reference type"
             " `%s' which has runs on self clause", t->get_fullname().c_str());
+        break;
       }
-      break;
     default:
 #if defined(MINGW)
       checked = true;
diff --git a/regression_test/functionReference/FuncRef.ttcn b/regression_test/functionReference/FuncRef.ttcn
index 99c7b06355308310bb6d700156ec70c6700d828e..ff99e58317579791fac916c9b9ee2bca89916d43 100644
--- a/regression_test/functionReference/FuncRef.ttcn
+++ b/regression_test/functionReference/FuncRef.ttcn
@@ -29,6 +29,16 @@ function add(in integer a, in integer b) return integer { return a+b; }
 function sub(in integer a, in integer b) return integer { return a-b; }
 function mul(in integer a, in integer b) return integer { return a*b; }
 
+public function my_int2str(in integer a) return charstring {
+  var charstring f := int2str(a);
+  return f;
+}
+
+type function my_int2str_type(in integer a) return charstring;
+
+modulepar my_int2str_type modulepar_my_intstr := refers(my_int2str);
+
+
 type union operator_type
 {
   un_oper  unary,
@@ -443,6 +453,15 @@ function f_refers() {
   var f_FT vf := valueof(f_FT:refers(f_refers));  
 }
 
+// for Bug 511976 
+testcase tc_modulepar_refer() runs on FuncRef_comp {
+  if (modulepar_my_intstr.apply(4) == "4") {
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+
 
 control
 {
@@ -465,6 +484,7 @@ control
   execute(tc_runsonself());
   execute(tc_functionrefIsbound());
   execute(tc_send_tc());
+  execute(tc_modulepar_refer());
 }
 }