private bool saveOrUpdateDocument(Document.Document source)
        {
            //Performance measurement
            var sw = new Performance.Stopwatch("saveOrUpdateDocument");
            sw.Start();
            logger.Debug("Receiving SaveOrUpdate for " + source.DocumentType + " with ID " + source.DocumentID);

            if (!DocumentDB.AncestorsAndSelf("Documents").Any())
                DocumentDB.Add(new XElement("Documents"));

            if (DocumentDB.Elements(source.DocumentType).Any(x => x.Element("ID").Value == source.DocumentID))
            {
                logger.Debug("Updating " + source.DocumentType + " with ID " + source.DocumentID);
                DocumentDB.Elements(source.DocumentType).Single(x => x.Element("ID").Value == source.DocumentID).ReplaceWith(source.GetXElement());
            }
            else
            {
                logger.Debug("Adding " + source.DocumentType + " with ID " + source.DocumentID);
                DocumentDB.Add(source.GetXElement());
            }
            try { File.WriteAllText(DatabasePath + CurrentCompany.CompanyID + "\\Documents.xml", DocumentDB.ToString()); }
            catch (Exception e) { logger.Fatal("Error writing Document to " + DatabasePath + CurrentCompany.CompanyID + "\\Documents.xml", e); return false; }
            sw.Stop();
            logger.Info(sw.Result());

            return true;
        }