I moved my previous Direct Input code over to my new project, making a few ultimately minor changes in the process. I also switched from using an abstracted collection class to just exposing std::vector directly. I do still have a problem with providing both a const and non-const version of the functions that return collections, however. Normally I just return a const reference or a non-const reference, but in this case, the container still needs to remain const in both versions, but the elements need to be non-const in the non-const version of the function. I might want to write some form of abstraction anyway, and will likely be tempted to reintroduce the container agnosticism, supporting any container that provides bidirectional iterators. For now, I just return a non-const reference, and will just depend on my responsibility to not actually modify the container, just elements.