diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/DataFileSingleton.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/DataFileSingleton.cs
index 4b5dab1..13267d5 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/DataFileSingleton.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/DataFileSingleton.cs
@@ -11,12 +11,14 @@ namespace PrecastConcretePlantFileImplement
         private readonly string ReinforcedFileName = "Reinforced.xml";
         private readonly string ClientFileName = "Client.xml";
         private readonly string ImplementerFileName = "Implementer.xml";
+        private readonly string MessageInfoFileName = "MessageInfo.xml";
 
         public List<Component> Components { get; set; }
         public List<Order> Orders { get; set; }
         public List<Reinforced> Reinforceds { get; set; }
         public List<Client> Clients { get; private set; }
         public List<Implementer> Implementers { get; private set; }
+        public List<MessageInfo> Messages { get; private set; }
 
         public static DataFileSingleton GetInstance()
         {
@@ -31,6 +33,7 @@ namespace PrecastConcretePlantFileImplement
         public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement);
         public void SaveClients() => SaveData(Clients, OrderFileName, "Clients", x => x.GetXElement);
         public void SaveImplementers() => SaveData(Orders, ImplementerFileName, "Implementers", x => x.GetXElement);
+        public void SaveMessages() => SaveData(Orders, ImplementerFileName, "Messages", x => x.GetXElement);
 
         private DataFileSingleton()
         {
@@ -39,6 +42,7 @@ namespace PrecastConcretePlantFileImplement
             Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
             Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!;
             Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!;
+            Messages = LoadData(MessageInfoFileName, "MessageInfo", x => MessageInfo.Create(x)!)!;
         }
         private static List<T>? LoadData<T>(string filename, string xmlNodeName, Func<XElement, T> selectFunction)
         {
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
new file mode 100644
index 0000000..42725c0
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
@@ -0,0 +1,75 @@
+using PrecastConcretePlantContracts.BindingModels;
+using PrecastConcretePlantContracts.ViewModels;
+using PrecastConcretePlantDataModels;
+using System.Xml.Linq;
+
+namespace PrecastConcretePlantFileImplement
+{
+    public class MessageInfo : IMessageInfoModel
+    {
+        public string MessageId { get; private set; } = string.Empty;
+
+        public int? ClientId { get; private set; }
+
+        public string SenderName { get; private set; } = string.Empty;
+
+        public DateTime DateDelivery { get; private set; } = DateTime.Now;
+
+        public string Subject { get; private set; } = string.Empty;
+
+        public string Body { get; private set; } = string.Empty;
+
+        public static MessageInfo? Create(MessageInfoBindingModel model)
+        {
+            if (model == null)
+            {
+                return null;
+            }
+            return new()
+            {
+                Body = model.Body,
+                Subject = model.Subject,
+                ClientId = model.ClientId,
+                MessageId = model.MessageId,
+                SenderName = model.SenderName,
+                DateDelivery = model.DateDelivery,
+            };
+        }
+
+        public static MessageInfo? Create(XElement element)
+        {
+            if (element == null)
+            {
+                return null;
+            }
+            return new()
+            {
+                Body = element.Attribute("Body")!.Value,
+                Subject = element.Attribute("Subject")!.Value,
+                ClientId = Convert.ToInt32(element.Attribute("ClientId")!.Value),
+                MessageId = element.Attribute("MessageId")!.Value,
+                SenderName = element.Attribute("SenderName")!.Value,
+                DateDelivery = Convert.ToDateTime(element.Attribute("DateDelivery")!.Value),
+            };
+        }
+
+        public MessageInfoViewModel GetViewModel => new()
+        {
+            Body = Body,
+            Subject = Subject,
+            ClientId = ClientId,
+            MessageId = MessageId,
+            SenderName = SenderName,
+            DateDelivery = DateDelivery,
+        };
+
+        public XElement GetXElement => new("MessageInfo",
+            new XAttribute("Body", Body),
+            new XAttribute("Subject", Subject),
+            new XAttribute("ClientId", ClientId),
+            new XAttribute("MessageId", MessageId),
+            new XAttribute("SenderName", SenderName),
+            new XAttribute("DateDelivery", DateDelivery)
+            );
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfoStorage.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfoStorage.cs
new file mode 100644
index 0000000..8d28341
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfoStorage.cs
@@ -0,0 +1,52 @@
+using PrecastConcretePlantContracts.BindingModels;
+using PrecastConcretePlantContracts.SearchModels;
+using PrecastConcretePlantContracts.StoragesContract;
+using PrecastConcretePlantContracts.ViewModels;
+
+namespace PrecastConcretePlantFileImplement
+{
+    public class MessageInfoStorage : IMessageInfoStorage
+    {
+        private readonly DataFileSingleton _source;
+        public MessageInfoStorage()
+        {
+            _source = DataFileSingleton.GetInstance();
+        }
+
+        public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
+        {
+            if (model.MessageId != null)
+            {
+                return _source.Messages.FirstOrDefault(x => x.MessageId == model.MessageId)?.GetViewModel;
+            }
+            return null;
+        }
+
+        public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
+        {
+            return _source.Messages
+                .Where(x => x.ClientId == model.ClientId)
+                .Select(x => x.GetViewModel)
+                .ToList();
+        }
+
+        public List<MessageInfoViewModel> GetFullList()
+        {
+            return _source.Messages
+                .Select(x => x.GetViewModel)
+                .ToList();
+        }
+
+        public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
+        {
+            var newMessage = MessageInfo.Create(model);
+            if (newMessage == null)
+            {
+                return null;
+            }
+            _source.Messages.Add(newMessage);
+            _source.SaveMessages();
+            return newMessage.GetViewModel;
+        }
+    }
+}