diff --git a/RhythmBullet/RhythmBullet.csproj b/RhythmBullet/RhythmBullet.csproj
index 59d09a0..d97fbe2 100644
--- a/RhythmBullet/RhythmBullet.csproj
+++ b/RhythmBullet/RhythmBullet.csproj
@@ -43,8 +43,13 @@
   
     app.manifest
   
+  
+    true
+  
   
-    
+    
+    
+    
     
     
     
@@ -60,7 +65,7 @@
     
     
     
-    
+    
     
     
     
diff --git a/RhythmBullet/RhythmBulletGame.cs b/RhythmBullet/RhythmBulletGame.cs
index 54fc58b..fed9f6d 100644
--- a/RhythmBullet/RhythmBulletGame.cs
+++ b/RhythmBullet/RhythmBulletGame.cs
@@ -7,8 +7,10 @@ using RhythmBullet.Zer01HD.Game.Preferences;
 using RhythmBullet.Zer01HD.UI;
 using RhythmBullet.Zer01HD.Utilities;
 using RhythmBullet.Zer01HD.Utilities.ContentSystem;
+using RhythmBullet.Zer01HD.Utilities.DataTypes;
 using RhythmBullet.Zer01HD.Utilities.UI;
 using System;
+using System.Diagnostics;
 
 namespace RhythmBullet
 {
@@ -17,6 +19,10 @@ namespace RhythmBullet
     /// 
     public class RhythmBulletGame : Game
     {
+        public const int WORLD_WIDTH = 4;
+        public const int WORLD_HEIGHT = 3;
+        public static int pixels_per_WU;
+
         public GraphicsDeviceManager Graphics;
         SpriteBatch spriteBatch;
         public readonly ContentSystem Assets;
@@ -34,12 +40,11 @@ namespace RhythmBullet
             Assets = new ContentSystem(Content);
             resolutionContentResolver = new ResolutionContentResolver();
             FontContentResolver fcr = new FontContentResolver(resolutionContentResolver);
-            Assets.contentResolver.Add(typeof(Texture2D), resolutionContentResolver);
-            Assets.contentResolver.Add(typeof(SpriteFont), fcr);
-
+            Assets.contentPathModifier.Add(typeof(Texture2D), resolutionContentResolver);
+            Assets.contentPathModifier.Add(typeof(SpriteFont), fcr);
             preferencesManager = new PreferencesManager(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "/RhythmBullet",
-                new Controls(),
-                new General());
+                new General(),
+                new Controls());
         }
 
         public Screen Screen
@@ -67,7 +72,14 @@ namespace RhythmBullet
         /// 
         protected override void Initialize()
         {
-            // TODO: Add your initialization logic here
+            //Load preferences
+            preferencesManager.Load();
+
+            Resolution resolution = preferencesManager.GetPreferences().Resolution;
+            resolutionContentResolver.Width = resolution.Width;
+            resolutionContentResolver.Height = resolution.Height;
+            QueueContent();
+            Debug.WriteLine("Initial setup complete.");
             base.Initialize();
         }
 
@@ -80,7 +92,6 @@ namespace RhythmBullet
             // Create a new SpriteBatch, which can be used to draw textures.
             spriteBatch = new SpriteBatch(GraphicsDevice);
             Screen = new LoadingScreen(Content.Load("recrown"));
-
             // TODO: use this.Content to load your game content here
         }
 
@@ -95,12 +106,17 @@ namespace RhythmBullet
 
         /// 
         /// Allows the game to run logic such as updating the world,
-        /// checking for collisions, gathering input, and playing audio.
+        /// checking for collisions, gathering input, and playing audio.   
         /// 
         /// Provides a snapshot of timing values.
         protected override void Update(GameTime gameTime)
         {
+            if (!Assets.Done)
+            {
+                Assets.Update();
+            }
             Screen.Update(gameTime);
+
             base.Update(gameTime);
         }
 
@@ -114,7 +130,7 @@ namespace RhythmBullet
             spriteBatch.Begin();
             Screen.Draw(spriteBatch);
             spriteBatch.End();
-            
+
             base.Draw(gameTime);
         }
 
