update

interface and implementation class separated