added guard and required includes