diff --git a/Prefab/VA.prefab b/Prefab/VA.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..373a6f259c50c9e96da9776401502e62f985593f
Binary files /dev/null and b/Prefab/VA.prefab differ
diff --git a/Prefab/[CameraRig].prefab b/Prefab/[CameraRig].prefab
new file mode 100644
index 0000000000000000000000000000000000000000..e5912494f4b914f1584a37dd1c1ca44faa060aca
Binary files /dev/null and b/Prefab/[CameraRig].prefab differ
diff --git a/VAUListener.cs b/VAUListener.cs
index fa4beeb8473991cc3ab7d035797803269f8e519c..c9cd175d164c208fe5c7a1f4be29ed691e14af91 100644
--- a/VAUListener.cs
+++ b/VAUListener.cs
@@ -1,5 +1,5 @@
 using UnityEngine;
-using System;
+using System.Linq;
 using System.Collections;
 using VA;
 
@@ -14,8 +14,8 @@ public class VAUListener : MonoBehaviour {
     private Quaternion q;
     private Transform t;
     private AudioReverbZone[] reverbZones;
-    private AudioReverbZone[] shadowReverbZones;
-    private double currentArtificialReverberationTime = 1;
+    private float currentArtificialReverberationTime = 0f;
+    private float shadowReverbTime;
     
     public int ID
     {
@@ -35,7 +35,8 @@ public class VAUListener : MonoBehaviour {
         Debug.Log("[VAU]" + listenername + " created");
         _VA.SetListenerHRIRDataset(Listener, VAUAdapter.DefaultHRIR);
         SetListenerPositionOrientation();
-        _VA.SetArtificalReverbarationTime(VAAudioRenderer, 2);
+        _VA.SetArtificalReverbarationTime(VAAudioRenderer, 2.0f);
+        reverbZones = FindObjectsOfType(typeof(AudioReverbZone)) as AudioReverbZone[];
     }
 
     void OnEnable()
@@ -66,42 +67,39 @@ public class VAUListener : MonoBehaviour {
 
     void SetActiveReverbZones()
     {
-        double actReverbTime = currentArtificialReverberationTime;
-        reverbZones = FindObjectsOfType(typeof(AudioReverbZone)) as AudioReverbZone[];
-        if (reverbZones == shadowReverbZones)
-            return;
-
         if (reverbZones == null)
-        {
-            if (actReverbTime != currentArtificialReverberationTime)
-                _VA.SetArtificalReverbarationTime(VAAudioRenderer, actReverbTime);
             return;
-        }
 
-        shadowReverbZones = reverbZones;
+        float actReverbTime = 0f;
         int i = 0;
         foreach (AudioReverbZone reverbZone in reverbZones)
         {
-            float actdistance = Vector3.Distance(reverbZone.transform.position, gameObject.transform.position);
-            if (actdistance < reverbZone.maxDistance)
+            if (i >= maxreverbZones)
+                break;
+            float actDistance = Vector3.Distance(reverbZone.transform.position, gameObject.transform.position);
+            if ((actDistance < reverbZone.maxDistance))
             {
-                if (i <= maxreverbZones)
+                if (actDistance > reverbZone.minDistance)
                 {
-                    actReverbTime += reverbZone.decayTime;
-                    i++;
+                    actReverbTime += reverbZone.decayTime * (actDistance - reverbZone.minDistance) / (reverbZone.maxDistance - reverbZone.minDistance);
                 }
-                if (actdistance > reverbZone.minDistance)
+                else
                 {
-
+                    actReverbTime += reverbZone.decayTime;
                 }
+                i++;
             }
         }
+        if (shadowReverbTime == actReverbTime)
+            return;
+
+        shadowReverbTime = actReverbTime;
 
-        if ( i > 0)
+        if (i > 0)
             actReverbTime /= i;
+        
+        _VA.SetArtificalReverbarationTime(VAAudioRenderer, actReverbTime);
 
-        if( actReverbTime != currentArtificialReverberationTime)
-            _VA.SetArtificalReverbarationTime(VAAudioRenderer, actReverbTime);
     }
 
     void OnListenerAuralizationModeChanged(string AuraMode)