Refactored to use System.Data-like interfaces.