można by uprościć te warunki + wydzielić zduplikowany kod