The program is started in core/manager.h * Load DC++ stuff (create all *Managers) * Generate random default nick * Create nanodc stuff (settings, logger) * Connect hubs * Start input and event threads Input thread reads user input and emits "key pressed" events. Event thread waits for events and calls event handlers. The screen is currently updated from only on thread, which is the event thread. The screen is updated after "window updated" event that is handled by ui::Manager::redraw_screen. redraw_screen locks the screen mutex and calls display::Manager::redraw which actually draws the current window, status bar and stuff on the screen.