add Device interface and so on, but it's incompletely.