static void output_oneway (const struct oneway_spec *, struct oneway_workspace *ws);
 static void run_oneway (const struct oneway_spec *cmd, struct casereader *input, const struct dataset *ds);
 
+
+static void
+destroy_coeff_list (struct contrasts_node *coeff_list)
+{
+  struct coeff_node *cn = NULL;
+  struct coeff_node *cnx = NULL;
+  struct ll_list *cl = &coeff_list->coefficient_list;
+  
+  ll_for_each_safe (cn, cnx, struct coeff_node, ll, cl)
+    {
+      free (cn);
+    }
+  
+  free (coeff_list);
+}
+
 static void
 oneway_cleanup (struct oneway_spec *cmd)
 {
   struct contrasts_node *coeff_next  = NULL;
   ll_for_each_safe (coeff_list, coeff_next, struct contrasts_node, ll, &cmd->contrast_list)
     {
-      struct coeff_node *cn = NULL;
-      struct coeff_node *cnx = NULL;
-      struct ll_list *cl = &coeff_list->coefficient_list;
-
-      ll_for_each_safe (cn, cnx, struct coeff_node, ll, cl)
-       {
-         free (cn);
-       }
-
-      free (coeff_list);
+      destroy_coeff_list (coeff_list);
     }
 
   free (cmd->posthoc);
                }
              else
                {
+                 destroy_coeff_list (cl);
                  lex_error (lexer, NULL);
                  goto error;
                }
               i, ll_count (cl), ws->actual_number_of_groups);
 
          ll_remove (&coeff_list->ll);
+         destroy_coeff_list (coeff_list);
          continue;
        }