//Implementations of MapValues are given all the values collected from all participants’ implementations of CollectValues
        protected override IDictionary <XName, object> MapValues(IDictionary <XName, object> readWriteValues, IDictionary <XName, object> writeOnlyValues)
        {
            XName statusXname = XName.Get("Status", propertiesNamespace);

            IDictionary <XName, object> mappedValues = base.MapValues(readWriteValues, writeOnlyValues);

            RequestForProposal requestForProposal = null;
            string             status             = string.Empty;
            object             value = null;

            //retrieve the status of the workflow
            if (writeOnlyValues.TryGetValue(statusXname, out value))
            {
                status = (string)value;
            }

            //retrieve the RequestForProposal object
            foreach (KeyValuePair <System.Xml.Linq.XName, object> item in writeOnlyValues)
            {
                if (item.Value is LocationInfo)
                {
                    LocationInfo li = (LocationInfo)item.Value;
                    if (li.Value is RequestForProposal)
                    {
                        requestForProposal = (RequestForProposal)li.Value;
                    }
                }
            }

            IOHelper.EnsureAllRfpFileExists();

            // load the document
            XElement doc = XElement.Load(IOHelper.GetAllRfpsFileName());

            IEnumerable <XElement> current =
                from r in doc.Elements("requestForProposal")
                where r.Attribute("id").Value.Equals(Id.ToString())
                select r;

            if (status == "Closed")
            {
                // erase nodes for the current rfp
                foreach (XElement xe in current)
                {
                    xe.Attribute("status").Value = "finished";
                }
            }
            else
            {
                // erase nodes for the current rfp
                foreach (XElement xe in current)
                {
                    xe.Remove();
                }

                // get the Xml version of the Rfp, add it to the document and save it
                if (requestForProposal != null)
                {
                    XElement e = SerializeRfp(requestForProposal, Id);
                    doc.Add(e);
                }
            }

            doc.Save(IOHelper.GetAllRfpsFileName());

            return(mappedValues);
        }