move all logic to abstract Proxy