diff --git a/examples/dokk/glwin.py b/examples/dokk/glwin.py
index 8a1dda0651f0ee7deff605c49e7a2ab3c5f6ad68..f57b52cd5d91ca15e61013662b71c95646fac0ca 100644
--- a/examples/dokk/glwin.py
+++ b/examples/dokk/glwin.py
@@ -113,21 +113,40 @@ class DokkGLCanvas(QGLWidget):
     self.update()
     
   def keyReleaseEvent(self, event):
+    self.emit(SIGNAL("KeyPressed"),event)
     if event.key() == Qt.Key_Escape:
       QApplication.exit()
+    elif event.key() == Qt.Key_P:
+      self.dokk.PreviousLevel()
+    elif event.key() == Qt.Key_N:
+      self.dokk.NextLevel()
+    elif event.key() == Qt.Key_Space:
+      self.dokk.GetLevel().Begin()
     
     if not self._lock_input:
       if event.key() == Qt.Key_Left or event.key() == Qt.Key_A:
         self.OnTransform(gfx.INPUT_COMMAND_TRANSX,0, gfx.TRANSFORM_VIEW, -TRANS_VAL)
         
-      if event.key() == Qt.Key_Right or event.key() == Qt.Key_D:
+      elif event.key() == Qt.Key_Right or event.key() == Qt.Key_D:
         self.OnTransform(gfx.INPUT_COMMAND_TRANSX,0, gfx.TRANSFORM_VIEW, TRANS_VAL)
         
-      if event.key() == Qt.Key_Down or event.key() == Qt.Key_S:
+      elif event.key() == Qt.Key_Down or event.key() == Qt.Key_S:
         self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0, gfx.TRANSFORM_VIEW, TRANS_VAL)
         
-      if event.key() == Qt.Key_Up or event.key() == Qt.Key_W:
+      elif event.key() == Qt.Key_Up or event.key() == Qt.Key_W:
         self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0, gfx.TRANSFORM_VIEW, -TRANS_VAL)
+
+      elif event.key() == Qt.Key_Backspace:
+        self.dokk.GetLevel().Reset()
+    
+      elif event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return:
+        self.dokk.GetLevel().Finished()
+        
+      elif event.key() == Qt.Key_E:
+        self.dokk.GetLevel().Solve()
+        
+      elif event.key() == Qt.Key_R:
+        self.dokk.GetLevel().ResetPos()
     
   def SetLockInput(self, lock):
     self._lock_input = lock
@@ -140,38 +159,38 @@ class DokkGLWin(gfx.GLWinBase):
       return fmt
     
     def __init__(self,dokk):
-        gfx.GLWinBase.__init__(self)
-        self.canvas_=DokkGLCanvas(self._CreateFormat(),dokk)
+      gfx.GLWinBase.__init__(self)
+      self.canvas=DokkGLCanvas(self._CreateFormat(),dokk)
         
     def DoRefresh(self):
       self.refresh_=True
       
     def SetLevel(self, level):
-      self.canvas_.SetLevel(level)
+      self.canvas.SetLevel(level)
       
     def Show(self, fullscreen):
       if fullscreen:
-        self.canvas_.showFullScreen()
+        self.canvas.showFullScreen()
       else:
-        self.canvas_.show()
+        self.canvas.show()
         
     def SetStereo():
       pass
     
     def SetLockInput(self, lock):
-      self.canvas_.SetLockInput(lock)
+      self.canvas.SetLockInput(lock)
     
     def Width(self):
-      return self.canvas_.width()
+      return self.canvas.width()
     
     def Height(self):
-      return self.canvas_.height()
+      return self.canvas.height()
     
     def ClearHUDObjects(self):
-      self.canvas_.hud.Clear()
+      self.canvas.hud.Clear()
     
     def RemoveHUDObject(self, hud_object):
-      self.canvas_.hud.Remove(hud_object)
+      self.canvas.hud.Remove(hud_object)
       
     def AddHUDObject(self, hud_object):
