use strategy pattern, offset strategy as fallback