// If the element has reactions, loop through each one (it is an object), if the value for elem1 or elem2 is not an element and is not null, remove that key
	if (elements[key].reactions) {
		for (var reaction in elements[key].reactions) {
			// If elem1 exists
			if (elements[key].reactions[reaction].elem1) {
				// If elem1 is an array, loop through each element, else check once. Don't delete if it === null
				if (Array.isArray(elements[key].reactions[reaction].elem1)) { 
					for (var i = 0; i < elements[key].reactions[reaction].elem1.length; i++) {
						if (elements[key].reactions[reaction].elem1[i] && !elements[elements[key].reactions[reaction].elem1[i]]) {
							elements[key].reactions[reaction].elem1.splice(i,1);
						}
					}
				}
				else if (elements[key].reactions[reaction].elem1 && !elements[elements[key].reactions[reaction].elem1]) {
					delete elements[key].reactions[reaction].elem1;
				}
			}
			// If elem2 exists
			if (elements[key].reactions[reaction].elem2) {
				// If elem2 is an array, loop through each element, else check once. Don't delete if it === null
				if (Array.isArray(elements[key].reactions[reaction].elem2)) {
					for (var i = 0; i < elements[key].reactions[reaction].elem2.length; i++) {
						if (elements[key].reactions[reaction].elem2[i] && !elements[elements[key].reactions[reaction].elem2[i]]) {
							elements[key].reactions[reaction].elem2.splice(i,1);
						}
					}
				}
				else if (elements[key].reactions[reaction].elem2 && !elements[elements[key].reactions[reaction].elem2]) {
					delete elements[key].reactions[reaction].elem2;
				}
			}
		}
	}

	// If the element's stateHigh or stateLow is not an element, remove it and tempHigh/Low
	if (elements[key].stateHigh) {
		// If it's an array, do it for each item, otherwise, just do it once
		if (Array.isArray(elements[key].stateHigh)) {
			for (var i = 0; i < elements[key].stateHigh.length; i++) {
				if (!elements[elements[key].stateHigh[i]] && elements[key].stateHigh[i] !== null) {
					elements[key].stateHigh.splice(i,1);
				}
			}
			if (elements[key].stateHigh.length == 0) {
				delete elements[key].stateHigh;
				delete elements[key].tempHigh;
			}
		}
		else {
			if (!elements[elements[key].stateHigh] && elements[key].stateHigh !== null) {
				delete elements[key].stateHigh;
				delete elements[key].tempHigh;
			}
		}
	}
	if (elements[key].stateLow) {
		if (Array.isArray(elements[key].stateLow)) {
			for (var i = 0; i < elements[key].stateLow.length; i++) {
				if (!elements[elements[key].stateLow[i]] && elements[key].stateLow[i] !== null) {
					elements[key].stateLow.splice(i,1);
				}
			}
			if (elements[key].stateLow.length == 0) {
				delete elements[key].stateLow;
				delete elements[key].tempLow;
			}
		}
		else {
			if (!elements[elements[key].stateLow] && elements[key].stateLow !== null) {
				delete elements[key].stateLow;
				delete elements[key].tempLow;
			}
		}
	}
	// same for burnInto
	if (elements[key].burnInto) {
		if (Array.isArray(elements[key].burnInto)) {
			for (var i = 0; i < elements[key].burnInto.length; i++) {
				if (!elements[elements[key].burnInto[i]]) {
					delete elements[key].burnInto[i];
				}
			}
			if (elements[key].burnInto.length == 0) {
				delete elements[key].burnInto;
			}
		}
		else {
			if (!elements[elements[key].burnInto]) {
				delete elements[key].burnInto;
			}
		}
	}
	// same for breakInto
	if (elements[key].breakInto) {
		if (Array.isArray(elements[key].breakInto)) {
			for (var i = 0; i < elements[key].breakInto.length; i++) {
				if (elements[key].breakInto[i]!==null && !elements[elements[key].breakInto[i]]) { delete elements[key].breakInto[i]; }
			}
			if (elements[key].breakInto.length == 0) { delete elements[key].breakInto; }
		}
		else {
			if (elements[key].breakInto[i]!==null && !elements[elements[key].breakInto]) { delete elements[key].breakInto; }
		}
	}
