basic functionality, NOT fully tested
requires:
-minor rewrites here and there,
-comments
-documentation
-additional functionality (light mode, filter, cache)