refactor + add LPO
combine SL and LPO