many changes, see readme