diff --git a/compiler2/record_of.c b/compiler2/record_of.c
index d0e9e7a4673f03a93b4451d7979fdc15a8409aa9..7be4e31efee6c2ec62dedf693118a51a6de686be 100644
--- a/compiler2/record_of.c
+++ b/compiler2/record_of.c
@@ -3225,6 +3225,14 @@ void defRecordOfClass2(const struct_of_def *sdef, output_struct *output)
     "}\n"
     "TTCN_error(\"Unbound or omitted right operand of %s concatenation.\");\n"
     "}\n\n", name, name, name, name, sdef->dispname);
+  
+  def = mputprintf(def,
+    "%s operator+(null_type) const;\n\n", name);
+  src = mputprintf(src,
+    "%s %s::operator+(null_type) const\n"
+    "{\n"
+    "return *this;\n"
+    "}\n\n", name, name);
 
   /* substr() */
   def = mputprintf(def,
@@ -4726,6 +4734,14 @@ void defRecordOfTemplate2(const struct_of_def *sdef, output_struct *output)
     "return ret_val;\n"
     "}\n\n", name, name, name, name);
   
+  def = mputprintf(def,
+    "%s_template operator+(null_type) const;\n\n", name);
+  src = mputprintf(src,
+    "%s_template %s_template::operator+(null_type) const\n"
+    "{\n"
+    "return *this;\n"
+    "}\n\n", name, name);
+  
   /* indexing operators */
   def = mputprintf(def,
     "%s_template& operator[](int index_value);\n"
diff --git a/compiler2/ttcn3/compiler.y b/compiler2/ttcn3/compiler.y
index 9cb4f35f6ac136b9fc18fe83942a08183719eaba..58f9fa3fee85e1cb8801656a5aaf61718fc2e15a 100644
--- a/compiler2/ttcn3/compiler.y
+++ b/compiler2/ttcn3/compiler.y
@@ -2096,8 +2096,8 @@ optPackageNameList:
 ;
 
 PackageNameList:
-  ',' FreeText
-|  PackageNameList ',' FreeText
+  ',' FreeText { Free($2); }
+|  PackageNameList ',' FreeText { Free($3); }
 ;
 
 ModuleBody:
diff --git a/regression_test/recofOper/TrecofOper.ttcn b/regression_test/recofOper/TrecofOper.ttcn
index 9fb877d4314b1910c38949afc7426f79dd5a0e17..ce0ff3bef192aa848cec2af614487c2c1a812e16 100644
--- a/regression_test/recofOper/TrecofOper.ttcn
+++ b/regression_test/recofOper/TrecofOper.ttcn
@@ -701,7 +701,7 @@ testcase recofEmpty() runs on recofOper_mycomp{
 testcase recofListOperator() runs on recofOper_mycomp{
   var recofOper_myrecof1 x1;
   var recofOper_myrecof1 x2,x3,x4,x5,x6;
-  var recofOper_myrecof1 res1, res2, res3, res4;
+  var recofOper_myrecof1 res1, res2, res3, res4, res5;
   x1:={1,2};
   x2:={1,2};
   x3:={1};
@@ -713,6 +713,7 @@ testcase recofListOperator() runs on recofOper_mycomp{
   res2 := x2 & x3;
   res3 := x2 & x3 & x5;
   res4 := x3 & x4;
+  res5 := x1 & {};
   if (res1 == {1,2,1,2}) {setverdict(pass);}
   else {setverdict(fail);}
   if (res2 == {1,2,1}) {setverdict(pass);}
@@ -721,6 +722,8 @@ testcase recofListOperator() runs on recofOper_mycomp{
   else {setverdict(fail);}
   if (res4 == {1,1,3}) {setverdict(pass);}
   else {setverdict(fail);}
+  if (res5 == {1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
 }
 
 testcase recofRotateOperators() runs on recofOper_mycomp{
diff --git a/regression_test/setofOper/TsetofOper.ttcn b/regression_test/setofOper/TsetofOper.ttcn
index c77dd205295b85c7f89ed791b2b42a5bbab16126..96c3222f8b8fe6fa00a542ca12e93936d47efc9f 100644
--- a/regression_test/setofOper/TsetofOper.ttcn
+++ b/regression_test/setofOper/TsetofOper.ttcn
@@ -729,7 +729,7 @@ testcase setofCompUnbound() runs on setofOper_mycomp{
 testcase setofListOperator() runs on setofOper_mycomp{
   var setofOper_mysetof1 x1:={1,2};
   var setofOper_mysetof1 x2,x3,x4,x5,x6;	//set of basic types
-  var setofOper_mysetof1 res1, res2, res3, res4;
+  var setofOper_mysetof1 res1, res2, res3, res4, res5;
   x2:={ 1, 2 };
   x3:={1};
   x4:={1};
@@ -740,6 +740,7 @@ testcase setofListOperator() runs on setofOper_mycomp{
   res2 := x1 & x3;
   res3 := x2 & x3 & x5;
   res4 := x3 & x4;
+  res5 := x1 & {};
   if (res1 == {1,2,1,2}) {setverdict(pass);}
   else {setverdict(fail);}
   if (res2 == {1,2,1}) {setverdict(pass);}
@@ -748,6 +749,8 @@ testcase setofListOperator() runs on setofOper_mycomp{
   else {setverdict(fail);}
   if (res4 == {1,1,3}) {setverdict(pass);}
   else {setverdict(fail);}
+  if (res5 == {1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
 }
 
 testcase setofRotateOperators() runs on setofOper_mycomp{
diff --git a/regression_test/templateConcat/TemplateConcatRecof.ttcn b/regression_test/templateConcat/TemplateConcatRecof.ttcn
index 8f6cf6ae1656c150ff1c9cddd0f1c411b6fdf52f..b93b6ec75de2d01da412d93e0d5e528e97fd5898 100644
--- a/regression_test/templateConcat/TemplateConcatRecof.ttcn
+++ b/regression_test/templateConcat/TemplateConcatRecof.ttcn
@@ -97,6 +97,8 @@ testcase tc_recof_vt_w_refs_and_literals() runs on CT {
   var template RecOfInt vt_recof4 := ? length(2..2) & { 4, 5 } & * length(3);
   var template RecOfInt vt_recof4_exp := { ?, ?, 4, 5, ?, ?, ? };
   
+  var template RecOfInt vt_recof5 := t_recof_op1 & {};
+  
   if (log2str(vt_recof1) != log2str(vt_recof1_exp)) {
     setverdict(fail, "Expected: ", vt_recof1_exp, ", got: ", vt_recof1);
   }
@@ -109,6 +111,9 @@ testcase tc_recof_vt_w_refs_and_literals() runs on CT {
   else if (log2str(vt_recof4) != log2str(vt_recof4_exp)) {
     setverdict(fail, "Expected: ", vt_recof4_exp, ", got: ", vt_recof4);
   }
+  else if (log2str(vt_recof5) != log2str(t_recof_op1)) {
+    setverdict(fail, "Expected: ", t_recof_op1, ", got: ", vt_recof4);
+  }
   else {
     setverdict(pass);
   }
diff --git a/regression_test/templateConcat/TemplateConcatSetof.ttcn b/regression_test/templateConcat/TemplateConcatSetof.ttcn
index cf9d7121d2aedf1da334a9a75e9f587d1eb11654..b67a51eeae20cd0298e35832ad0627e45f5401e0 100644
--- a/regression_test/templateConcat/TemplateConcatSetof.ttcn
+++ b/regression_test/templateConcat/TemplateConcatSetof.ttcn
@@ -97,6 +97,8 @@ testcase tc_setof_vt_w_refs_and_literals() runs on CT {
   var template SetOfInt vt_setof4 := ? length(2..2) & { 4, 5 } & * length(3);
   var template SetOfInt vt_setof4_exp := { ?, ?, 4, 5, ?, ?, ? };
   
+  var template SetOfInt vt_setof5 := t_setof_op1 & {};
+  
   if (log2str(vt_setof1) != log2str(vt_setof1_exp)) {
     setverdict(fail, "Expected: ", vt_setof1_exp, ", got: ", vt_setof1);
   }
@@ -109,6 +111,9 @@ testcase tc_setof_vt_w_refs_and_literals() runs on CT {
   else if (log2str(vt_setof4) != log2str(vt_setof4_exp)) {
     setverdict(fail, "Expected: ", vt_setof4_exp, ", got: ", vt_setof4);
   }
+  else if (log2str(vt_setof5) != log2str(t_setof_op1)) {
+    setverdict(fail, "Expected: ", t_setof_op1, ", got: ", vt_setof4);
+  }
   else {
     setverdict(pass);
   }