changed the interface, finished the general struct