public function add($command, $path, array $arguments = array(), array $options = array()) {
		$dependsOn = (array)Hash::get($options, 'dependsOn');
		$unique = (bool)Hash::get($options, 'unique');
		unset($options['dependsOn'], $options['unique']);

		$task = compact('command', 'path', 'arguments') + $options;
		$task += array(
			'timeout' => 60 * 60,
			'status' => TaskType::UNSTARTED,
			'code' => 0,
			'stdout' => '',
			'stderr' => '',
			'details' => array(),
			'server_id' => 0,
			'scheduled' => null,
			'hash' => $this->_hash($command, $path, $arguments)
		);

		$dependsOnIds = $this->find('list', array(
			'fields' => array('id', 'id'),
			'conditions' => array(
				'hash' => $task['hash'],
				'status' => array(TaskType::UNSTARTED, TaskType::DEFFERED, TaskType::RUNNING)
			)
		));

		if ($unique && $dependsOnIds) {
			return false;
		} elseif ($dependsOnIds) {
			$dependsOn = array_merge($dependsOn, $dependsOnIds);
		}

		$this->create();
		if ($dependsOn) {
			$data = array(
				$this->alias => $task,
				$this->DependsOnTask->alias => $dependsOn
			);
			$success = $this->saveAssociated($data);
		} else {
			$success = $this->save($task);
		}

		if (!$success) {
			return false;
		} else {
			return $this->read()[$this->alias];
		}
	}