-      self.canvas_.hud.Add(hud_object)
+      self.canvas.hud.Add(hud_object)
diff --git a/examples/dokk/name_enter.py b/examples/dokk/name_enter.py
index c0090a99328de53409c80fa893f7e8852354a181..6eaa046bb7b93e211f2820cc51faaadea0ef564f 100644
--- a/examples/dokk/name_enter.py
+++ b/examples/dokk/name_enter.py
@@ -11,9 +11,13 @@ NAME_BREAK = 8000
 class NameEnter(QtCore.QObject):
   def __init__(self, parent=None):
     QtCore.QObject.__init__(self, parent)
-    self.spnav = gui.SpnavInput.GetQThread()
-    self.spnav.start()
-    
+    try:
+      self._spnav = gui.SpnavInput.GetQThread()
+      self._spnav.start()
+    except AttributeError:
+      self._spnav = None
+      
+        
     self.Reset()
     
   def Reset(self):
@@ -43,6 +47,22 @@ class NameEnter(QtCore.QObject):
       elif(self.letter_score < -LETTER_BREAK):
         self.letter_pos -=1
         self.__SetLetterPos()
+    
+  def KeyPressed(self, event):
+    if event.key() == Qt.Key_Right:
+      self.name_pos +=1
+      self.__SetNamePos()
+    elif event.key() == Qt.Key_Left:
+      self.name_pos -=1
+      self.__SetNamePos()
+    elif event.key() == Qt.Key_Up:
+      self.letter_pos +=1
+      self.__SetLetterPos()
+    elif event.key() == Qt.Key_Down:
+      self.letter_pos -=1
+      self.__SetLetterPos()
+    elif event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return:
+      self.emit(QtCore.SIGNAL("Finished()"))
         
   def ToggleInputMode(self, button):
     if button == 10:
@@ -53,13 +73,17 @@ class NameEnter(QtCore.QObject):
   
   def Start(self):
     self.Reset()
-    QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged)
-    QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode)     
+    if self._spnav:
+      QtCore.QObject.connect(self._spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged)
+      QtCore.QObject.connect(self._spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode)     
+    self.connect(dokk.Dokk().gl_win.canvas, QtCore.SIGNAL("KeyPressed"),self.KeyPressed)
     
   def Stop(self):
-    QtCore.QObject.disconnect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged)
-    QtCore.QObject.disconnect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode)
-      
+    if self._spnav:
+      QtCore.QObject.disconnect(self._spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged)
+      QtCore.QObject.disconnect(self._spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode)
+    self.disconnect(dokk.Dokk().gl_win.canvas, QtCore.SIGNAL("KeyPressed"),self.KeyPressed)
+    
   def __SetLetterPos(self):
     self.letter_pos = self.letter_pos % self.al_len
     self.__SetName()
diff --git a/examples/dokk/spnav_input.py b/examples/dokk/spnav_input.py
index 82b873d747359a62570370f8d711ed5ac151eb5e..b0eed4b5446ae87b0260b1ef0bfeba69509414bb 100644
--- a/examples/dokk/spnav_input.py
+++ b/examples/dokk/spnav_input.py
@@ -9,11 +9,14 @@ class SpnavInputDevice(QtCore.QObject):
   def __init__(self, gfx_win, parent=None):
     QtCore.QObject.__init__(self, parent)
     self.refresh_rate_ = DEFAULT_REFRESHRATE
-    self.spnav = gui.SpnavInput.GetQThread()
-    self.spnav.start()
-    self.gfx_win = gfx_win
-    QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged)
-    QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode)     
+    try:
+      self.spnav = gui.SpnavInput.GetQThread()
+      self.spnav.start()
+      self.gfx_win = gfx_win
+      QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged)
+      QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode)     
+    except AttributeError:
+      pass #No SpaceNav Support
     
     self.trans = True
     self.rot = True