without unnecessary functions