@@ -124,16 +140,31 @@ namespace RhythmBullet
             resolutionContentResolver.Width = Graphics.PreferredBackBufferWidth;
             resolutionContentResolver.Height = Graphics.PreferredBackBufferHeight;
             QueueContent();
+            Screen.AssetLoadStateChange(true);
         }
 
         public void PostAssetLoad()
         {
-
+            Screen.AssetLoadStateChange(false);
         }
 
         void QueueContent()
         {
-
+            Assets.Queue("Tech-Circle1");
+            Assets.Queue("polyjet-standard");
+            Assets.Queue("cybercircle3B");
+            Assets.Queue("title");
+            Assets.Queue("cybercircle1");
+            Assets.Queue("defaultCover");
+            Assets.Queue("laser");
+            Assets.Queue("pellet");
+            Assets.Queue("shard");
+            Assets.Queue("bar");
+            Assets.Queue("flake");
+            Assets.Queue("void_circle");
+            Assets.Queue("tpSelector");
+            Assets.Queue("backgrounds/mainBG");
+            Assets.Queue("magic1");
         }
     }
 }
diff --git a/RhythmBullet/Zer01HD/Game/ContentResolvers/FontContentResolver.cs b/RhythmBullet/Zer01HD/Game/ContentResolvers/FontContentResolver.cs
index 1b75558..b52674f 100644
--- a/RhythmBullet/Zer01HD/Game/ContentResolvers/FontContentResolver.cs
+++ b/RhythmBullet/Zer01HD/Game/ContentResolvers/FontContentResolver.cs
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 
 namespace RhythmBullet.Zer01HD.Game.ContentResolvers
 {
-    class FontContentResolver : IContentResolver
+    class FontContentResolver : IContentPathModifier
     {
         readonly ResolutionContentResolver rcr;
 
@@ -16,9 +16,9 @@ namespace RhythmBullet.Zer01HD.Game.ContentResolvers
             this.rcr = rcr;
         }
 
-        public string Load(string assetName)
+        public string Modify(string assetName)
         {
-            return rcr.Load("fonts/" + assetName);
+            return rcr.Modify("fonts/" + assetName);
         }
     }
 }
