var puu_oo_loop_flag = 1;
	
		var puu_oo_loop = func (strength, tgt_strength) {

		if (puu_oo_loop_flag == 0) 
			{
			print("Ending Puu Oo eruption simulation.");
			return;
			}
		
		if (rand() > 0.99) {tgt_strength = 100.0;}

		tgt_strength = tgt_strength - 0.5;
		if (tgt_strength < 40.0) {tgt_strength = 40.0;}

		var step = 5.0;

		if (math.abs(strength - tgt_strength) < 5.0) {step = 1.0;}

		if (strength < tgt_strength) 
			{strength += step;}
		else
			{strength -= step;}

		setprop("/environment/volcanoes/kilauea/puu-oo-eruption-strength", strength);
		setprop("/environment/volcanoes/kilauea/puu-oo-eruption-quantity", int(0.5*strength));


		settimer(func {puu_oo_loop(strength, tgt_strength);}, 0.1);
		}

		puu_oo_state_manager = func {
		
			#print ("Puu Oo state manager");
			var state = getprop("/environment/volcanoes/kilauea/puu-oo-activity");
			
			if (state == 3)
				{
				print("Starting Puu Oo eruption simulation.");
				puu_oo_loop_flag = 1;
				puu_oo_loop(50.0, 50.0);
				}
			else
				{
				puu_oo_loop_flag = 0;
				}
		
		}
		
		# call state manager once to get correct autosaved behavior, otherwise use listener
		
		puu_oo_state_manager();
		
		setlistener("/environment/volcanoes/kilauea/puu-oo-activity", puu_oo_state_manager);