przepisane od nowa z hand.c