diff --git a/Demos/Demo_IncomingStreams.unity b/Demos/Demo_IncomingStreams.unity
index 294c46f8353f5abfc121fa41165044b1baa013bd..61f3afca54fe43c5e0e4a7b57555a39356725353 100644
--- a/Demos/Demo_IncomingStreams.unity
+++ b/Demos/Demo_IncomingStreams.unity
@@ -134,8 +134,13 @@ MonoBehaviour:
           m_StringArgument: 
           m_BoolArgument: 0
         m_CallState: 2
-      - m_Target: {fileID: 2059534480}
-        m_MethodName: AStreamIsFound
+    m_TypeName: Assets.LSL4Unity.Scripts.StreamEvent, Assembly-CSharp, Version=0.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  onStreamLost:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 193850119}
+        m_MethodName: AStreamGotLost
         m_Mode: 0
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
@@ -147,11 +152,6 @@ MonoBehaviour:
         m_CallState: 2
     m_TypeName: Assets.LSL4Unity.Scripts.StreamEvent, Assembly-CSharp, Version=0.0.0.0,
       Culture=neutral, PublicKeyToken=null
-  onStreamLost:
-    m_PersistentCalls:
-      m_Calls: []
-    m_TypeName: Assets.LSL4Unity.Scripts.StreamEvent, Assembly-CSharp, Version=0.0.0.0,
-      Culture=neutral, PublicKeyToken=null
 --- !u!4 &68353127
 Transform:
   m_ObjectHideFlags: 0
@@ -178,7 +178,7 @@ GameObject:
   - component: {fileID: 193850116}
   - component: {fileID: 193850119}
   m_Layer: 0
-  m_Name: A
+  m_Name: AObjectListeningToAStream
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -191,7 +191,7 @@ Transform:
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 193850114}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: -1, y: 0, z: 0}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 753183517}
@@ -360,8 +360,6 @@ GameObject:
   serializedVersion: 5
   m_Component:
   - component: {fileID: 753183517}
-  - component: {fileID: 753183518}
-  - component: {fileID: 753183516}
   m_Layer: 0
   m_Name: IncomingStreams
   m_TagString: Untagged
@@ -369,24 +367,6 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!114 &753183516
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 753183515}
-  m_Enabled: 0
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 87163fb44bc059c4d99f26b875930ecf, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  moment: 0
-  StreamName: RandomSpehricalData_B
-  StreamType: 3DCoord
-  targetTransform: {fileID: 2059534476}
-  useX: 0
-  useY: 0
-  useZ: 0
 --- !u!4 &753183517
 Transform:
   m_ObjectHideFlags: 0
@@ -398,28 +378,9 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 193850115}
-  - {fileID: 2059534476}
   m_Father: {fileID: 0}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &753183518
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 753183515}
-  m_Enabled: 0
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 87163fb44bc059c4d99f26b875930ecf, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  moment: 0
-  StreamName: RandomSpehricalData_A
-  StreamType: 3DCoord
-  targetTransform: {fileID: 193850115}
-  useX: 0
-  useY: 0
-  useZ: 0
 --- !u!1 &1295183507
 GameObject:
   m_ObjectHideFlags: 0
@@ -483,103 +444,3 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
---- !u!1 &2059534475
-GameObject:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 5
-  m_Component:
-  - component: {fileID: 2059534476}
-  - component: {fileID: 2059534479}
-  - component: {fileID: 2059534478}
-  - component: {fileID: 2059534477}
-  - component: {fileID: 2059534480}
-  m_Layer: 0
-  m_Name: B
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &2059534476
-Transform:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 2059534475}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 1, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_Children: []
-  m_Father: {fileID: 753183517}
-  m_RootOrder: 1
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!23 &2059534477
-MeshRenderer:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 2059534475}
-  m_Enabled: 1
-  m_CastShadows: 1
-  m_ReceiveShadows: 1
-  m_MotionVectors: 1
-  m_LightProbeUsage: 1
-  m_ReflectionProbeUsage: 1
-  m_Materials:
-  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
-  m_StaticBatchInfo:
-    firstSubMesh: 0
-    subMeshCount: 0
-  m_StaticBatchRoot: {fileID: 0}
-  m_ProbeAnchor: {fileID: 0}
-  m_LightProbeVolumeOverride: {fileID: 0}
-  m_ScaleInLightmap: 1
-  m_PreserveUVs: 1
-  m_IgnoreNormalsForChartDetection: 0
-  m_ImportantGI: 0
-  m_SelectedEditorRenderState: 3
-  m_MinimumChartSize: 4
-  m_AutoUVMaxDistance: 0.5
-  m_AutoUVMaxAngle: 89
-  m_LightmapParameters: {fileID: 0}
-  m_SortingLayerID: 0
-  m_SortingOrder: 0
---- !u!136 &2059534478
-CapsuleCollider:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 2059534475}
-  m_Material: {fileID: 0}
-  m_IsTrigger: 0
-  m_Enabled: 1
-  m_Radius: 0.5
-  m_Height: 2
-  m_Direction: 1
-  m_Center: {x: 0, y: 0, z: 0}
---- !u!33 &2059534479
-MeshFilter:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 2059534475}
-  m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
---- !u!114 &2059534480
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 2059534475}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5ba4ed7276e95054fb35c620c2207e28, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  StreamName: RandomSpehricalData_B
-  StreamType: 3DCoord
-  targetTransform: {fileID: 2059534476}
-  useX: 0
-  useY: 1
-  useZ: 0
diff --git a/Scripts/BaseInlet.cs b/Scripts/BaseInlet.cs
index 89f579423da4091f3e54db3237cc7bd828962001..7e2813b1f733fe3b80a6cc43bb72911c695e4bb9 100644
--- a/Scripts/BaseInlet.cs
+++ b/Scripts/BaseInlet.cs
@@ -1,6 +1,8 @@
 using LSL;
 using System;
