diff --git a/Esiur.Stores.MongoDB/Esiur.Stores.MongoDB.csproj b/Esiur.Stores.MongoDB/Esiur.Stores.MongoDB.csproj
new file mode 100644
index 0000000..3e5c8dc
--- /dev/null
+++ b/Esiur.Stores.MongoDB/Esiur.Stores.MongoDB.csproj
@@ -0,0 +1,16 @@
+
+
+  
+    netstandard1.5
+  
+
+  
+    
+    
+  
+
+  
+    
+  
+
+
\ No newline at end of file
diff --git a/Esiur.Stores.MongoDB/MongoDBStore.cs b/Esiur.Stores.MongoDB/MongoDBStore.cs
new file mode 100644
index 0000000..3519a9e
--- /dev/null
+++ b/Esiur.Stores.MongoDB/MongoDBStore.cs
@@ -0,0 +1,440 @@
+using Esiur.Resource;
+using System;
+using Esiur.Engine;
+using MongoDB.Driver.Core;
+using MongoDB.Driver;
+using MongoDB.Bson;
+using Esiur.Data;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace Esiur.Stores.MongoDB
+{
+    public class MongoDBStore : IStore
+    {
+        public Instance Instance { get; set; }
+
+        public event DestroyedEvent OnDestroy;
+        MongoClient client;
+        IMongoDatabase database;
+
+        Dictionary resources = new Dictionary();
+
+
+        public int Count
+        {
+            get { return resources.Count; }
+        }
+        public void Destroy()
+        {
+
+        }
+
+        public MongoDBStore()
+        {
+            client = new MongoClient();
+            this.database = client.GetDatabase("esiur");
+        }
+
+        public MongoDBStore(string connectionString, string database)
+        {
+            client = new MongoClient(connectionString);
+            this.database = client.GetDatabase(database);
+        }
+
+
+        AsyncReply Fetch(string id)
+        {
+            var filter = Builders.Filter.Eq("_id", new BsonObjectId(new ObjectId(id)));
+            var list = this.database.GetCollection("resources").Find(filter).ToList();
+            if (list.Count == 0)
+                return new AsyncReply(null);
+            var document = list[0];
+
+
+            IResource resource = (IResource)Activator.CreateInstance(Type.GetType(document["classname"].AsString));
+            resources.Add(document["_id"].AsObjectId.ToString(), resource);
+
+            Warehouse.Put(resource, document["name"].AsString, this);
+
+
+            var parents = document["parents"].AsBsonArray;
+            var children = document["children"].AsBsonArray;
+
+            var bag = new AsyncBag