whatever
last working version, slow needs caching and async