diff --git a/Project.xml b/Project.xml
index 643401439..029d6c890 100644
--- a/Project.xml
+++ b/Project.xml
@@ -96,7 +96,10 @@
 	<assets path="assets/week7"    library="week7"    exclude="*.ogg" if="web"/>
 	<assets path="assets/week7"    library="week7"    exclude="*.mp3" unless="web"/>
 	
-	<assets path='example_mods' rename='mods' embed='false'/>
+	<!-- <assets path='example_mods' rename='mods' embed='false'/> -->
+
+	<template path="example_mods" rename="mods" />
+
 	<assets path='art/readme.txt' rename='do NOT readme.txt' />
 	<!-- <template path='mods' /> -->
 	
diff --git a/example_mods/introMod/assets/preload/data/introText.txt b/example_mods/introMod/assets/preload/data/introText.txt
new file mode 100644
index 000000000..f0dd8224a
--- /dev/null
+++ b/example_mods/introMod/assets/preload/data/introText.txt
@@ -0,0 +1 @@
+awesomes tream--really awesome
\ No newline at end of file
diff --git a/example_mods/introMod/assets/preload/images/gfDanceTitle.png b/example_mods/introMod/assets/preload/images/gfDanceTitle.png
new file mode 100644
index 000000000..989f2a68a
Binary files /dev/null and b/example_mods/introMod/assets/preload/images/gfDanceTitle.png differ
diff --git a/source/ModdingSubstate.hx b/source/ModdingSubstate.hx
index 81f5a358f..9898286a5 100644
--- a/source/ModdingSubstate.hx
+++ b/source/ModdingSubstate.hx
@@ -1,33 +1,146 @@
 package;
 
+import Controls.Control;
+import flixel.FlxG;
+import flixel.group.FlxGroup.FlxTypedGroup;
 import flixel.text.FlxText;
+import flixel.util.FlxColor;
+import polymod.Polymod;
 import sys.FileSystem;
 
 class ModdingSubstate extends MusicBeatSubstate
 {
+	var grpMods:FlxTypedGroup<ModMenuItem>;
+	var enabledMods:Array<String> = [];
+	var modFolders:Array<String> = [];
+
+	var curSelected:Int = 0;
+
 	public function new():Void
 	{
 		super();
 
-		// var pathShit
+		grpMods = new FlxTypedGroup<ModMenuItem>();
+		add(grpMods);
+
+		refreshModList();
+	}
+
+	override function update(elapsed:Float)
+	{
+		if (FlxG.keys.justPressed.R)
+			refreshModList();
+
+		selections();
+
+		if (controls.UP_P)
+			selections(-1);
+		if (controls.DOWN_P)
+			selections(1);
+
+		if (FlxG.keys.justPressed.SPACE)
+			grpMods.members[curSelected].modEnabled = !grpMods.members[curSelected].modEnabled;
+
+		if (FlxG.keys.justPressed.I && curSelected != 0)
+		{
+			var oldOne = grpMods.members[curSelected - 1];
+			grpMods.members[curSelected - 1] = grpMods.members[curSelected];
+			grpMods.members[curSelected] = oldOne;
+			selections(-1);
+		}
+
+		if (FlxG.keys.justPressed.K && curSelected < grpMods.members.length - 1)
+		{
+			var oldOne = grpMods.members[curSelected + 1];
+			grpMods.members[curSelected + 1] = grpMods.members[curSelected];
+			grpMods.members[curSelected] = oldOne;
+			selections(1);
+		}
+
+		super.update(elapsed);
+	}
+
+	private function selections(change:Int = 0):Void
+	{
+		curSelected += change;
+
+		if (curSelected >= modFolders.length)
+			curSelected = 0;
+		if (curSelected < 0)
+			curSelected = modFolders.length - 1;
+
+		for (txt in 0...grpMods.length)
+		{
+			if (txt == curSelected)
+			{
+				grpMods.members[txt].color = FlxColor.YELLOW;
+			}
+			else
+				grpMods.members[txt].color = FlxColor.WHITE;
+		}
+
+		organizeByY();
+	}
+
+	private function refreshModList():Void
+	{
+		while (grpMods.members.length > 0)
+		{
+			grpMods.remove(grpMods.members[0], true);
+		}
 
 		var modList = [];
+		modFolders = [];
 
 		for (file in FileSystem.readDirectory('./mods'))
 		{
-			if (FileSystem.isDirectory("./mods/" + file))
-				modList.push(file);
+			if (FileSystem.isDirectory('./mods/' + file))
+				modFolders.push(file);
 		}
 
+		enabledMods = [];
+
+		modList = Polymod.scan('./mods');
+
 		trace(modList);
 
 		var loopNum:Int = 0;
-		for (i in modList)
+		for (i in modFolders)
 		{
-			var txt:FlxText = new FlxText(0, 10 + (40 * loopNum), 0, i, 32);
-			add(txt);
+			var txt:ModMenuItem = new ModMenuItem(0, 10 + (40 * loopNum), 0, i, 32);
+			txt.text = i;
+			grpMods.add(txt);
 
 			loopNum++;
 		}
 	}
+
+	private function organizeByY():Void
+	{
+		for (i in 0...grpMods.length)
+		{
+			grpMods.members[i].y = 10 + (40 * i);
+		}
+	}
+}
+
+class ModMenuItem extends FlxText
+{
+	public var modEnabled:Bool = false;
+	public var daMod:String;
+
+	public function new(x:Float, y:Float, w:Float, str:String, size:Int)
+	{
+		super(x, y, w, str, size);
+	}
+
+	override function update(elapsed:Float)
+	{
+		if (modEnabled)
+			alpha = 1;
+		else
+			alpha = 0.5;
+
+		super.update(elapsed);
+	}
 }
diff --git a/source/TitleState.hx b/source/TitleState.hx
index 572a97825..7759626fd 100644
--- a/source/TitleState.hx
+++ b/source/TitleState.hx
@@ -37,7 +37,7 @@ class TitleState extends MusicBeatState
 	override public function create():Void
 	{
 		#if polymod
-		polymod.Polymod.init({modRoot: "mods", dirs: ['introMod']});
+		polymod.Polymod.init({modRoot: "mods", dirs: ['introMod'], framework: OPENFL});
 		#end
 
 		PlayerSettings.init();
@@ -216,6 +216,17 @@ class TitleState extends MusicBeatState
 
 	override function update(elapsed:Float)
 	{
+		/* 
+			if (FlxG.keys.justPressed.R)
+			{
+				#if polymod
+				polymod.Polymod.init({modRoot: "mods", dirs: ['introMod']});
+				trace('reinitialized');
+				#end
+			}
+
+		 */
+
 		if (FlxG.sound.music != null)
 			Conductor.songPosition = FlxG.sound.music.time;
 		// FlxG.watch.addQuick('amp', FlxG.sound.music.amplitude);