some major rework