interface fairly drastically changed, next comes implementation