diff --git a/assets/data/alphabet.xml b/assets/data/alphabet.xml
new file mode 100644
index 00000000..5abccf95
--- /dev/null
+++ b/assets/data/alphabet.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/buildnumber.txt b/buildnumber.txt
index 4d853162..e0da8ae0 100644
--- a/buildnumber.txt
+++ b/buildnumber.txt
@@ -1 +1 @@
-308
\ No newline at end of file
+309
\ No newline at end of file
diff --git a/source/ButtonRemapSubstate.hx b/source/ButtonRemapSubstate.hx
deleted file mode 100644
index 64ff0794..00000000
--- a/source/ButtonRemapSubstate.hx
+++ /dev/null
@@ -1,11 +0,0 @@
-package;
-
-import flixel.FlxSubState;
-
-class ButtonRemapSubstate extends FlxSubState
-{
- public function new()
- {
- super();
- }
-}
diff --git a/source/ChartParser.hx b/source/ChartParser.hx
deleted file mode 100644
index 3884c0e5..00000000
--- a/source/ChartParser.hx
+++ /dev/null
@@ -1,80 +0,0 @@
-package;
-
-import flixel.util.FlxStringUtil;
-
-using StringTools;
-
-class ChartParser
-{
- static public function parse(songName:String, section:Int):Array
- {
- var IMG_WIDTH:Int = 8;
- var regex:EReg = new EReg("[ \t]*((\r\n)|\r|\n)[ \t]*", "g");
-
- var csvData = FlxStringUtil.imageToCSV(Paths.file('data/' + songName + '/' + songName + '_section' + section + '.png'));
-
- var lines:Array = regex.split(csvData);
- var rows:Array = lines.filter(function(line) return line != "");
- csvData.replace("\n", ',');
-
- var heightInTiles = rows.length;
- var widthInTiles = 0;
-
- var row:Int = 0;
-
- // LMAOOOO STOLE ALL THIS FROM FLXBASETILEMAP LOLOL
-
- var dopeArray:Array = [];
- while (row < heightInTiles)
- {
- var rowString = rows[row];
- if (rowString.endsWith(","))
- rowString = rowString.substr(0, rowString.length - 1);
- var columns = rowString.split(",");
-
- if (columns.length == 0)
- {
- heightInTiles--;
- continue;
- }
- if (widthInTiles == 0)
- {
- widthInTiles = columns.length;
- }
-
- var column = 0;
- var pushedInColumn:Bool = false;
- while (column < widthInTiles)
- {
- // the current tile to be added:
- var columnString = columns[column];
- var curTile = Std.parseInt(columnString);
-
- if (curTile == null)
- throw 'String in row $row, column $column is not a valid integer: "$columnString"';
-
- if (curTile == 1)
- {
- if (column < 4)
- dopeArray.push(column + 1);
- else
- {
- var tempCol = (column + 1) * -1;
- tempCol += 4;
- dopeArray.push(tempCol);
- }
-
- pushedInColumn = true;
- }
-
- column++;
- }
-
- if (!pushedInColumn)
- dopeArray.push(0);
-
- row++;
- }
- return dopeArray;
- }
-}
diff --git a/source/Main.hx b/source/Main.hx
index 4690acf8..2051267c 100644
--- a/source/Main.hx
+++ b/source/Main.hx
@@ -1,6 +1,7 @@
package;
import funkin.menus.TitleState;
+import funkin.game.Highscore;
import flixel.FlxGame;
import flixel.FlxState;
import openfl.Assets;
diff --git a/source/PlayerSettings.hx b/source/PlayerSettings.hx
index b275b9b5..e733c108 100644
--- a/source/PlayerSettings.hx
+++ b/source/PlayerSettings.hx
@@ -1,6 +1,6 @@
package;
-import Controls;
+import funkin.system.Controls;
import flixel.FlxCamera;
import flixel.FlxG;
import flixel.util.FlxSignal;
diff --git a/source/AnimationDebug.hx b/source/funkin/debug/AnimationDebug.hx
similarity index 99%
rename from source/AnimationDebug.hx
rename to source/funkin/debug/AnimationDebug.hx
index 08d13d69..4dbd738f 100644
--- a/source/AnimationDebug.hx
+++ b/source/funkin/debug/AnimationDebug.hx
@@ -1,4 +1,4 @@
-package;
+package funkin.debug;
import funkin.game.Character;
import flixel.FlxG;
diff --git a/source/ChartingState.hx b/source/funkin/editors/ChartingState.hx
similarity index 99%
rename from source/ChartingState.hx
rename to source/funkin/editors/ChartingState.hx
index 96334f10..9f570d16 100644
--- a/source/ChartingState.hx
+++ b/source/funkin/editors/ChartingState.hx
@@ -1,4 +1,4 @@
-package;
+package funkin.editors;
import funkin.system.Conductor.BPMChangeEvent;
import Section.SwagSection;
@@ -35,6 +35,7 @@ import openfl.media.Sound;
import openfl.net.FileReference;
import openfl.utils.ByteArray;
import funkin.system.Conductor;
+import funkin.game.HealthIcon;
import funkin.game.Note;
diff --git a/source/HealthIcon.hx b/source/funkin/game/HealthIcon.hx
similarity index 98%
rename from source/HealthIcon.hx
rename to source/funkin/game/HealthIcon.hx
index f1c1517c..10abfad8 100644
--- a/source/HealthIcon.hx
+++ b/source/funkin/game/HealthIcon.hx
@@ -1,4 +1,4 @@
-package;
+package funkin.game;
import flixel.FlxSprite;
import openfl.utils.Assets;
diff --git a/source/Highscore.hx b/source/funkin/game/Highscore.hx
similarity index 98%
rename from source/Highscore.hx
rename to source/funkin/game/Highscore.hx
index 13ceab01..b48a994c 100644
--- a/source/Highscore.hx
+++ b/source/funkin/game/Highscore.hx
@@ -1,4 +1,4 @@
-package;
+package funkin.game;
import flixel.FlxG;
diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx
index c82cd3ed..44cd7db7 100644
--- a/source/funkin/game/PlayState.hx
+++ b/source/funkin/game/PlayState.hx
@@ -3,7 +3,7 @@ package funkin.game;
import funkin.scripting.Script;
import flixel.util.FlxDestroyUtil;
#if desktop
-import Discord.DiscordClient;
+import funkin.system.Discord.DiscordClient;
#end
import Section.SwagSection;
import funkin.system.Song.SwagSong;
@@ -47,6 +47,8 @@ import openfl.display.StageQuality;
import openfl.filters.ShaderFilter;
import funkin.system.Conductor;
import funkin.system.Song;
+import funkin.editors.ChartingState;
+import funkin.debug.AnimationDebug;
import funkin.menus.*;
import funkin.scripting.events.*;
diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx
index 6f25b673..102a5f3d 100644
--- a/source/funkin/menus/FreeplayState.hx
+++ b/source/funkin/menus/FreeplayState.hx
@@ -1,7 +1,7 @@
package funkin.menus;
#if desktop
-import Discord.DiscordClient;
+import funkin.system.Discord.DiscordClient;
#end
import flash.text.TextField;
import flixel.FlxG;
@@ -15,6 +15,9 @@ import flixel.util.FlxColor;
import lime.utils.Assets;
import funkin.system.Song;
import funkin.data.FreeplaySonglist;
+import funkin.ui.Alphabet;
+import funkin.game.HealthIcon;
+import funkin.game.Highscore;
using StringTools;
diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx
index 02c45e41..87ff8884 100644
--- a/source/funkin/menus/MainMenuState.hx
+++ b/source/funkin/menus/MainMenuState.hx
@@ -1,7 +1,7 @@
package funkin.menus;
#if desktop
-import Discord.DiscordClient;
+import funkin.system.Discord.DiscordClient;
#end
import flixel.FlxG;
import flixel.FlxObject;
diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx
index e213f12a..e8fefb43 100644
--- a/source/funkin/menus/PauseSubState.hx
+++ b/source/funkin/menus/PauseSubState.hx
@@ -1,6 +1,5 @@
package funkin.menus;
-import Controls.Control;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxSubState;
@@ -12,6 +11,7 @@ import flixel.text.FlxText;
import flixel.tweens.FlxEase;
import flixel.tweens.FlxTween;
import flixel.util.FlxColor;
+import funkin.ui.Alphabet;
class PauseSubState extends MusicBeatSubstate
{
diff --git a/source/funkin/menus/StoryMenuState.hx b/source/funkin/menus/StoryMenuState.hx
index 5976d089..97557695 100644
--- a/source/funkin/menus/StoryMenuState.hx
+++ b/source/funkin/menus/StoryMenuState.hx
@@ -1,7 +1,7 @@
package funkin.menus;
#if desktop
-import Discord.DiscordClient;
+import funkin.system.Discord.DiscordClient;
#end
import flixel.FlxG;
import flixel.FlxSprite;
@@ -16,6 +16,7 @@ import flixel.util.FlxColor;
import flixel.util.FlxTimer;
import lime.net.curl.CURLCode;
import funkin.system.Song;
+import funkin.game.Highscore;
using StringTools;
diff --git a/source/funkin/menus/TitleState.hx b/source/funkin/menus/TitleState.hx
index 9e64529b..62190cbd 100644
--- a/source/funkin/menus/TitleState.hx
+++ b/source/funkin/menus/TitleState.hx
@@ -1,7 +1,7 @@
package funkin.menus;
#if desktop
-import Discord.DiscordClient;
+import funkin.system.Discord.DiscordClient;
import sys.thread.Thread;
#end
import flixel.FlxG;
@@ -26,6 +26,7 @@ import flixel.util.FlxTimer;
import funkin.system.Conductor;
import lime.app.Application;
import openfl.Assets;
+import funkin.ui.Alphabet;
using StringTools;
diff --git a/source/BlendModeEffect.hx b/source/funkin/shaders/BlendModeEffect.hx
similarity index 100%
rename from source/BlendModeEffect.hx
rename to source/funkin/shaders/BlendModeEffect.hx
diff --git a/source/Controls.hx b/source/funkin/system/Controls.hx
similarity index 99%
rename from source/Controls.hx
rename to source/funkin/system/Controls.hx
index 7d1e2c40..4da0b806 100644
--- a/source/Controls.hx
+++ b/source/funkin/system/Controls.hx
@@ -1,4 +1,4 @@
-package;
+package funkin.system;
import flixel.FlxG;
import flixel.input.FlxInput;
diff --git a/source/Discord.hx b/source/funkin/system/Discord.hx
similarity index 98%
rename from source/Discord.hx
rename to source/funkin/system/Discord.hx
index b8d68606..d58930ee 100644
--- a/source/Discord.hx
+++ b/source/funkin/system/Discord.hx
@@ -1,4 +1,4 @@
-package;
+package funkin.system;
import Sys.sleep;
import discord_rpc.DiscordRpc;
diff --git a/source/Alphabet.hx b/source/funkin/ui/Alphabet.hx
similarity index 99%
rename from source/Alphabet.hx
rename to source/funkin/ui/Alphabet.hx
index 43f46b17..235b9db0 100644
--- a/source/Alphabet.hx
+++ b/source/funkin/ui/Alphabet.hx
@@ -1,4 +1,4 @@
-package;
+package funkin.ui;
import flixel.FlxG;
import flixel.FlxSprite;