diff --git a/RecrownedAthenaeum/Assets/AssetManager.cs b/RecrownedAthenaeum/Assets/AssetManager.cs
new file mode 100644
index 0000000..89c2ece
--- /dev/null
+++ b/RecrownedAthenaeum/Assets/AssetManager.cs
@@ -0,0 +1,207 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+
+namespace RecrownedAthenaeum.Assets
+{
+ ///
+ /// Wrapper for the content manager that helps with controlling it by adding automated multithreaded content loading.
+ ///
+ public class AssetManager
+ {
+ Thread thread;
+ readonly AssetManager contentManager;
+ readonly Queue queue;
+ Dictionary assets;
+ ///
+ /// Path modifiers to change the path in which the content manager looks to load a file. Used for better organizing things while not needing to type entire path.
+ ///
+ private readonly Dictionary contentPathModifier;
+ ///
+ /// Used when no path modifier is defined for that specific type.
+ ///
+ public IAssetPathResolver normalPathModifier = new NormalAssetPathResolver();
+ volatile float progress;
+ volatile bool running;
+
+ ///
+ /// Whether or not the queue is empty and all content is loaded.
+ ///
+ public bool Done { get { return !running && queue.Count == 0; } }
+
+ ///
+ /// The progress of the loading. 1 is complete while 0 is incomplete.
+ ///
+ public float Progress { get { return progress; } }
+
+ ///
+ /// Wraps the .
+ ///
+ /// The manager to wrap.
+ public AssetManager()
+ {
+ assets = new Dictionary();
+ queue = new Queue();
+ contentPathModifier = new Dictionary();
+ }
+ ///
+ /// Adds a to this handler.
+ ///
+ ///
+ ///
+ public void AddContentPathResolver(Type assetType, IAssetPathResolver contentResolver) {
+ contentPathModifier.Add(assetType, contentResolver);
+ }
+ ///
+ /// Removes the for the key.
+ ///
+ ///
+ public void RemoveContentResolver(Type assetType) {
+ contentPathModifier.Remove(assetType);
+ }
+ private void Load(string assetName, Type type, bool usePathModifier)
+ {
+ Debug.WriteLine("Loading asset: " + assetName);
+ string path = assetName;
+ if (usePathModifier)
+ {
+ IAssetPathResolver handler;
+ if (contentPathModifier.ContainsKey(type))
+ {
+ handler = contentPathModifier[type];
+ }
+ else
+ {
+ handler = normalPathModifier;
+ }
+ path = handler.Modify(assetName);
+ }
+ assets.Add(assetName, contentManager.Load