two steps:
without null handling
with null handling