proper initialization order