public async Task<HttpResponseMessage> ApplyConflict(string filename, long remoteVersion, string remoteServerId,
		                                                     string remoteServerUrl)
		{
			var localMetadata = GetLocalMetadata(filename);

			if (localMetadata == null)
				throw new HttpResponseException(HttpStatusCode.NotFound);

			var contentStream = await Request.Content.ReadAsStreamAsync();

			var current = new HistoryItem
				              {
					              ServerId = Storage.Id.ToString(),
					              Version = long.Parse(localMetadata[SynchronizationConstants.RavenSynchronizationVersion])
				              };

			var currentConflictHistory = Historian.DeserializeHistory(localMetadata);
			currentConflictHistory.Add(current);

			var remote = new HistoryItem
				             {
					             ServerId = remoteServerId,
					             Version = remoteVersion
				             };

			var remoteConflictHistory =
				new JsonSerializer().Deserialize<IList<HistoryItem>>(new JsonTextReader(new StreamReader(contentStream)));
			remoteConflictHistory.Add(remote);

			var conflict = new ConflictItem
				               {
					               CurrentHistory = currentConflictHistory,
					               RemoteHistory = remoteConflictHistory,
					               FileName = filename,
					               RemoteServerUrl = Uri.UnescapeDataString(remoteServerUrl)
				               };

			ConflictArtifactManager.Create(filename, conflict);

			Publisher.Publish(new ConflictDetected
				                  {
					                  FileName = filename,
					                  SourceServerUrl = remoteServerUrl
				                  });

			Log.Debug(
				"Conflict applied for a file '{0}' (remote version: {1}, remote server id: {2}).", filename, remoteVersion,
				remoteServerId);

			return new HttpResponseMessage(HttpStatusCode.NoContent);
		}