some stuff added, some cleanup, some stuff yet to clean