diff --git a/Game/src/MainState.cpp b/Game/src/MainState.cpp
index 43ac4a5..21b8950 100644
--- a/Game/src/MainState.cpp
+++ b/Game/src/MainState.cpp
@@ -1,11 +1,12 @@
 #include "MainState.h"
 
 void MainState::onEnter(Application* app) {
-	Log("MainState update!");
+	Log("MainState onEnter!");
+	m_app = app;
 }
 
 void MainState::onExit() {
-	Log("MainState update!");
+	Log("MainState onExit!");
 }
 
 void MainState::update() {
diff --git a/Game/src/include/MainState.h b/Game/src/include/MainState.h
index bc41824..9257cdb 100644
--- a/Game/src/include/MainState.h
+++ b/Game/src/include/MainState.h
@@ -9,5 +9,5 @@ public:
 	void update() override;
 	void render() override;
 private:
-
+	Application* m_app;
 };
\ No newline at end of file
diff --git a/NothinFancy/NothinFancy.vcxproj b/NothinFancy/NothinFancy.vcxproj
index e6453c0..2b54896 100644
--- a/NothinFancy/NothinFancy.vcxproj
+++ b/NothinFancy/NothinFancy.vcxproj
@@ -200,6 +200,7 @@
     
     
     
+    
     
     
   
diff --git a/NothinFancy/NothinFancy.vcxproj.filters b/NothinFancy/NothinFancy.vcxproj.filters
index 6c2d8b0..d07be53 100644
--- a/NothinFancy/NothinFancy.vcxproj.filters
+++ b/NothinFancy/NothinFancy.vcxproj.filters
@@ -44,6 +44,9 @@
     
       Header Files
     
+    
+      Header Files
+    
   
   
     
diff --git a/NothinFancy/src/Application.cpp b/NothinFancy/src/Application.cpp
index e10787f..b59469d 100644
--- a/NothinFancy/src/Application.cpp
+++ b/NothinFancy/src/Application.cpp
@@ -103,6 +103,15 @@ namespace nf {
 		return m_FPS;
 	}
 
+	bool Application::isInput(unsigned int code) {
+		if (code < 164) {
+			return m_input[code];
+		}
+		else {
+			return false;
+		}
+	}
+
 	void Application::addIntroState() {
 		m_sIntro = new IntroGamestate;
 		m_sIntro->onEnter(this);
@@ -191,11 +200,47 @@ namespace nf {
 				app->toggleFullscreen();
 				return 0;
 			}
-			break;
+			return 0;
 		}
 		case WM_MENUCHAR: {
 			return MNC_CLOSE << 16;
 		}
