remove dynamic loading, add callback