separation of gui/io