attempt #1
attempt #2
added easy client interface and port map
hiding some module specifics