diff --git a/core/IvmiNode.gd b/core/IvmiNode.gd
index 73602ff8d13d2b672baaeaad3a9674a8805ff960..5061ba916d481e4aa2c59d202131551aab66af41 100644
--- a/core/IvmiNode.gd
+++ b/core/IvmiNode.gd
@@ -46,7 +46,7 @@ func _allow_send_data(value : bool):
 	_send_data = value
 	
 func _add_property(prop, values) -> void :
-	_properties[prop] = load("res://addons/ivmi-builder/core/IvmiProperty.gd").new()
+	_properties[prop] = IvmiProperty.new()
 	_properties[prop].init_values(values)
 	_properties[prop].set_ivmi_node(self)
 	_properties[prop].set_name(prop)
@@ -129,22 +129,22 @@ func _get_ivmi_type():
 	return _ivmi_type
 
 func _process(delta):	
-	if is_inside_tree(): 
-		#get cam dist if needed
+	#get cam dist if needed
+	if _properties.has("distance_to_camera") :
 		if _properties["distance_to_camera"]._listen:
 			var cam_pos = get_viewport().get_camera_3d().to_global(Vector3(0,0,0))
 			var obj_pos = to_global(Vector3(0,0,0))
 			_properties["distance_to_camera"].set_values([(cam_pos-obj_pos).length()])
-		
-		#output all values listened to which have changed
-		if _send_data:
-			for k in _properties.keys():
-				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
+	
+	#output all values listened to which have changed
+	if _send_data:
+		for k in _properties.keys():
+			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) :
diff --git a/techniques/control/Button/Button.gd b/techniques/control/Button/Button.gd
index 54d4216cb7d403d57a828b001c4ea8421bb0534c..384b714c6d00fdfba2d3232340534d532c5c93a6 100644
--- a/techniques/control/Button/Button.gd
+++ b/techniques/control/Button/Button.gd
@@ -1,4 +1,4 @@
-extends "res://addons/ivmi-builder/core/IvmiNode.gd"
+extends IvmiNode
 
 signal button_pressed
 signal button_released
@@ -10,8 +10,12 @@ signal button_released
 @export var release_speed = 8
 
 func _ready():
+	super._ready()
 	_add_property("triggered", [0])
 
+func _process(delta):
+	super._process(delta)
+
 func _physics_process(delta): 
 	if get_property("triggered")[0]:
 		_button.position = lerp(_button.position,_released_position,delta * release_speed)
diff --git a/techniques/control/Button/Button_v3.gd b/techniques/control/Button/Button_v3.gd
index acdd369509c9eab9675b85cb4a78b4f0eeee643d..3b54c86ae7dfe1a1cc1e64c48b91c9f074782bb3 100644
--- a/techniques/control/Button/Button_v3.gd
+++ b/techniques/control/Button/Button_v3.gd
@@ -1,4 +1,4 @@
-extends "res://addons/ivmi-builder/core/IvmiNode.gd"
+extends IvmiNode
 
 @onready var _button = get_node("Button")
 @onready var _pressed_position = get_node("Pressed").position
@@ -9,8 +9,12 @@ extends "res://addons/ivmi-builder/core/IvmiNode.gd"
 var _moving = false
 
 func _ready():
+	super._ready()
 	_add_property("triggered", [0])
 
+func _process(delta):
+	super._process(delta)
+
 func _physics_process(delta): 
 	if !get_property("triggered")[0] and _moving:
 		_button.position = lerp(_button.position,_released_position,delta * release_speed)
diff --git a/techniques/technique.gd b/techniques/technique.gd
index 09ce6b064307b6b0076c9d804543fddfae23b187..e14bb801ee4352956ee2327615b5e0a2251d5154 100644
--- a/techniques/technique.gd
+++ b/techniques/technique.gd
@@ -5,13 +5,14 @@ extends IvmiNode
 
 var _speed_evaluation_time = 0
 
-func _init():
-	super._init()
+func _ready():
+	super._ready()
 	_set_ivmi_type("technique")
 	add_to_group("ivmi_techniques")
 	_add_property("speed", [0])
 
 func _process(delta):
+	super._process(delta)
 	if _properties["speed"]._listen:
 		_speed_evaluation_time += delta
 		if _speed_evaluation_time >= _speed_evaluation_delay: