Index: trunk/src/extobj.c =================================================================== --- trunk/src/extobj.c (revision 28896) +++ trunk/src/extobj.c (revision 28897) @@ -122,8 +122,7 @@ TODO("copy layers"); - if (subc_copy_from != NULL) - pcb_attribute_copy_all(&sc->Attributes, &subc_copy_from->Attributes); + pcb_subc_copy_meta(sc, subc_copy_from); pcb_undo_add_obj_to_create(PCB_OBJ_SUBC, sc, sc, sc); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 28896) +++ trunk/src/obj_subc.c (revision 28897) @@ -772,7 +772,7 @@ dst->ID = src->ID; \ } while(0) -static pcb_subc_t *pcb_subc_copy_meta(pcb_subc_t *dst, pcb_subc_t *src) +pcb_subc_t *pcb_subc_copy_meta(pcb_subc_t *dst, pcb_subc_t *src) { if (dst == NULL) return NULL; Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 28896) +++ trunk/src/obj_subc.h (revision 28897) @@ -176,6 +176,9 @@ pcb_layer_t *pcb_subc_layer_create(pcb_subc_t *sc, const char *name, pcb_layer_type_t type, pcb_layer_combining_t comb, int stack_offs, const char *purpose); +/* Copy non-layer, non-geometrical metadata (e.g. attributes) */ +pcb_subc_t *pcb_subc_copy_meta(pcb_subc_t *dst, pcb_subc_t *src); + pcb_subc_t *pcb_subc_dup_at(pcb_board_t *pcb, pcb_data_t *dst, pcb_subc_t *src, pcb_coord_t dx, pcb_coord_t dy, pcb_bool keep_ids); /* Replace dst with a copy of src in place (preserving location and orientation