Use abstract implementation to replace the AIO