protected function _initialize($property, $method) {
		if (is_string($method)) {
			$mode = self::MODE_JOIN;
			$sourcePrimary = null;
		}
		elseif (is_array($method)) {
			if (isset($method[self::SOURCE_METHOD], $method[self::SOURCE_MODE])) {
				$sourcePrimary = isset($method[self::SOURCE_PRIMARY]) ? $method[self::SOURCE_PRIMARY] : null;
				
				$mode   = $method[self::SOURCE_MODE];
				$method = $method[self::SOURCE_METHOD];
			}
			elseif (isset($method[0], $method[1])) {
				$sourcePrimary = isset($method[2]) ? $method[2] : null;
				
				$mode   = $method[1];
				$method = $method[0];
			}
			else {
				throw new Exception('Invalid source definition');
			}
		}
		else {
			throw new Exception('Source must be specified as a string or an array');
		}
		
		if ($this->hasCollection()) {
			$this->_initMany($property, $method, $mode, $sourcePrimary);
		} else {
			$this->_initOne($property, $method, $mode);
		}
	}