diff --git a/compiler2/Type_chk.cc b/compiler2/Type_chk.cc
index 5e0c32a48a7676c396e05a102202d127a66bf877..f4dd0c7576bf7a96ed324a2f363cd3b7b5591859 100644
--- a/compiler2/Type_chk.cc
+++ b/compiler2/Type_chk.cc
@@ -5541,7 +5541,6 @@ bool Type::chk_this_template_generic(Template *t, namedbool incomplete_allowed,
       t->error("Generic wildcard `%s' cannot be used for signature `%s'",
                t->get_templatetype_str(), type->get_fullname().c_str());
     break;}
-  case Ttcn::Template::VALUE_LIST_ALL_FROM:
   case Ttcn::Template::ALL_FROM: {
     Ttcn::Template *af = t->get_all_from();
     switch (af->get_templatetype()) {
diff --git a/compiler2/Value.cc b/compiler2/Value.cc
index 587800c6ca7701826e5c394b52d3ad0151cbd2e6..58a44ce072cbf5985f0f6c2e70db5df003b2d695 100644
--- a/compiler2/Value.cc
+++ b/compiler2/Value.cc
@@ -10331,7 +10331,6 @@ error:
       self_ref |= (ass == lhs);
       break; }
     case Ttcn::Template::ALL_FROM:
-    case Ttcn::Template::VALUE_LIST_ALL_FROM:
       self_ref |= chk_expr_self_ref_templ(t->get_all_from(), lhs);
       break;
     case Ttcn::Template::TEMPLATE_LIST:
diff --git a/compiler2/subtype.cc b/compiler2/subtype.cc
index 322aaa6bbae7136c5ccce8e32f1252b8c4cf2faf..299f01a7681c1bae5ea0bc1ab16a4d9aa1457780 100644
--- a/compiler2/subtype.cc
+++ b/compiler2/subtype.cc
@@ -1951,7 +1951,6 @@ void SubType::chk_this_template(Template *templ)
     /* Should be canonical before */
     break;
   case Template::ALL_FROM:
-  case Template::VALUE_LIST_ALL_FROM:
   case Template::DECODE_MATCH:
   case Template::TEMPLATE_CONCAT:
     break;
diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc
index d39f5e771a9b7a714697e85e1639de4efd212b52..8ee30a2e97c39b0e8e147909809bdd15641f4207 100644
--- a/compiler2/ttcn3/AST_ttcn3.cc
+++ b/compiler2/ttcn3/AST_ttcn3.cc
@@ -8285,7 +8285,6 @@ namespace Ttcn {
       break; }
 
     case Template::ALL_FROM:
-    case Template::VALUE_LIST_ALL_FROM:
       FATAL_ERROR("should have been flattened");
       break;
     case Template::SUPERSET_MATCH:
diff --git a/compiler2/ttcn3/TtcnTemplate.cc b/compiler2/ttcn3/TtcnTemplate.cc
index f84a83b9dbfb605d48d8f4373b0d09a6cbd43bef..f5335c0064ec7059a1592c36e08616db8fdb1784 100644
--- a/compiler2/ttcn3/TtcnTemplate.cc
+++ b/compiler2/ttcn3/TtcnTemplate.cc
@@ -63,7 +63,6 @@ namespace Ttcn {
       u.invoke.ap_list = p.u.invoke.ap_list ? p.u.invoke.ap_list->clone() : 0;
       break;
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       u.all_from = p.u.all_from->clone();
       break;
     case TEMPLATE_LIST:
@@ -137,7 +136,6 @@ namespace Ttcn {
       delete u.templates;
       break;
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       delete u.all_from;
       break;
     case NAMED_TEMPLATE_LIST:
@@ -431,18 +429,6 @@ namespace Ttcn {
     // calling set_lowerid_to_ref is too soon (my_scope is not set yet)
   }
 
-  Template::Template(templatetype_t tt, Template *t)
-  : GovernedSimple(S_TEMPLATE)
-  , templatetype(VALUE_LIST_ALL_FROM), my_governor(0), length_restriction(0)
-  , is_ifpresent(false), specific_value_checked(false)
-  , has_permutation(false), flattened(true), base_template(0)
-  {
-    if (tt != VALUE_LIST_ALL_FROM) FATAL_ERROR("Template::Template()");
-    u.all_from = t->u.all_from; // take it over
-    t->u.all_from = NULL;
-    delete t;
-  }
-
   Template::Template(NamedTemplates *nts)
     : GovernedSimple(S_TEMPLATE),
       templatetype(NAMED_TEMPLATE_LIST), my_governor(0), length_restriction(0),
@@ -574,7 +560,6 @@ namespace Ttcn {
       u.named_templates->set_fullname(p_fullname);
       break;
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       u.all_from->set_fullname(p_fullname);
       break;
     case VALUE_LIST:
@@ -636,7 +621,6 @@ namespace Ttcn {
       if(u.invoke.ap_list) u.invoke.ap_list->set_my_scope(p_scope);
       break;
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       u.all_from->set_my_scope(p_scope);
       break;
     case TEMPLATE_LIST:
@@ -930,7 +914,6 @@ namespace Ttcn {
     case TEMPLATE_INVOKE:
       return "template returning invoke";
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       return "template with 'all from'";
     case TEMPLATE_LIST:
       return "value list notation";
@@ -1353,8 +1336,7 @@ namespace Ttcn {
 
   Template *Template::get_all_from() const
   {
-    if (templatetype != ALL_FROM
-      &&templatetype != VALUE_LIST_ALL_FROM)
+    if (templatetype != ALL_FROM)
       FATAL_ERROR("Template::get_all_from()");
     return u.all_from;
   }
@@ -2713,24 +2695,6 @@ end:
         Template *& t = u.templates->get_t_byIndex(i);
         // the element in the (,,,)
         switch (t->templatetype) {
-        case VALUE_LIST_ALL_FROM: {
-          // the all from from something like subset(1, (all from...), 99)
-          // value list: one out of many possible values^^^^^^^^^^^^^
-          Location tloc(*t); // save the location info
-          string tname(t->get_fullname());
-          Templates *ha = harbinger(t, from_permutation, true);
-          if (ha) {
-            // Don't touch t from now on, it might have been deleted!
-            Template *qq = new Template(VALUE_LIST, ha);
-            qq->set_location(tloc);
-            qq->set_fullname(tname + ".all_from");
-            new_templates->add_t(qq);
-          }
-          else {
-            new_templates->add_t(t); // transfer it unchanged
-            flattened = false;
-          }
-          break; }
 
         case ALL_FROM: { // subset(1, all from ..., 99)
           // some number of elements--^^^^^^^^^^^^
@@ -2778,16 +2742,6 @@ end:
 
       break; }
 
-    case VALUE_LIST_ALL_FROM: {
-      Templates *new_templates = harbinger(this, from_permutation, false);
-      if (new_templates) {
-        delete u.all_from;
-        // now we can change the type
-        templatetype = VALUE_LIST;
-        u.templates = new_templates;
-      }
-      break; }
-    
     case TEMPLATE_ERROR: case TEMPLATE_NOTUSED:
     case OMIT_VALUE:     case ANY_VALUE: case ANY_OR_OMIT:
     case SPECIFIC_VALUE:
@@ -3285,9 +3239,6 @@ end:
     case NAMED_TEMPLATE_LIST:
       str = generate_code_init_se(str, name);
       break;
-    case VALUE_LIST_ALL_FROM:
-      str = generate_code_init_all_from_list(str, name);
-      break;
     case ALL_FROM:
       str = generate_code_init_all_from(str, name);
       break;
@@ -3594,7 +3545,6 @@ end:
   {
     switch (templatetype) {
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       return false;
     case TEMPLATE_ERROR: /**< erroneous template */
     case TEMPLATE_NOTUSED: /**< not used symbol (-) */
@@ -4181,52 +4131,6 @@ compile_time:
     return str;
   }
 
-  char *Template::generate_code_init_all_from_list(char *str, const char *name)
-  {
-    // FIXME: this is the third instance
-    expression_struct expr;
-    Code::init_expr(&expr);
-    switch (u.all_from->templatetype) {
-    case SPECIFIC_VALUE: {
-      Value *spec = u.all_from->u.specific_value;
-      switch (spec->get_valuetype()) {
-      case Common::Value::V_REFD: {
-        Common::Reference  *ref = spec->get_reference();
-        Ref_pard* ref_pard = dynamic_cast<Ref_pard*>(ref);
-        if (ref_pard)
-          ref_pard->generate_code_cached(&expr);
-        else
-          ref->generate_code(&expr);
-        break; }
-      default:
-        FATAL_ERROR("vtype %d", spec->get_valuetype());
-        break;
-      }
-      break; }
-
-    default:
-      FATAL_ERROR("ttype %d", u.all_from->templatetype);
-      break;
-    }
-
-    if (expr.preamble)
-     str = mputstr(str, expr.preamble);
-    
-    str = mputprintf(str,
-      "%s.set_type(VALUE_LIST, %s.n_elem());\n"
-      "for (int i_i = 0, i_lim = %s.n_elem(); i_i < i_lim; ++i_i) {\n",
-      name,
-      expr.expr,
-      expr.expr);
-    string embedded_name(name);
-    embedded_name += ".list_item(i_i)";
-    str = generate_code_init_all_from(str, embedded_name.c_str());
-    str = mputstrn(str, "}\n", 2);
-
-    Code::free_expr(&expr);
-    return str;
-  }
-
   char *Template::generate_code_init_se(char *str, const char *name)
   { // named template list
     Type *type = my_governor->get_type_refd_last();
@@ -4320,16 +4224,13 @@ compile_time:
           Code::free_expr(&expr);
         }
         else {
-          str_set_type = mputstr (str_set_type, ass->get_id().get_name().c_str());
-          if (subrefs) {
-            expression_struct expr;
-            Code::init_expr(&expr);
+          expression_struct expr;
+          Code::init_expr(&expr);
 
-            subrefs->generate_code(&expr, ass);
-            str_set_type = mputprintf(str_set_type, "%s", expr.expr);
+          ref->generate_code(&expr);
+          str_set_type = mputprintf(str_set_type, "%s", expr.expr);
 
-            Code::free_expr(&expr);
-          }
+          Code::free_expr(&expr);
         }
         
         switch(ass->get_asstype()) {
@@ -4370,8 +4271,6 @@ compile_time:
       for (size_t vi = 0; vi < nof_ts; ++vi) {
         Template *t = u.templates->get_t_byIndex(vi);
         switch (t->templatetype) {
-        case VALUE_LIST_ALL_FROM:
-          FATAL_ERROR("VALUE_LIST_ALL_FROM not handled");
         case ALL_FROM: {
           expression_struct expr;
           Code::init_expr(&expr);
@@ -4648,9 +4547,6 @@ compile_time:
           shifty += ".n_elem() /* 3442 */";
           Code::free_expr(&expr);
           break; }
-        case VALUE_LIST_ALL_FROM:
-          FATAL_ERROR("Not possible");
-          break; // not reached
 
         default:
           if (t->needs_temp_ref()) {
@@ -4998,7 +4894,6 @@ compile_time:
     case NAMED_TEMPLATE_LIST:
       return u.named_templates->get_nof_nts() > 1;
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       return false;
     case VALUE_LIST:
     case COMPLEMENTED_LIST:
@@ -5069,7 +4964,6 @@ compile_time:
     case DECODE_MATCH:
       return false;
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       return false;
     case TEMPLATE_CONCAT:
       return u.concat.op1->has_single_expr() && u.concat.op2->has_single_expr();
@@ -5222,7 +5116,6 @@ compile_time:
       u.pstring->dump(level+1);
       break;
     case ALL_FROM:
-    case VALUE_LIST_ALL_FROM:
       u.all_from->dump(level+1);
       break;
     case DECODE_MATCH:
diff --git a/compiler2/ttcn3/TtcnTemplate.hh b/compiler2/ttcn3/TtcnTemplate.hh
index b55d19fda53c8d80d031c3691b08983b1afee3f6..6f664fe835c07d754dd953607c64405844994814 100644
--- a/compiler2/ttcn3/TtcnTemplate.hh
+++ b/compiler2/ttcn3/TtcnTemplate.hh
@@ -63,7 +63,6 @@ namespace Ttcn {
       SUBSET_MATCH, /**< subset match */
       PERMUTATION_MATCH, /**< permutation match */
       ALL_FROM, /**< "all from" as part of a larger list e.g. permutation, superset, subset, etc. */
-      VALUE_LIST_ALL_FROM, /**< "all from" in a value list, itself in a larger list */
       BSTR_PATTERN, /**< bitstring pattern */
       HSTR_PATTERN, /**< hexstring pattern */
       OSTR_PATTERN, /**< octetstring pattern */
@@ -196,11 +195,6 @@ namespace Ttcn {
     /** Constructor for ALL_FROM */
     Template(Template*);
 
-    /** Constructor for VALUE_LIST_ALL_FROM
-     *  Takes over the innards of \a t, then deletes it.
-     *  @pre tt == VALUE_LIST_ALL_FROM */
-    Template(templatetype_t tt, Template *t);
-
     /** Constructor for NAMED_TEMPLATE_LIST */
     Template(NamedTemplates *nts);
 
diff --git a/compiler2/ttcn3/compiler.y b/compiler2/ttcn3/compiler.y
index f6354285949eb3765f2e46c0d8c112c9dba3ecbd..704b90ccb9ba53ed6362f207f443e72648856d6a 100644
--- a/compiler2/ttcn3/compiler.y
+++ b/compiler2/ttcn3/compiler.y
@@ -1866,7 +1866,7 @@ optDecodedModifier
 %left '*' '/' ModKeyword RemKeyword
 %left UnarySign
 
-%expect 66
+%expect 65
 
 %start GrammarRoot
 
@@ -3706,11 +3706,6 @@ MatchingSymbol: // 116 is a Template*
     $$ = new Template(Template::SUPERSET_MATCH, $1);
     $$->set_location(infile, @$);
   }
-| '(' AllElementsFrom ')'
-  {
-    $$ = new Template(Template::VALUE_LIST_ALL_FROM, $2);
-    $$->set_location(infile, @$);
-  }
 ;
 
 optExtraMatchingAttributes: // [117]