Revised and clean-up firstOn()