added support for cameras (should be easy to select between many); did some refactor and exposed camera user interface