public function set($key, $value)
	{
		if (!is_string($key))
			throw new InvalidArgumentException('First parameter has to be a string');

		if (!$this->isTypeSupported(gettype($value)))
			throw new UnsupportedException('First parameter has to be an int, a double, a bool or a string');

		try
		{
			// try to find the key, and set the value if this succeeds
			$this->getRecursive($key, $this->data);
			$this->data = $this->setRecursive($key, $value);
		}
		catch (ElementNotFoundException $e)
		{
			$this->data = array_merge_recursive($this->data, $this->setRecursive($key, $value));
		}
	}