+		case WM_LBUTTONDOWN: {
+			app->m_input[1] = true;
+			return 0;
+		}
+		case WM_LBUTTONUP: {
+			app->m_input[1] = false;
+			return 0;
+		}
+		case WM_RBUTTONDOWN: {
+			app->m_input[2] = true;
+			return 0;
+		}
+		case WM_RBUTTONUP: {
+			app->m_input[2] = false;
+			return 0;
+		}
+		case WM_MBUTTONDOWN: {
+			app->m_input[4] = true;
+			return 0;
+		}
+		case WM_MBUTTONUP: {
+			app->m_input[4] = false;
+			return 0;
+		}
+		case WM_KEYDOWN: {
+			if (wParam < 164 && !(lParam & (1 << 30))) {
+				app->m_input[wParam] = true;
+			}
+			break;
+		}
+		case WM_KEYUP: {
+			if (wParam < 164) {
+				app->m_input[wParam] = false;
+			}
+			break;
+		}
 		case WM_CLOSE: {
 			DestroyWindow(hWnd);
 			return 0;
@@ -245,6 +290,7 @@ namespace nf {
 		wglDeleteContext(m_hglrc);
 		m_hglrc = wglCreateContextAttribsARB(m_hdc, NULL, attrib);
 		wglMakeCurrent(m_hdc, m_hglrc);
+		wglSwapIntervalEXT(0);
 		Log("OpenGL version: " + std::string((char*)glGetString(GL_VERSION)));
 		GLuint vao;
 		glGenVertexArrays(1, &vao);
diff --git a/NothinFancy/src/Utility.cpp b/NothinFancy/src/Utility.cpp
index 3d440cb..10205c0 100644
--- a/NothinFancy/src/Utility.cpp
+++ b/NothinFancy/src/Utility.cpp
@@ -1,8 +1,9 @@
 //TODO: Debug logger
 //TODO: File IO functions
+#include 
+
 #include "Utility.h"
 #include "Config.h"
-#include 
 
 namespace nf {
 #ifdef _DEBUG
diff --git a/NothinFancy/src/include/Application.h b/NothinFancy/src/include/Application.h
index a06a929..26a4246 100644
--- a/NothinFancy/src/include/Application.h
+++ b/NothinFancy/src/include/Application.h
@@ -1,12 +1,13 @@
 #pragma once
-#include "Config.h"
-#include "Utility.h"
-#include "IntroGamestate.h"
 #include 
 #include 
 #include 
 #include 
 
+#include "Config.h"
+#include "Utility.h"
+#include "IntroGamestate.h"
+
 namespace nf {
 	class Application {
 	public:
@@ -23,6 +24,7 @@ namespace nf {
 		void showWindow(bool show);
 		const Config& getConfig() const;
 		int getFPS() const;
+		bool isInput(unsigned int code);
 
 		~Application();
 	private:
@@ -63,5 +65,8 @@ namespace nf {
 		IGamestate* m_DefaultState;
 		bool m_defaultStateAdded = false;
 		IGamestate* m_currentState;
+
+		//Array of booleans that represent keyboard and mouse input minus the scrollwheel
+		bool m_input[164];
 	};
 }
\ No newline at end of file
diff --git a/NothinFancy/src/include/Input.h b/NothinFancy/src/include/Input.h
new file mode 100644
index 0000000..41b707c
--- /dev/null
+++ b/NothinFancy/src/include/Input.h
@@ -0,0 +1,63 @@
+#pragma once
+
+#define NFI_LEFTMOUSE 1
+#define NFI_RIGHTMOUSE 2
+#define NFI_MIDLEMOUSE 4
+#define NFI_TAB 9
+#define NFI_ENTER 13
+#define NFI_SHIFT 16
+#define NFI_CONTROL 17
+#define NFI_ESCAPE 27
+#define NFI_SPACE 32
+#define NFI_LEFT 37
+#define NFI_UP 38
+#define NFI_RIGHT 39
+#define NFI_DOWN 40
+#define NFI_0 48
+#define NFI_1 49
+#define NFI_2 50
+#define NFI_3 51
+#define NFI_4 52
+#define NFI_5 53
+#define NFI_6 54
+#define NFI_7 55
+#define NFI_8 56
+#define NFI_9 57
+#define NFI_A 65
+#define NFI_B 66
+#define NFI_C 67
+#define NFI_D 68
+#define NFI_E 69
+#define NFI_F 70
+#define NFI_G 71
+#define NFI_H 72
+#define NFI_I 73
+#define NFI_J 74
+#define NFI_K 75
+#define NFI_L 76
+#define NFI_M 77
+#define NFI_N 78
+#define NFI_O 79
+#define NFI_P 80
+#define NFI_Q 81
+#define NFI_R 82
+#define NFI_S 83
+#define NFI_T 84
+#define NFI_U 85
+#define NFI_V 86
+#define NFI_W 87
+#define NFI_X 88
+#define NFI_Y 89
+#define NFI_Z 90
+#define NFI_F1 112
+#define NFI_F2 113
+#define NFI_F3 114
+#define NFI_F4 115
+#define NFI_F5 116
+#define NFI_F6 117
+#define NFI_F7 118
+#define NFI_F8 119
+#define NFI_F9 120
+#define NFI_F10 121
+#define NFI_F11 122
+#define NFI_F12 123
\ No newline at end of file
diff --git a/NothinFancy/src/include/NothinFancy.h b/NothinFancy/src/include/NothinFancy.h
index 0eb00c9..45b68f1 100644
--- a/NothinFancy/src/include/NothinFancy.h
+++ b/NothinFancy/src/include/NothinFancy.h
@@ -1,5 +1,6 @@
 //Master engine include (Is this even useful?)
 
 #include "Application.h"
+#include "Input.h"
 
 using namespace nf;
\ No newline at end of file
diff --git a/NothinFancy/src/include/Utility.h b/NothinFancy/src/include/Utility.h
index 343042c..9f4ef5a 100644
--- a/NothinFancy/src/include/Utility.h
+++ b/NothinFancy/src/include/Utility.h
@@ -6,13 +6,19 @@
 
 namespace nf {
 #ifdef _DEBUG
+//Strips __FILE__ down to only the name of the file
 #define __FILENAME__ strrchr(__FILE__, '\\') + 1
+//Initializes static variables needed for debugging
 #define DEBUGINIT std::chrono::steady_clock::time_point Debug::m_initTime = std::chrono::high_resolution_clock::now();
+//Sleep for an amount of seconds
 #define SleepS(x) std::this_thread::sleep_for(std::chrono::seconds(x))
+//Sleep for an amount of milliseconds
 #define SleepMS(x) std::this_thread::sleep_for(std::chrono::milliseconds(x))
+//Prints a nicely-formatted message complete with a timestamp
 #define Log(x) nf::Debug::LogImp(x)
+//Prints error message and breaks the debugger
 #define Error(x) nf::Debug::ErrorImp(x,__FILENAME__, __LINE__);\
-DebugBreak();
+__debugbreak();
 
 	class Debug {
 	private: