Sorry for the late of the answer I were at University all the day. BMidiPort can acces to all BMidiEndpoint derived class because when you launch MidiKeyboard that publish an Input and an Output they can be accessed through a BMidiPort. A BMidiPort publish a BMidiLocalProducer (named "MidiPortGLue(out)") and a BMidiPortConsumer (named "MidiPortGlue(in)") I think that last class just call the correct function of BMidi when data arrive. That can be see in Patchbay. When you call BMidiPort->Open("/dev/midi/sblive/1") and there are a BMidiProducer and/or BMidiConsumer with the same name BMidiPort connect each other for a good connection. And the last point BMidiPort don't think about hardware port or not because when you lauch MidiKeyboard with an hardware port publish "by" the sound card in /dev/midi you connect the soundcard with an external synth you can play it without pushing key on the synth but in using your mouse on the MidiKeyboard app. I know that very hard to understand my english today I'm very tired. Please accept my apologize. A+ Jerome