diff --git a/Unuk-QT/Makefile b/Unuk-QT/Makefile
index 63c794f..dc638e0 100644
--- a/Unuk-QT/Makefile
+++ b/Unuk-QT/Makefile
@@ -1,6 +1,6 @@
 #############################################################################
 # Makefile for building: Unuk-QT
-# Generated by qmake (2.01a) (Qt 4.7.3) on: Sat Dec 17 22:09:14 2011
+# Generated by qmake (2.01a) (Qt 4.7.3) on: Sat Dec 17 22:49:43 2011
 # Project:  Unuk-QT.pro
 # Template: app
 # Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile Unuk-QT.pro
@@ -68,7 +68,8 @@ SOURCES       = ../src/libUnuk/Debug.cpp \
 		../src/Unuk/Game.cpp \
 		../src/libUnuk/MapElement.cpp \
 		../src/libUnuk/MapEntities.cpp \
-		../src/libUnuk/FPS.cpp 
+		../src/libUnuk/FPS.cpp \
+		../src/libUnuk/DialogueBox.cpp 
 OBJECTS       = Debug.o \
 		main.o \
 		Input.o \
@@ -94,7 +95,8 @@ OBJECTS       = Debug.o \
 		Game.o \
 		MapElement.o \
 		MapEntities.o \
-		FPS.o
+		FPS.o \
+		DialogueBox.o
 DIST          = /usr/share/qt4/mkspecs/common/g++.conf \
 		/usr/share/qt4/mkspecs/common/unix.conf \
 		/usr/share/qt4/mkspecs/common/linux.conf \
@@ -194,7 +196,7 @@ qmake:  FORCE
 
 dist: 
 	@$(CHK_DIR_EXISTS) .tmp/Unuk-QT1.0.0 || $(MKDIR) .tmp/Unuk-QT1.0.0 
