some ideas and interfaces