Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 31751) +++ trunk/src/gui_act.c (revision 31752) @@ -928,7 +928,14 @@ } pcb_layergrp_inhibit_inc(); - g = pcb_get_grp_new_misc(PCB); + + if (first) + g = pcb_get_grp_new_raw(pcb, 1); + else if (last) + g = pcb_get_grp_new_raw(pcb, 0); + else + g = pcb_get_grp_new_misc(pcb); + if (g != NULL) { rnd_layer_id_t lid; Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 31751) +++ trunk/src/layer_grp.c (revision 31752) @@ -373,12 +373,18 @@ static pcb_layergrp_t *pcb_get_grp_new_intern_insert(pcb_board_t *pcb, int room, int bl, int omit_substrate) { + int n; pcb_layer_stack_t *stack = &pcb->LayerGroups; + if (bl < stack->len-1) + for(n = stack->len-1; n >= bl; n--) + pcb_layergrp_move_onto(pcb, n+room, n); + stack->len += room; stack->grp[bl].name = rnd_strdup("Intern"); stack->grp[bl].ltype = PCB_LYT_INTERN | PCB_LYT_COPPER; + stack->grp[bl].len = 0; pcb_layergrp_setup(&stack->grp[bl], pcb); bl++; if (!omit_substrate) @@ -447,11 +453,11 @@ return g; } -pcb_layergrp_t *pcb_get_grp_new_raw(pcb_board_t *pcb) +pcb_layergrp_t *pcb_get_grp_new_raw(pcb_board_t *pcb, int prepend) { pcb_layergrp_t *g; inhibit_notify++; - g = pcb_get_grp_new_intern_insert(pcb, 1, pcb->LayerGroups.len, 1); + g = pcb_get_grp_new_intern_insert(pcb, 1, prepend ? 0 : pcb->LayerGroups.len, 1); inhibit_notify--; NOTIFY(pcb); return g; Index: trunk/src/layer_grp.h =================================================================== --- trunk/src/layer_grp.h (revision 31751) +++ trunk/src/layer_grp.h (revision 31752) @@ -232,8 +232,9 @@ pcb_layergrp_t *pcb_get_grp_new_intern(pcb_board_t *pcb, int intern_id); pcb_layergrp_t *pcb_get_grp_new_misc(pcb_board_t *pcb); -/* append a layer group without any smart side effects - use only from io loaders */ -pcb_layergrp_t *pcb_get_grp_new_raw(pcb_board_t *pcb); +/* prepend or append a layer group without any smart side effects - used + from io loaders */ +pcb_layergrp_t *pcb_get_grp_new_raw(pcb_board_t *pcb, rnd_bool prepend); /* ugly hack: remove the extra substrate we added after the outline layer */ void pcb_layergrp_fix_old_outline(pcb_board_t *pcb); Index: trunk/src_plugins/io_tedax/stackup.c =================================================================== --- trunk/src_plugins/io_tedax/stackup.c (revision 31751) +++ trunk/src_plugins/io_tedax/stackup.c (revision 31752) @@ -353,7 +353,7 @@ if (grp == NULL) { char *nn; - grp = pcb_get_grp_new_raw(pcb); + grp = pcb_get_grp_new_raw(pcb, 0); grp->name = rnd_strdup(name); nn = rnd_strdup(name); htsp_set(&ctx->n2g, nn, grp);