-	$(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/libUnuk/Input.h ../src/libUnuk/Rect.h ../src/libUnuk/Timer.h ../src/libUnuk/Font.h ../Constants.h ../src/Unuk/Constants.h ../src/libUnuk/ApplySurface.h ../src/Unuk/Globals.h ../src/libUnuk/ImageLoader.h ../src/libUnuk/TextureManager.h ../src/libUnuk/Texture.h ../src/libUnuk/Text.h ../src/libUnuk/MapTile.h ../src/libUnuk/Map.h ../src/libUnuk/Button.h ../src/libUnuk/ButtonToggle.h ../src/libUnuk/Menu.h ../src/libUnuk/MainMenu.h ../src/libUnuk/ParticleEmitter.h ../src/libUnuk/IngameMenu.h ../src/libUnuk/Collision.h ../src/libUnuk/Character.h ../src/libUnuk/NPC.h ../src/Unuk/Player.h ../src/Unuk/Game.h ../src/libUnuk/MapElement.h ../src/libUnuk/MapEntities.h ../src/libUnuk/FPS.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.cpp ../src/Unuk/main.cpp ../src/libUnuk/Input.cpp ../src/libUnuk/Timer.cpp ../src/libUnuk/Font.cpp ../src/libUnuk/ApplySurface.cpp ../src/Unuk/Globals.cpp ../src/libUnuk/Rect.cpp ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/TextureManager.cpp ../src/libUnuk/Texture.cpp ../src/libUnuk/Text.cpp ../src/libUnuk/Map.cpp ../src/libUnuk/Button.cpp ../src/libUnuk/ButtonToggle.cpp ../src/libUnuk/ParticleEmitter.cpp ../src/libUnuk/MainMenu.cpp ../src/libUnuk/IngameMenu.cpp ../src/libUnuk/Collision.cpp ../src/libUnuk/Character.cpp ../src/libUnuk/NPC.cpp ../src/Unuk/Player.cpp ../src/Unuk/Game.cpp ../src/libUnuk/MapElement.cpp ../src/libUnuk/MapEntities.cpp ../src/libUnuk/FPS.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0
+	$(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/libUnuk/Input.h ../src/libUnuk/Rect.h ../src/libUnuk/Timer.h ../src/libUnuk/Font.h ../Constants.h ../src/Unuk/Constants.h ../src/libUnuk/ApplySurface.h ../src/Unuk/Globals.h ../src/libUnuk/ImageLoader.h ../src/libUnuk/TextureManager.h ../src/libUnuk/Texture.h ../src/libUnuk/Text.h ../src/libUnuk/MapTile.h ../src/libUnuk/Map.h ../src/libUnuk/Button.h ../src/libUnuk/ButtonToggle.h ../src/libUnuk/Menu.h ../src/libUnuk/MainMenu.h ../src/libUnuk/ParticleEmitter.h ../src/libUnuk/IngameMenu.h ../src/libUnuk/Collision.h ../src/libUnuk/Character.h ../src/libUnuk/NPC.h ../src/Unuk/Player.h ../src/Unuk/Game.h ../src/libUnuk/MapElement.h ../src/libUnuk/MapEntities.h ../src/libUnuk/FPS.h ../src/libUnuk/DialogueBox.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.cpp ../src/Unuk/main.cpp ../src/libUnuk/Input.cpp ../src/libUnuk/Timer.cpp ../src/libUnuk/Font.cpp ../src/libUnuk/ApplySurface.cpp ../src/Unuk/Globals.cpp ../src/libUnuk/Rect.cpp ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/TextureManager.cpp ../src/libUnuk/Texture.cpp ../src/libUnuk/Text.cpp ../src/libUnuk/Map.cpp ../src/libUnuk/Button.cpp ../src/libUnuk/ButtonToggle.cpp ../src/libUnuk/ParticleEmitter.cpp ../src/libUnuk/MainMenu.cpp ../src/libUnuk/IngameMenu.cpp ../src/libUnuk/Collision.cpp ../src/libUnuk/Character.cpp ../src/libUnuk/NPC.cpp ../src/Unuk/Player.cpp ../src/Unuk/Game.cpp ../src/libUnuk/MapElement.cpp ../src/libUnuk/MapEntities.cpp ../src/libUnuk/FPS.cpp ../src/libUnuk/DialogueBox.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0
 
 
 clean:compiler_clean 
@@ -241,8 +243,10 @@ Debug.o: ../src/libUnuk/Debug.cpp ../src/libUnuk/Debug.h
 
 main.o: ../src/Unuk/main.cpp ../src/libUnuk/MainMenu.h \
 		../src/Unuk/Constants.h \
-		../src/libUnuk/Button.h \
+		../src/libUnuk/FPS.h \
 		../src/Unuk/Globals.h \
+		../src/libUnuk/Timer.h \
+		../src/libUnuk/Button.h \
 		../src/libUnuk/Input.h \
 		../src/libUnuk/Text.h \
 		../src/libUnuk/ApplySurface.h \
@@ -258,7 +262,6 @@ main.o: ../src/Unuk/main.cpp ../src/libUnuk/MainMenu.h \
 		../src/libUnuk/NPC.h \
 		../src/libUnuk/Character.h \
 		../src/libUnuk/Collision.h \
-		../src/libUnuk/Timer.h \
 		../src/Unuk/Game.h \
 		../src/Unuk/Player.h \
 		../src/libUnuk/IngameMenu.h \
@@ -356,8 +359,10 @@ ParticleEmitter.o: ../src/libUnuk/ParticleEmitter.cpp ../src/libUnuk/ParticleEmi
 
 MainMenu.o: ../src/libUnuk/MainMenu.cpp ../src/libUnuk/MainMenu.h \
 		../src/Unuk/Constants.h \
-		../src/libUnuk/Button.h \
+		../src/libUnuk/FPS.h \
 		../src/Unuk/Globals.h \
+		../src/libUnuk/Timer.h \
+		../src/libUnuk/Button.h \
 		../src/libUnuk/Input.h \
 		../src/libUnuk/Text.h \
 		../src/libUnuk/ApplySurface.h \
@@ -488,6 +493,9 @@ FPS.o: ../src/libUnuk/FPS.cpp ../src/libUnuk/FPS.h \
 		../src/libUnuk/Timer.h
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o FPS.o ../src/libUnuk/FPS.cpp
 
+DialogueBox.o: ../src/libUnuk/DialogueBox.cpp ../src/libUnuk/DialogueBox.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o DialogueBox.o ../src/libUnuk/DialogueBox.cpp
+
 ####### Install
 
 install:   FORCE
diff --git a/Unuk-QT/Unuk-QT.pro b/Unuk-QT/Unuk-QT.pro
index 8654bfe..f8f3bf0 100644
--- a/Unuk-QT/Unuk-QT.pro
+++ b/Unuk-QT/Unuk-QT.pro
@@ -37,7 +37,8 @@ HEADERS += ../src/libUnuk/Debug.h \
     ../src/Unuk/Game.h \
     ../src/libUnuk/MapElement.h \
     ../src/libUnuk/MapEntities.h \
-    ../src/libUnuk/FPS.h
+    ../src/libUnuk/FPS.h \
+    ../src/libUnuk/DialogueBox.h
 SOURCES += ../src/libUnuk/Debug.cpp \
     ../src/Unuk/main.cpp \
     ../src/libUnuk/Input.cpp \
@@ -63,4 +64,5 @@ SOURCES += ../src/libUnuk/Debug.cpp \
     ../src/Unuk/Game.cpp \
     ../src/libUnuk/MapElement.cpp \
     ../src/libUnuk/MapEntities.cpp \
-    ../src/libUnuk/FPS.cpp
+    ../src/libUnuk/FPS.cpp \
+    ../src/libUnuk/DialogueBox.cpp
diff --git a/src/Unuk/main.cpp b/src/Unuk/main.cpp
index 6be7473..bacbf75 100644
--- a/src/Unuk/main.cpp
+++ b/src/Unuk/main.cpp
@@ -40,24 +40,9 @@ int main() {
   Game* game = NULL;
   MainMenu* menu = new MainMenu;
 
-  int fps;
-  int frame;
-  const int MAX_FPS = 20;
-
-  Timer frameTimer;
-  frameTimer.Start();
-
-  Timer fpsCalc;
-  fpsCalc.Start();
-
   bool menuRunning = true;
   while(menuRunning) {
-    menu->Render();
-    SDL_Flip(screen);
-
-    switch(menu->HandleInput()) {
-    case mainMenuNothing:
-      break;
+    switch(menu->Run()) {
     case mainMenuNewGame:
       delete menu;
       game = new Game;
@@ -82,28 +67,12 @@ int main() {
       delete menu;
       break;
     }
-    // Calculate and display the FPS.
-    if(fpsCalc.GetTicks() >= 1000) {
-      fps = frame / (fpsCalc.GetTicks() / 1000);
-
-      stringstream caption;
-      caption << "Unuk: fps - " << fps;
-
-      SDL_WM_SetCaption(caption.str().c_str(), NULL);
-
-      fpsCalc.Start();
-      frame = 0;
-    }
-    // Restrict the FPS.
-    if(1000 / MAX_FPS > frameTimer.GetTicks()) {
-      // SDL_Delay does not accept a float, so for higher
-      // framerate limits there is an innacuracy. This is
-      // as much as 3FPS at a limit of 60FPS.
-      SDL_Delay((1000 / MAX_FPS) - frameTimer.GetTicks());
-    }
-    frameTimer.Start();
-    frame++;
   }
+  //stringstream caption;
+  //caption << "Unuk - FPS: " << fps;
+
+  //SDL_WM_SetCaption(caption.str().c_str(), NULL);
+
   // Clean up after ourselves.
   Text::FreeFonts();
 
diff --git a/src/libUnuk/DialogueBox.cpp b/src/libUnuk/DialogueBox.cpp
new file mode 100644
index 0000000..813df99
--- /dev/null
+++ b/src/libUnuk/DialogueBox.cpp
@@ -0,0 +1 @@
+#include "DialogueBox.h"
diff --git a/src/libUnuk/DialogueBox.h b/src/libUnuk/DialogueBox.h
new file mode 100644
index 0000000..1dc5094
--- /dev/null
+++ b/src/libUnuk/DialogueBox.h
@@ -0,0 +1,13 @@
+#ifndef _DIALOGUEBOX_H_
+#define _DIALOGUEBOX_H_
+
+class DialogueBox {
+public:
+
+  void Set(void);
+
+private:
+
+};
+
+#endif
diff --git a/src/libUnuk/FPS.cpp b/src/libUnuk/FPS.cpp
index 155da68..b8608c3 100644
--- a/src/libUnuk/FPS.cpp
+++ b/src/libUnuk/FPS.cpp
@@ -1,7 +1,13 @@
 #include "FPS.h"
 
-FPS::FPS(void) {
+FPS::FPS(int maxFPSArg) {
+  _maxFPS = maxFPSArg;
 
+  _fps = 0;
+  _frame = 0;
+
+  _frameTimer.Start();
+  _fpsCalc.Start();
 }
 
 FPS::~FPS(void) {
diff --git a/src/libUnuk/FPS.h b/src/libUnuk/FPS.h
index 61249f5..04369c0 100644
--- a/src/libUnuk/FPS.h
+++ b/src/libUnuk/FPS.h
@@ -6,7 +6,7 @@
 
 class FPS {
 public:
-  FPS(void);
+  FPS(int maxFPSArg);
   ~FPS(void);
 
   void LimitFPS(void);
diff --git a/src/libUnuk/MainMenu.cpp b/src/libUnuk/MainMenu.cpp
index 09cfefa..5a58313 100644
--- a/src/libUnuk/MainMenu.cpp
+++ b/src/libUnuk/MainMenu.cpp
@@ -59,42 +59,50 @@ MainMenu::~MainMenu(void) {
 
 }
 
-mainMenuNavVal_t MainMenu::HandleInput(void) {
-  while(SDL_PollEvent(&event)) {
-    btnNewGame.CheckMouseOver();
-    if(btnNewGameActive) {
-      btnNewGameYes.CheckMouseOver();
-      btnNewGameNo.CheckMouseOver();
-    }
+mainMenuNavVal_t MainMenu::Run(void) {
+  FPS fpsLimiter(20);
 
-    btnLoadGame.CheckMouseOver();
-    btnOptions.CheckMouseOver();
-    btnExit.CheckMouseOver();
+  while(1) {
+    Render();
+    SDL_Flip(screen);
 
-    if(event.type == SDL_MOUSEBUTTONUP) {
-      if(event.button.button == SDL_BUTTON_LEFT) {
-        if(btnNewGame.CheckMouseOver())
-          btnNewGameActive = !btnNewGameActive;
-        else if(btnLoadGame.CheckMouseOver())
-          return mainMenuLoadGame;
-        else if(btnOptions.CheckMouseOver())
-          return mainMenuOptions;
-        else if(btnExit.CheckMouseOver())
-          return mainMenuOptions;
+    while(SDL_PollEvent(&event)) {
+      btnNewGame.CheckMouseOver();
+      if(btnNewGameActive) {
+        btnNewGameYes.CheckMouseOver();
+        btnNewGameNo.CheckMouseOver();
+      }
 
-        if(btnNewGameActive) {
-          if(btnNewGameYes.CheckMouseOver())
-            return mainMenuNewGame;
-          else if(btnNewGameNo.CheckMouseOver())
-            btnNewGameActive = false;
+      btnLoadGame.CheckMouseOver();
+      btnOptions.CheckMouseOver();
+      btnExit.CheckMouseOver();
+
+      if(event.type == SDL_MOUSEBUTTONUP) {
+        if(event.button.button == SDL_BUTTON_LEFT) {
+          if(btnNewGame.CheckMouseOver())
+            btnNewGameActive = !btnNewGameActive;
+          else if(btnLoadGame.CheckMouseOver())
+            return mainMenuLoadGame;
+          else if(btnOptions.CheckMouseOver())
+            return mainMenuOptions;
+          else if(btnExit.CheckMouseOver())
+            return mainMenuExitGame;
+
+          if(btnNewGameActive) {
+            if(btnNewGameYes.CheckMouseOver())
+              return mainMenuNewGame;
+//            else if(btnNewGameNo.CheckMouseOver())
+//              return btnNewGameActive = false;
+          }
         }
       }
+      else if(event.type == SDL_QUIT) {
+        return mainMenuExitGame;
+      }
     }
-    else if(event.type == SDL_QUIT) {
-      return mainMenuExitGame;
-    }
+
+    fpsLimiter.LimitFPS();
   }
-  return mainMenuNothing;
 }
 
 void MainMenu::Render(void) {
diff --git a/src/libUnuk/MainMenu.h b/src/libUnuk/MainMenu.h
index 2ffc19b..980f381 100644
--- a/src/libUnuk/MainMenu.h
+++ b/src/libUnuk/MainMenu.h
@@ -1,13 +1,14 @@
 #ifndef _MAINMENU_H_
 #define _MAINMENU_H_
+
 #include "../Unuk/Constants.h"
+#include "FPS.h"
 #include "Button.h"
 #include "Map.h"
 #include "Rect.h"
 #include "Text.h"
 
 enum mainMenuNavVal_t {
-  mainMenuNothing,
   mainMenuNewGame,
   mainMenuLoadGame,
   mainMenuOptions,
@@ -19,7 +20,7 @@ public:
   MainMenu(void);
   ~MainMenu(void);
 
-  mainMenuNavVal_t HandleInput(void);
+  mainMenuNavVal_t Run(void);
   void Render(void);
 
 private:
diff --git a/src/libUnuk/Makefile b/src/libUnuk/Makefile
index b455e5d..0fbbc53 100644
--- a/src/libUnuk/Makefile
+++ b/src/libUnuk/Makefile
@@ -2,7 +2,7 @@ CC = g++
 CFLAGS = -ansi -Wall -g
 LDADD = -lGL -lGLU -lSDL -lSDL_ttf -lSDL_gfx -lSDL_image -ltinyxml
 objects = ApplySurface.o Button.o ButtonToggle.o Character.o Collision.o \
-	    Debug.o Font.o ImageLoader.o IngameMenu.o Input.o MainMenu.o  \
+	    Debug.o DialogueBox.o Font.o FPS.o ImageLoader.o IngameMenu.o Input.o MainMenu.o  \
 	    Map.o MapElement.o MapEntities.o NPC.o ParticleEmitter.o \
 	    Rect.o Text.o Texture.o TextureManager.o Timer.o \