change architecture and interfaces
add internal.h