diff --git a/core/IvmiNode.gd b/core/IvmiNode.gd
index 8b545f312fe48593db501be7e8d3029376196e4b..73602ff8d13d2b672baaeaad3a9674a8805ff960 100644
--- a/core/IvmiNode.gd
+++ b/core/IvmiNode.gd
@@ -139,9 +139,13 @@ func _process(delta):
 		#output all values listened to which have changed
 		if _send_data:
 			for k in _properties.keys():
-				if _properties[k]._listen && _properties[k]._changed :
-					_ivmi.send(name+"/"+k, _properties[k]._tags, get_property(k))
+				if _properties[k]._changed :
+					if _properties[k]._listen :
+						_ivmi.send(name+"/"+k, _properties[k]._tags, get_property(k))
+					if _properties[k]._record and _ivmi.is_recording():
+						_ivmi.record_property(name+"/"+k, _properties[k]._tags, get_property(k))
 					_properties[k]._changed=false
 
+
 func send_prop(prop) :
 	_ivmi.send(name+"/"+prop, _properties[prop]._tags, get_property(prop))
diff --git a/core/IvmiProperty.gd b/core/IvmiProperty.gd
index 4316385dcc86814bb43e91539a16415a04041fbf..772533dda109b71779dae6522e1ca01101937237 100644
--- a/core/IvmiProperty.gd
+++ b/core/IvmiProperty.gd
@@ -10,7 +10,7 @@ var _listen = false
 var _tags = ""
 var _immediate = false
 var _ivmi_node = null
-
+var _record = false
 
 func set_values(vals : Array) :
 	if vals.size() ==  _values.size() :
@@ -47,6 +47,9 @@ func set_name(n):
 func set_listen(l) :
 	_listen=l
 	
+func set_record(r) :
+	_record=r
+	
 func set_immediate(i) :
 	_immediate=i
 	
diff --git a/core/IvmiScene.gd b/core/IvmiScene.gd
index 13ca34ba53cda9e3dc53d66baa8876e6aa57f676..a9efaa4d94e3a8a3719778df43271a3d103d98f9 100644
--- a/core/IvmiScene.gd
+++ b/core/IvmiScene.gd
@@ -38,7 +38,7 @@ enum VRMode {SplitHorizontal, SplitVertical, Anaglyph, QuadBuffer}
 @export var _screen_vr_screen_size=Vector2(3,2) : set = set_screen_vr_screen_size
 @export var _screen_vr_window_size=Vector2(1024,600) : set = set_screen_vr_window_size
 @export var _screen_vr_window_position=Vector2(640,480) : set = set_screen_vr_window_position
-var _xr_interface : XRInterface
+var _xr_interface : XRInterface = null
 var _config
 
 # Network variables
@@ -159,57 +159,19 @@ func _ready():
 	#initialize either libpd or osc patch
 	send("init", "f", [1])
 
-	for argument in OS.get_cmdline_args():
-		if argument == "--serve":
-			_network_mode = NetMode.Server
-		#elif argument.find("=") > -1:
-		#	var key_value = argument.split("=")
-		#	if key_value[0] == "--name":
-		#		_client_name = key_value[1]
-		#		my_info.name = _client_name
-		#	elif key_value[0] == "--ip":
-		#		_server_ip = key_value[1]
-		#	elif key_value[0] == "--port":
-		#		_server_port = key_value[1]
-
-
 	if _network_mode!=NetMode.None :
