Add ARP and refactor