diff --git a/matlab/VA_example_outdoor_acoustics.m b/matlab/VA_example_outdoor_acoustics.m
new file mode 100644
index 0000000000000000000000000000000000000000..28e3bdcc371ca62a87ba1bb7152989df492176da
--- /dev/null
+++ b/matlab/VA_example_outdoor_acoustics.m
@@ -0,0 +1,98 @@
+%% VA offline simulation/auralization example for an outdoor noise scenario
+
+% Requires VA to run with a virtual audio device that can be triggered by
+% the user. Also the generic path prototype rendering module(s) has to record the output
+% to hard drive.
+
+
+%% Connect and set up simple scene
+va = VA( 'localhost' );
+
+c = va.get_homogeneous_medium_sound_speed();
+f = ita_ANSI_center_frequencies;
+
+L = va.create_sound_receiver( 'VA_Listener' );
+receiver_pos = [ 2 1.7 0 ]; % OpenGL coordinates
+va.set_sound_receiver_position( L, receiver_pos )
+H = va.create_directivity_from_file( '$(DefaultHRIR)' );
+va.set_sound_receiver_directivity( L, H );
+
+S = va.create_sound_source( 'VA_Source' );
+X = va.create_signal_source_buffer_from_file( '$(DemoSound)' );
+va.set_signal_source_buffer_playback_action( X, 'play' )
+va.set_signal_source_buffer_looping( X, true );
+va.set_sound_source_signal_source( S, X )
+
+% House corner
+w = itaFiniteWedge( [ 1 0 0 ], [ 0 0 -1 ], [ 0 -2 0 ], 4 ); % OpenGL coordinates
+
+%% Example for a synchronized scene update & audio processing simulation/auralization
+
+timestep = 128 / 44100; % here: depends on block size and sample rate
+manual_clock = 0;
+va.set_core_clock( 0 );
+
+spatialstep = 0.1;
+disp( [ 'Resulting sound source speed: ' num2str( spatialstep / timestep ) ' m/s' ] )
+
+numsteps = 3400;
+disp( [ 'Simulation result duration: ' num2str( numsteps * timestep ) ' s' ] )
+
+x = linspace( -1, 1, numsteps ) * 50; % motion from x = -5m to x = 5m
+
+h = waitbar( 0, 'Hold on, running auralization' );
+for n = 1:length( x )
+    
+    % Modify scene as you please (position has no real effect for prototype generic path renderer)
+    source_pos = [ x( n ) 1.1 -3 ]; % OpenGL coordinates
+    distance = sum( abs( source_pos - receiver_pos ) );
+    va.set_sound_source_position( S, source_pos );    
+    
+    
+    % Manually create direct sound path and diffracted sound path
+    
+    prop_path_direct = struct();
+    prop_path_direct.distance = distance;
+    prop_path_direct.delay = distance / c;
+    prop_path_direct.frequencies = f;
+    if ita_diffraction_shadow_zone( w, source_pos, receiver_pos )
+        prop_path.values = zeros( 1, numel( f ) );
+    else
+        prop_path.values = ones( 1, numel( f ) );
+    end
+    
+    apex = w.get_aperture_point( source_pos, receiver_pos );
+    detour = norm( source_pos - apex ) + norm(apex - receiver_pos );
+    
+    prop_path_diffracted = struct();
+    prop_path_diffracted.distance = detour;
+    prop_path_diffracted.delay = detour / c;
+    prop_path_diffracted.frequencies = f;
+    prop_path.values = ita_diffraction_utd( w, source_pos, receiver_pos, f, c );
+    
+    % @todo at some point: load all paths from pre-calculated simulation -> ITAPropagationPathSim (C++) output
+    
+    
+    % Update wave fronts in renderer
+    path_update = struct();
+    path_update.source = S;
+    path_update.receiver = L;
+    path_update.prop_path_1 = prop_path_direct;
+    path_update.prop_path_2 = prop_path_diffracted;
+    va.set_rendering_module_parameters( 'MyBinauralOutdoorNoise', path_update );
+    
+    % Increment core clock
+    manual_clock = manual_clock + timestep;
+    va.call_module( 'manualclock', struct( 'time', manual_clock ) );
+    
+    % Process audio chain by incrementing one block
+    va.call_module( 'virtualaudiodevice', struct( 'trigger', true ) );
+    
+    waitbar( n / numsteps )
+    
+end
+close( h )
+
+va.disconnect
+
+disp( 'Stop VA to export simulation results from rendering module(s)' )