private Document.Document getDocument(Document.Document source)
        {
            if (!DocumentDB.AncestorsAndSelf("Documents").Any())
                return source;

            if (DocumentDB.Elements(source.DocumentType).Any(x => x.Element("ID").Value == source.DocumentID))
            {
                logger.Debug("Reading " + source.DocumentType + " with ID " + source.DocumentID);
                var xelement = DocumentDB.Elements(source.DocumentType).Single(x => x.Element("ID").Value == source.DocumentID);
                source.ParseFromXElement(xelement);

                foreach (Interfaces.DocumentParser parser in AdditionalPreviewParsers.Where(x => x.DocumentType == xelement.Name))
                {
                    try
                    {
                        parser.ParseAdditionalData(ref source, xelement, this); 
                    }
                    catch (Exception e)
                    {
                        logger.Error("Error at ParseAdditionalData", e);
                    }
                }
            }

            return source;
        }