refactor lpush