may be can reduce code sometime later