diff --git a/RhythmBullet/Zer01HD/Game/ContentResolvers/ResolutionContentResolver.cs b/RhythmBullet/Zer01HD/Game/ContentResolvers/ResolutionContentResolver.cs
index 128a230..b3f3b25 100644
--- a/RhythmBullet/Zer01HD/Game/ContentResolvers/ResolutionContentResolver.cs
+++ b/RhythmBullet/Zer01HD/Game/ContentResolvers/ResolutionContentResolver.cs
@@ -10,7 +10,7 @@ using System.Threading.Tasks;
 
 namespace RhythmBullet.Zer01HD.Game.ContentResolvers
 {
-    class ResolutionContentResolver : IContentResolver
+    class ResolutionContentResolver : IContentPathModifier
     {
         int width, height;
         bool updated;
@@ -98,7 +98,7 @@ namespace RhythmBullet.Zer01HD.Game.ContentResolvers
             return best;
         }
 
-        public string Load(string path)
+        public string Modify(string path)
         {
             if (updated)
             {
diff --git a/RhythmBullet/Zer01HD/Game/Preferences/Controls.cs b/RhythmBullet/Zer01HD/Game/Preferences/Controls.cs
index b8d9d8d..12254c6 100644
--- a/RhythmBullet/Zer01HD/Game/Preferences/Controls.cs
+++ b/RhythmBullet/Zer01HD/Game/Preferences/Controls.cs
@@ -1,18 +1,14 @@
-using RhythmBullet.Zer01HD.Utilities.Persistence;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using Microsoft.Xna.Framework.Input;
+using RhythmBullet.Zer01HD.Utilities.Persistence;
 
 namespace RhythmBullet.Zer01HD.Game.Preferences
 {
-    public class Controls : IPreferences
+    public class Controls : Utilities.Persistence.Preferences
     {
-        public int Forward;
-        public int Backward;
-        public int Left;
-        public int Right;
-        public int Shoot; 
+        public Keys Forward = Keys.Up;
+        public Keys Backward = Keys.Down;
+        public Keys Left = Keys.Left;
+        public Keys Right = Keys.Right;
+        public Keys Shoot = Keys.Space;
     }
 }
diff --git a/RhythmBullet/Zer01HD/Game/Preferences/General.cs b/RhythmBullet/Zer01HD/Game/Preferences/General.cs
index 1d1eb16..8439f90 100644
--- a/RhythmBullet/Zer01HD/Game/Preferences/General.cs
+++ b/RhythmBullet/Zer01HD/Game/Preferences/General.cs
@@ -1,20 +1,16 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using RhythmBullet.Zer01HD.Utilities;
+using System.Xml.Serialization;
+using RhythmBullet.Zer01HD.Utilities.DataTypes;
 using RhythmBullet.Zer01HD.Utilities.Persistence;
 
 namespace RhythmBullet.Zer01HD.Game.Preferences
 {
-    public class General : IPreferences
+    public class General : Utilities.Persistence.Preferences
     {
-        public Resolution Resolution;
-        public bool Fullscreen;
-        public float MusicVolume;
-        public float FXVolume;
-        public string MusicDirectory;
-        public string GameDirectory;
+        public Resolution Resolution = new Resolution(1920, 1080);
+        public bool Fullscreen = false;
+        public float MusicVolume = 1f;
+        public float FXVolume = 1f;
+        public string MusicDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
     }
 }
diff --git a/RhythmBullet/Zer01HD/Utilities/ContentSystem/ContentSystem.cs b/RhythmBullet/Zer01HD/Utilities/ContentSystem/ContentSystem.cs
index 50eaeac..df1c485 100644
--- a/RhythmBullet/Zer01HD/Utilities/ContentSystem/ContentSystem.cs
+++ b/RhythmBullet/Zer01HD/Utilities/ContentSystem/ContentSystem.cs
@@ -2,6 +2,8 @@
 using Microsoft.Xna.Framework.Graphics;
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading;
@@ -11,57 +13,57 @@ namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
 {
     public class ContentSystem
     {
-        volatile bool queued;
         Thread thread;
         readonly ContentManager contentManager;
         readonly Queue queue;
         Dictionary assets;
-        public readonly Dictionary contentResolver;
+        public readonly Dictionary contentPathModifier;
 
         public ContentSystem(ContentManager contentManager)
         {
             this.contentManager = contentManager;
             assets = new Dictionary();
             queue = new Queue();
-            contentResolver = new Dictionary();
+            contentPathModifier = new Dictionary();
         }
 
         private void Load(string assetName, Type type)
         {
-            IContentResolver handler = contentResolver[type];
-            string path = handler.Load(assetName);
-            assets.Add(assetName, contentManager.Load(path));
+            IContentPathModifier handler = contentPathModifier[type];
+            string path = handler.Modify(assetName);
+            try
+            {
+                assets.Add(assetName, contentManager.Load(path));
+            } catch (ContentLoadException cle)
+            {
+                Debug.WriteLine("Failed to load " + assetName + "with modified path: " + cle.Message);
+                Debug.WriteLine("Loading asset from root: " + assetName);
+                assets.Add(assetName, contentManager.Load(assetName));
+            }
+            Debug.WriteLine("Loaded asset: " + assetName);
         }
 
-        private void LoadBatch()
-        {
-            while (queue.Count != 0)
-            {
-                lock (queue)
-                {
-                    LoadableContent content = queue.Dequeue();
-                    Load(content.assetName, content.type);
-                }
-                queued = false;
-            }
-        }
 
         public T Get(string assetName)
         {
-            lock(queue)
+            lock (queue)
             {
                 return (T)assets[assetName];
             }
         }
 
-        public void Queue(string assetName, Type type)
+        public void Queue(string assetName) where T : IDisposable
         {
-            queued = true;
             lock (queue)
             {
                 if (!assets.ContainsKey(assetName))
                 {
-                    queue.Enqueue(new LoadableContent(assetName, type));
+                    queue.Enqueue(new LoadableContent(assetName, typeof(T)));
+                    Debug.WriteLine("Queued asset: " + assetName);
+                }
+                else
+                {
+                    Debug.WriteLine("Did not queue asset due to asset with same name being loaded: " + assetName);
                 }
             }
         }
@@ -77,10 +79,22 @@ namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
                 {
                     ThreadStart threadStart = new ThreadStart(LoadBatch);
                     thread = new Thread(threadStart);
+                    thread.Start();
                 }
             }
         }
 
+        private void LoadBatch()
+        {
+            while (queue.Count != 0)
+            {
+                lock (queue)
+                {
+                    LoadableContent content = queue.Dequeue();
+                    Load(content.assetName, content.type);
+                }
+            }
+        }
         /// 
         /// Removes the asset from the list of assets in the system.
         /// Cannot remove from queue.
@@ -100,9 +114,9 @@ namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
         /// 
         public void ClearQueue()
         {
-            lock(queue)
+            lock (queue)
             {
-            queue.Clear();
+                queue.Clear();
             }
         }
 
@@ -119,9 +133,12 @@ namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
             ClearQueue();
         }
 
-        public bool Done()
+        public bool Done
         {
-            return queued;
+            get
+            {
+                return queue.Count == 0;
+            }
         }
     }
 }
