added some ideas; heavy restructuring