now using dynamically allocated api dispatch tables