diff --git a/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.cpp b/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.cpp
index 8abe1518..db2bf9d5 100644
--- a/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.cpp
+++ b/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.cpp
@@ -1,11 +1,11 @@
 #include "aap/core/aap_midi2_helper.h"
 #include "AAPMidiEventTranslator.h"
 
-aap::AAPMidiEventTranslator::AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize, int32_t initialMidiProtocol) :
+aap::AAPMidiEventTranslator::AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize, int32_t initialMidiTransportProtocol) :
         instance(instance),
         midi_buffer_size(midiBufferSize),
         conversion_helper_buffer_size(AAP_MAX_EXTENSION_URI_SIZE + AAP_MAX_EXTENSION_DATA_SIZE + 16),
-        receiver_midi_protocol(initialMidiProtocol) {
+        receiver_midi_transport_protocol(initialMidiTransportProtocol) {
     translation_buffer = (uint8_t*) calloc(1, midi_buffer_size);
     conversion_helper_buffer = (uint8_t*) calloc(1, conversion_helper_buffer_size);
 }
@@ -131,14 +131,14 @@ size_t aap::AAPMidiEventTranslator::translateMidiBufferIfNeeded(uint8_t* bytes,
     //  https://issuetracker.google.com/issues/227690391
     auto protocol = detectEndpointConfigurationMessage(bytes, offset, length);
     if (protocol != 0) {
-        receiver_midi_protocol = protocol;
+        receiver_midi_transport_protocol = protocol;
         // Do not process the rest, it should contain only the Stream Configuration message
         //  (Not an official standard requirement, but the legacy Set New Protocol message was
         //  defined that there must be some rational wait time until the next messages.)
         return 0;
     }
 
-    if (receiver_midi_protocol != CMIDI2_PROTOCOL_TYPE_MIDI2) {
+    if (receiver_midi_transport_protocol != CMIDI2_PROTOCOL_TYPE_MIDI2) {
         // It receives MIDI1 bytestream. We translate to MIDI2 UMPs.
         cmidi2_midi_conversion_context context;
         cmidi2_midi_conversion_context_initialize(&context);
diff --git a/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.h b/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.h
index da49ed89..1268d052 100644
--- a/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.h
+++ b/androidaudioplugin-manager/src/main/cpp/AAPMidiEventTranslator.h
@@ -20,13 +20,13 @@ namespace aap {
         int32_t conversion_helper_buffer_size;
 
         // MIDI protocol type of the messages it receives via JNI
-        int32_t receiver_midi_protocol;
+        int32_t receiver_midi_transport_protocol;
         int32_t current_mapping_policy{AAP_PARAMETERS_MAPPING_POLICY_NONE};
 
         int32_t detectEndpointConfigurationMessage(uint8_t* bytes, size_t offset, size_t length);
 
     public:
-        explicit AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize = AAP_MANAGER_MIDI_BUFFER_SIZE, int32_t initialMidiProtocol = CMIDI2_PROTOCOL_TYPE_MIDI2);
+        explicit AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize = AAP_MANAGER_MIDI_BUFFER_SIZE, int32_t initialMidiTransportProtocol = CMIDI2_PROTOCOL_TYPE_MIDI2);
         ~AAPMidiEventTranslator();
 
         void setPlugin(RemotePluginInstance* pluginInstance);
diff --git a/androidaudioplugin-manager/src/main/cpp/AudioDeviceManager.h b/androidaudioplugin-manager/src/main/cpp/AudioDeviceManager.h
index ee71b92b..a34ee0fe 100644
--- a/androidaudioplugin-manager/src/main/cpp/AudioDeviceManager.h
+++ b/androidaudioplugin-manager/src/main/cpp/AudioDeviceManager.h
@@ -12,8 +12,8 @@ namespace aap {
         // This needs to be implemented for each platform
         static AudioDeviceManager* getInstance();
 
-        virtual AudioDeviceIn* openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
-        virtual AudioDeviceOut* openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
+        virtual AudioDeviceIn* ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
+        virtual AudioDeviceOut* ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
     };
 }
 
diff --git a/androidaudioplugin-manager/src/main/cpp/AudioGraph.cpp b/androidaudioplugin-manager/src/main/cpp/AudioGraph.cpp
index 2b1aee50..ed77051e 100644
--- a/androidaudioplugin-manager/src/main/cpp/AudioGraph.cpp
+++ b/androidaudioplugin-manager/src/main/cpp/AudioGraph.cpp
@@ -68,8 +68,12 @@ void aap::SimpleLinearAudioGraph::pauseProcessing() {
 
 aap::SimpleLinearAudioGraph::SimpleLinearAudioGraph(int32_t sampleRate, uint32_t framesPerCallback, int32_t channelsInAudioBus) :
         AudioGraph(sampleRate, framesPerCallback, channelsInAudioBus),
-        input(this, AudioDeviceManager::getInstance()->openDefaultInput(sampleRate, framesPerCallback, channelsInAudioBus)),
-        output(this, AudioDeviceManager::getInstance()->openDefaultOutput(sampleRate, framesPerCallback, channelsInAudioBus)),
+        input(this, AudioDeviceManager::getInstance()->ensureDefaultInputOpened(sampleRate,
+                                                                                framesPerCallback,
+                                                                                channelsInAudioBus)),
+        output(this, AudioDeviceManager::getInstance()->ensureDefaultOutputOpened(sampleRate,
+                                                                                  framesPerCallback,
+                                                                                  channelsInAudioBus)),
         plugin(this, nullptr),
         audio_data(this),
         midi_input(this, nullptr, sampleRate, framesPerCallback, CMIDI2_PROTOCOL_TYPE_MIDI2, AAP_PLUGIN_PLAYER_DEFAULT_MIDI_RING_BUFFER_SIZE),
diff --git a/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.cpp b/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.cpp
index 4f6d6174..5ab671f7 100644
--- a/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.cpp
+++ b/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.cpp
@@ -87,18 +87,16 @@ namespace aap {
 //--------
 
 aap::AudioDeviceIn *
-aap::OboeAudioDeviceManager::openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
-    // FIXME: this should not be created twice
-    //assert(input == nullptr);
-    input = std::make_shared<OboeAudioDeviceIn>(sampleRate, framesPerCallback, numChannels);
+aap::OboeAudioDeviceManager::ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
+    if (input == nullptr)
+        input = std::make_shared<OboeAudioDeviceIn>(sampleRate, framesPerCallback, numChannels);
     return input.get();
 }
 
 aap::AudioDeviceOut *
-aap::OboeAudioDeviceManager::openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
-    // FIXME: this should not be created twice
-    //assert(output == nullptr);
-    output = std::make_shared<OboeAudioDeviceOut>(sampleRate, framesPerCallback, numChannels);
+aap::OboeAudioDeviceManager::ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
+    if (output == nullptr)
+        output = std::make_shared<OboeAudioDeviceOut>(sampleRate, framesPerCallback, numChannels);
     return output.get();
 }
 
diff --git a/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.h b/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.h
index d0f36704..740548dc 100644
--- a/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.h
+++ b/androidaudioplugin-manager/src/main/cpp/OboeAudioDeviceManager.h
@@ -10,15 +10,15 @@ namespace aap {
     class OboeAudioDeviceOut;
 
     class OboeAudioDeviceManager : public AudioDeviceManager {
-        uint32_t frames_per_callback;
+        uint32_t frames_per_callback{};
         std::shared_ptr<OboeAudioDeviceIn> input{nullptr};
         std::shared_ptr<OboeAudioDeviceOut> output{nullptr};
 
     public:
-        OboeAudioDeviceManager() {}
-        AudioDeviceIn * openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;
+        OboeAudioDeviceManager() = default;
+        AudioDeviceIn * ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;
 
-        AudioDeviceOut * openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;
+        AudioDeviceOut * ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;
     };
 }
 
diff --git a/androidaudioplugin-manager/src/main/cpp/VirtualAudioDeviceManager.h b/androidaudioplugin-manager/src/main/cpp/VirtualAudioDeviceManager.h
index e0a07e90..f4430496 100644
--- a/androidaudioplugin-manager/src/main/cpp/VirtualAudioDeviceManager.h
+++ b/androidaudioplugin-manager/src/main/cpp/VirtualAudioDeviceManager.h
@@ -50,8 +50,8 @@ namespace aap {
                   output(std::make_shared<VirtualAudioDeviceOut>()) {
         }
 
-        AudioDeviceIn * openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return input.get(); }
-        AudioDeviceOut * openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return output.get(); }
+        AudioDeviceIn * ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return input.get(); }
+        AudioDeviceOut * ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return output.get(); }
     };
 
 }