+using System.Linq;
 using UnityEngine;
+using UnityEngine.Events;
 
 namespace Assets.LSL4Unity.Scripts.AbstractInlets
 {
@@ -14,6 +16,26 @@ namespace Assets.LSL4Unity.Scripts.AbstractInlets
 
         protected int expectedChannels;
 
+        protected Resolver resolver;
+
+        /// <summary>
+        /// Call this method when your inlet implementation got created at runtime
+        /// </summary>
+        protected virtual void registerAndLookUpStream()
+        {
+            resolver = FindObjectOfType<Resolver>();
+
+            resolver.onStreamFound.AddListener(new UnityAction<LSLStreamInfoWrapper>(AStreamIsFound));
+
+            resolver.onStreamLost.AddListener(new UnityAction<LSLStreamInfoWrapper>(AStreamGotLost));
+            
+            if (resolver.knownStreams.Any(isTheExpected))
+            {
+                var stream = resolver.knownStreams.First(isTheExpected);
+                AStreamIsFound(stream);
+            }
+        }
+
         /// <summary>
         /// Callback method for the Resolver gets called each time the resolver found a stream
         /// </summary>
@@ -43,9 +65,12 @@ namespace Assets.LSL4Unity.Scripts.AbstractInlets
             this.enabled = false;
         }
 
-        private bool isTheExpected(LSLStreamInfoWrapper stream)
+        protected virtual bool isTheExpected(LSLStreamInfoWrapper stream)
         {
-            return StreamName.Equals(stream.Name);
+            bool predicate = StreamName.Equals(stream.Name);
+            predicate &= StreamType.Equals(stream.Type);
+
+            return predicate;
         }
 
         protected abstract void pullSamples();
@@ -55,6 +80,7 @@ namespace Assets.LSL4Unity.Scripts.AbstractInlets
             // base implementation may not decide what happens when the stream gets available
             throw new NotImplementedException("Please override this method in a derived class!");
         }
+        
     }
 
     public abstract class InletFloatSamples : ABaseInlet
diff --git a/Scripts/Examples/DemoInletForFloatSamples.cs b/Scripts/Examples/DemoInletForFloatSamples.cs
index 33060f3ee157b2ab9dd35d27a1a980b2d1b036d5..e169da94d4c01b8c5fc6ef26086dab30651346d3 100644
--- a/Scripts/Examples/DemoInletForFloatSamples.cs
+++ b/Scripts/Examples/DemoInletForFloatSamples.cs
@@ -21,8 +21,29 @@ namespace Assets.LSL4Unity.Scripts.Examples {
         public bool useY;
         public bool useZ;
 
+
+        void Start()
+        {
+            // [optional] call this only, if your gameobject hosting this component
+            // got instantiated during runtime
+            
+            // registerAndLookUpStream();
+        }
+
+        protected override bool isTheExpected(LSLStreamInfoWrapper stream)
+        {
+            // the base implementation just checks for stream name and type
+            var predicate = base.isTheExpected(stream);
+            // add a more specific description for your stream here specifying hostname etc.
+            //predicate &= stream.HostName.Equals("Expected Hostname");
+            return predicate;
+        }
+
         /// <summary>
         /// Override this method to implement whatever should happen with the samples...
+        /// IMPORTANT: Avoid heavy processing logic within this method, update a state and use
+        /// coroutines for more complexe processing tasks to distribute processing time over
+        /// several frames
         /// </summary>
         /// <param name="newSample"></param>
         /// <param name="timeStamp"></param>