/// <summary>
    /// Formats an XML post header for last.fm's api access
    /// </summary>
    /// <param name="aMethodType">Is a type of the method to be called: e.g. LoveTrack, BanTrack, etc</param>
    /// <param name="aUser">The users last.fm username.</param>
    /// <param name="aChallenge">The current UNIX timestamp.</param>
    /// <param name="aAuth">The authentication token, a 32-byte ASCII hexadecimal representation of the MD5 hash of the users last.fm password and the timestamp: md5(md5(password) + timestamp)</param>
    /// <param name="aArtist">The artist to get love/ban.</param>
    /// <param name="aTitle">The track title to get love/ban.</param>
    /// <param name="aFriendsUserName">The friends name to remove.</param>
    /// <returns>The XML data in string format</returns>
    private string BuildXmlRpcRequest(XmlRpcType aMethodType, string aUser, string aChallenge, string aAuth,
                                      string aArtist, string aTitle, string aFriendsUserName)
    {
      string ResultXml = String.Empty;
      List<string> AllParams = new List<string>(5);
      try
      {
        if (!String.IsNullOrEmpty(aUser))
        {
          AllParams.Add(aUser);
        }
        if (!String.IsNullOrEmpty(aChallenge))
        {
          AllParams.Add(aChallenge);
        }
        if (!String.IsNullOrEmpty(aAuth))
        {
          AllParams.Add(aAuth);
        }
        if (aMethodType == XmlRpcType.removeFriend)
        {
          if (!String.IsNullOrEmpty(aFriendsUserName))
          {
            AllParams.Add(aFriendsUserName);
          }
        }
        else
        {
          if (!String.IsNullOrEmpty(aArtist))
          {
            AllParams.Add(aArtist);
          }
          if (!String.IsNullOrEmpty(aTitle))
          {
            AllParams.Add(aTitle);
          }
        }

        using (MemoryStream memoryStream = new MemoryStream())
        {
          XmlWriterSettings settings = new XmlWriterSettings();
          //settings.Indent = true;
          //settings.IndentChars = ("    ");
          settings.CloseOutput = true;
          // If i use Encodings.UTF8 the BOM will be prepended...
          settings.Encoding = new UTF8Encoding(false);

          using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
          {
            writer.WriteStartElement("methodCall");
            writer.WriteElementString("methodName", aMethodType.ToString());
            writer.WriteStartElement("params");
            foreach (string singleParam in AllParams)
            {
              writer.WriteStartElement("param");
              writer.WriteStartElement("value");
              writer.WriteElementString("string", singleParam);
              writer.WriteEndElement();
              writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.Flush();
          }
          ResultXml = Encoding.UTF8.GetString(memoryStream.GetBuffer());
          Log.Debug("AudioscrobblerUtils: Successfully created XMLRPC call for method {0}", aMethodType.ToString());
        }
      }
      catch (Exception ex)
      {
        Log.Error("AudioscrobblerUtils: Error in BuildXmlRpcRequest - {0}", ex.Message);
      }
      return ResultXml;
    }