Re-organize more generic interface