-		if _network_protocol==NetProto.WebRTC :
-#			if OS.get_name()=="HTML5" :
-#				#create client
-#				_network_client = IvmiClient.new()
-#				_network_client.connect("on_peers_ready",Callable(self,"_on_network_ready"))
-#				add_child(_network_client)
-#				#connect to server
-#				_on_found_server(_server_ip, _server_port)
-#			else :
-#				#create client
-#				_network_client = IvmiClient.new()
-#				_network_client.connect("on_peers_ready",Callable(self,"_on_network_ready"))
-#				add_child(_network_client)
-#
-#				#if server, create server, promote it and connect to it
-#				if _network_mode==NetMode.Server :
-#					print("IVMI : Starting server")
-#					_network_server = IvmiServer.new()
-#					_network_server._port = _server_port
-#					add_child(_network_server)
-#					#connect locally
-#					_on_found_server("127.0.0.1", _server_port)
-			pass
-
-		elif _network_protocol==NetProto.Enet :
-				match _network_mode :
-					NetMode.Server :
-						# init server
-						var peer = ENetMultiplayerPeer.new()
-						peer.create_server(_server_port)
-						multiplayer.multiplayer_peer = peer
-						_on_network_ready()
-						print("IVMI : Starting Server")
-					NetMode.Client :
-						if _server_ip!="" :
-							_on_found_server(_server_ip, _server_port)
+		if _network_protocol==NetProto.Enet :
+			match _network_mode :
+				NetMode.Server :
+					# init server
+					var peer = ENetMultiplayerPeer.new()
+					peer.create_server(_server_port)
+					multiplayer.multiplayer_peer = peer
+					_on_network_ready()
+					print("IVMI : Starting Server")
+				NetMode.Client :
+					if _server_ip!="" :
+						_on_found_server(_server_ip, _server_port)
 
 
 		#start discov
@@ -264,6 +226,7 @@ func _process(delta) :
 				_recording_index+=1
 			if _recording_index>=_recorded_props.size():
 				_recording_state=RecordingState.STOPPED
+				_recording_playing_done()
 
 
 
@@ -423,6 +386,9 @@ func record_property(address, tags, values) :
 	args.append_array(values)
 	var t = Time.get_ticks_msec()-_recording_time
 	_recorded_props.append({"time":t, "address":addr, "tags":tags, "args":args})
+	
+func _recording_playing_done() :
+	pass
 
 # --------------------------
 
diff --git a/patches/ivm-fx-autogate.pd b/patches/ivm-fx-autogate.pd
index 060a6603e8f846bea5daf384c541fa86cd5be1bb..5ba82e98751ee2fe7f7d92a65761b0c1d8df21e7 100644
Binary files a/patches/ivm-fx-autogate.pd and b/patches/ivm-fx-autogate.pd differ
diff --git a/patches/ivm-syn-granular.pd b/patches/ivm-syn-granular.pd
index 572ca4f482e4609a9372414d3ef9a9717c624500..fb3aebf84cac978796ec3427554cfc40713b35e2 100644
Binary files a/patches/ivm-syn-granular.pd and b/patches/ivm-syn-granular.pd differ
diff --git a/techniques/control/Tunnel/Tunnel.gd b/techniques/control/Tunnel/Tunnel.gd
index 9d0287848ee03ce75c513009cb767dcecaba7107..724beca651879fbbde72e0bb7e531646d56b4785 100644
--- a/techniques/control/Tunnel/Tunnel.gd
+++ b/techniques/control/Tunnel/Tunnel.gd
@@ -60,7 +60,9 @@ func _update_multislice() :
 		trans.basis = Basis.from_euler(rot).scaled(sca)
 		$MultiSlice.multimesh.set_instance_transform(s, trans)
 		$MultiSlice.multimesh.set_instance_custom_data(s, Color(col.r,col.g,col.b,1.0))
-		
+
+func _process(delta : float) -> void	:
+	super._process(delta)
 
 
 func _physics_process(delta):
diff --git a/techniques/control/Tunnel/TunnelPreset.gd b/techniques/control/Tunnel/TunnelPreset.gd
index 0c3a1d4c5d45a387a856bb05cde93a6c02d4c0a6..76ca619f8f63dd1782e8a1ad8899a5e0e58ab49f 100644
--- a/techniques/control/Tunnel/TunnelPreset.gd
+++ b/techniques/control/Tunnel/TunnelPreset.gd
@@ -34,6 +34,12 @@ func _ready() :
 	if _noisiness_curve:
 		_noisiness_curve.connect("changed",Callable(self,"_on_noisiness_curve_changed"))
 
+func _process(delta):
+	super._process(delta)
+
+func _set_property(prop, vals) :
+	super._set_property(prop, vals)
+
 func get_tunnel_preset_data():
 	var tunnel_param_data_array = []
 	if _height_curve: