abstract some interfaces