Fixed socket reconnecting & Switched to interfaces instead of abstract classes