protected function compactFakeFields($request) {

		$this->prepareFields();

		$fake_field_columns_to_encode = [];

		// go through each defined field
		foreach ($this->crud['fields'] as $k => $field) {
			// if it's a fake field
			if (isset($this->crud['fields'][$k]['fake']) && $this->crud['fields'][$k]['fake']==true) {
				// add it to the request in its appropriate variable - the one defined, if defined
				if (isset($this->crud['fields'][$k]['store_in'])) {
					$request[$this->crud['fields'][$k]['store_in']][$this->crud['fields'][$k]['name']] = $request[$this->crud['fields'][$k]['name']];

					$remove_fake_field = array_pull($request, $this->crud['fields'][$k]['name']);
					if(!in_array($this->crud['fields'][$k]['store_in'], $fake_field_columns_to_encode, true)){
				        array_push($fake_field_columns_to_encode, $this->crud['fields'][$k]['store_in']);
				    }
				}
				else //otherwise in the one defined in the $crud variable
				{
					$request['extras'][$this->crud['fields'][$k]['name']] = $request[$this->crud['fields'][$k]['name']];

					$remove_fake_field = array_pull($request, $this->crud['fields'][$k]['name']);
					if(!in_array('extras', $fake_field_columns_to_encode, true)){
				        array_push($fake_field_columns_to_encode, 'extras');
				    }
				}
			}
		}

		// json_encode all fake_value columns in the database, so they can be properly stored and interpreted
		if (count($fake_field_columns_to_encode)) {
			foreach ($fake_field_columns_to_encode as $key => $value) {
				$request[$value] = json_encode($request[$value]);
			}
		}

		// if there are no fake fields defined, this will just return the original Request in full
		// since no modifications or additions have been made to $request
		return $request;
	}