implemented using basic class constructs....not very happy about this