diff --git a/RhythmBullet/Zer01HD/Utilities/ContentSystem/IContentResolver.cs b/RhythmBullet/Zer01HD/Utilities/ContentSystem/IContentPathModifier.cs
similarity index 82%
rename from RhythmBullet/Zer01HD/Utilities/ContentSystem/IContentResolver.cs
rename to RhythmBullet/Zer01HD/Utilities/ContentSystem/IContentPathModifier.cs
index 631b88d..b864e0d 100644
--- a/RhythmBullet/Zer01HD/Utilities/ContentSystem/IContentResolver.cs
+++ b/RhythmBullet/Zer01HD/Utilities/ContentSystem/IContentPathModifier.cs
@@ -6,13 +6,13 @@ using System.Threading.Tasks;
 
 namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
 {
-    public interface IContentResolver
+    public interface IContentPathModifier
     {
         /// 
         /// Returns the complete path with the content folder as root.
         /// 
         /// Is the asset's name
         /// 
-        string Load(string assetName);
+        string Modify(string assetName);
     }
 }
diff --git a/RhythmBullet/Zer01HD/Utilities/ContentSystem/NormalContentResolver.cs b/RhythmBullet/Zer01HD/Utilities/ContentSystem/NormalContentResolver.cs
new file mode 100644
index 0000000..158cf2e
--- /dev/null
+++ b/RhythmBullet/Zer01HD/Utilities/ContentSystem/NormalContentResolver.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
+{
+    class NormalContentResolver : IContentPathModifier
+    {
+        public string Modify(string assetName)
+        {
+            return assetName;
+        }
+    }
+}
diff --git a/RhythmBullet/Zer01HD/Utilities/DataTypes/Resolution.cs b/RhythmBullet/Zer01HD/Utilities/DataTypes/Resolution.cs
index 5c3f849..19f7fc9 100644
--- a/RhythmBullet/Zer01HD/Utilities/DataTypes/Resolution.cs
+++ b/RhythmBullet/Zer01HD/Utilities/DataTypes/Resolution.cs
@@ -16,6 +16,10 @@ namespace RhythmBullet.Zer01HD.Utilities.DataTypes
             Height = height;
         }
 
