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