restructure, add new methods