kpm caching

also uses same httpclient repeatedly for the same source