add abstract interfaces