+        public Resolution()
+        {
+        }
+
         public int CompareTo(Resolution other)
         {
             return Area() - other.Area();
diff --git a/RhythmBullet/Zer01HD/Utilities/Persistence/IPreferences.cs b/RhythmBullet/Zer01HD/Utilities/Persistence/Preferences.cs
similarity index 75%
rename from RhythmBullet/Zer01HD/Utilities/Persistence/IPreferences.cs
rename to RhythmBullet/Zer01HD/Utilities/Persistence/Preferences.cs
index 391f83a..7583b0e 100644
--- a/RhythmBullet/Zer01HD/Utilities/Persistence/IPreferences.cs
+++ b/RhythmBullet/Zer01HD/Utilities/Persistence/Preferences.cs
@@ -3,10 +3,11 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Xml.Serialization;
 
 namespace RhythmBullet.Zer01HD.Utilities.Persistence
 {
-    public interface IPreferences
+    public class Preferences
     {
     }
 }
diff --git a/RhythmBullet/Zer01HD/Utilities/Persistence/PreferencesManager.cs b/RhythmBullet/Zer01HD/Utilities/Persistence/PreferencesManager.cs
index 45f3723..2e4a037 100644
--- a/RhythmBullet/Zer01HD/Utilities/Persistence/PreferencesManager.cs
+++ b/RhythmBullet/Zer01HD/Utilities/Persistence/PreferencesManager.cs
@@ -11,43 +11,67 @@ namespace RhythmBullet.Zer01HD.Utilities
 {
     public class PreferencesManager
     {
-        private readonly Dictionary preferenceList;
+        private readonly Dictionary preferenceList;
         public string SavePath;
         XmlSerializer xmlSerializer;
 
-        public PreferencesManager(string savePath, params IPreferences[] preferences)
+        public PreferencesManager(string savePath, params Preferences[] preferences)
         {
             this.SavePath = savePath;
-            preferenceList = new Dictionary();
-            foreach (IPreferences prefs in preferences)
+            preferenceList = new Dictionary();
+
+            Type[] preferenceTypes = new Type[preferences.Length];
+            for (int prefID = 0; prefID < preferences.Length; prefID++)
             {
-                preferenceList.Add(prefs.GetType(), prefs);
+                preferenceList.Add(preferences[prefID].GetType(), preferences[prefID]);
+                preferenceTypes[prefID] = preferences[prefID].GetType();
             }
+
+            xmlSerializer = new XmlSerializer(typeof(Preferences), preferenceTypes);
         }
 
-        public T GetPreferences() where T : IPreferences
+        public T GetPreferences() where T : Preferences
         {
-            return (T) preferenceList[typeof(T)];
+            return (T)preferenceList[typeof(T)];
         }
 
         public void Load()
         {
-            foreach (KeyValuePair prefs in preferenceList)
+            foreach (KeyValuePair prefs in preferenceList)
             {
-            Stream stream = new FileStream(SavePath + nameof(prefs.Key), FileMode.Open);
-            preferenceList[prefs.Key] = (IPreferences) xmlSerializer.Deserialize(stream);
-            stream.Close();
+                if (!LoadSpecific(prefs.Key))
+                {
+                    SaveSpecific(prefs.Key);
+                }
             }
         }
 
         public void Save()
         {
-            foreach (KeyValuePair prefs in preferenceList)
+            foreach (KeyValuePair prefs in preferenceList)
             {
-                Stream stream = new FileStream(SavePath + nameof(prefs.Key), FileMode.Create);
-                xmlSerializer.Serialize(stream, prefs.Value);
-                stream.Close();
+                SaveSpecific(prefs.Key);
             }
         }
+
+        private bool LoadSpecific(Type preference)
+        {
+            string path = SavePath + "/" + preference.Name;
+            if (File.Exists(path))
+            {
+                Stream stream = new FileStream(SavePath + "/" + preference.Name, FileMode.Open);
+                preferenceList[preference] = (Preferences)xmlSerializer.Deserialize(stream);
+                stream.Close();
+                return true;
+            }
+            return false;
+        }
+
+        private void SaveSpecific(Type preference)
+        {
+            Stream stream = new FileStream(SavePath + preference.Name, FileMode.Create);
+            xmlSerializer.Serialize(stream, preferenceList[preference]);
+            stream.Close();
+        }
     }
 }
diff --git a/RhythmBullet/Zer01HD/Utilities/Renderer/ScaledRenderer.cs b/RhythmBullet/Zer01HD/Utilities/Renderer/ScaledRenderer.cs
new file mode 100644
index 0000000..7efb5e9
--- /dev/null
+++ b/RhythmBullet/Zer01HD/Utilities/Renderer/ScaledRenderer.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RhythmBullet.Zer01HD.Utilities.Renderer
+{
+    class ScaledRenderer
+    {
+    }
+}
diff --git a/RhythmBullet/Zer01HD/Utilities/UI/Screen.cs b/RhythmBullet/Zer01HD/Utilities/UI/Screen.cs
index e4b4cca..f2e3074 100644
--- a/RhythmBullet/Zer01HD/Utilities/UI/Screen.cs
+++ b/RhythmBullet/Zer01HD/Utilities/UI/Screen.cs
@@ -30,7 +30,7 @@ namespace RhythmBullet.Zer01HD.Utilities.UI
 
         }
 
-        public virtual void Resize()
+        public virtual void AssetLoadStateChange(bool state)
         {
 
         }