implemented insertion