diff --git a/examples/dokk/datafiles/dengue/level.ini b/examples/dokk/datafiles/dengue/level.ini
index 2dc60d7540cb54adcca25dbdbd856566609c006e..3e666df05021115d25363e49ed685e5b9226174e 100644
--- a/examples/dokk/datafiles/dengue/level.ini
+++ b/examples/dokk/datafiles/dengue/level.ini
@@ -3,6 +3,7 @@ NAME: Dengue Virus
 DIFFICULTY: Easy
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/datafiles/dengue/top_ten.ini b/examples/dokk/datafiles/dengue/top_ten.ini
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c9383bdcbd6a9605ed18b49f684216bfbe3f8df5 100644
--- a/examples/dokk/datafiles/dengue/top_ten.ini
+++ b/examples/dokk/datafiles/dengue/top_ten.ini
@@ -0,0 +1,4 @@
+[1]
+score = 2.11296811104
+name = STU
+
diff --git a/examples/dokk/datafiles/glyoxalase/level.ini b/examples/dokk/datafiles/glyoxalase/level.ini
index 00bff0f11b8afb2ffee1294b00ccb087f10b09d1..c971889d63fd8c850b18a05ba8dfdd2da52cb311 100644
--- a/examples/dokk/datafiles/glyoxalase/level.ini
+++ b/examples/dokk/datafiles/glyoxalase/level.ini
@@ -3,6 +3,7 @@ NAME: Glyoxalase
 DIFFICULTY: Chuck Norris like..
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/datafiles/glyoxalase/top_ten.ini b/examples/dokk/datafiles/glyoxalase/top_ten.ini
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4206ef2bcf6c53522cdbab09ff58d8cfad5e9911 100644
--- a/examples/dokk/datafiles/glyoxalase/top_ten.ini
+++ b/examples/dokk/datafiles/glyoxalase/top_ten.ini
@@ -0,0 +1,4 @@
+[1]
+score = 2.234915483
+name = STU
+
diff --git a/examples/dokk/datafiles/retinol/level.ini b/examples/dokk/datafiles/retinol/level.ini
index bb8537a0a2ff8259e60a249e6e607b08c444183c..a6f78d513aff78fdc302d88391afb574b46c8d3b 100644
--- a/examples/dokk/datafiles/retinol/level.ini
+++ b/examples/dokk/datafiles/retinol/level.ini
@@ -1,8 +1,9 @@
 [Level]
 NAME: Retinol Bindung
-DIFFICULTY: Chuck Norris like..
+DIFFICULTY: Hard
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/datafiles/thrombin/level.ini b/examples/dokk/datafiles/thrombin/level.ini
index 82b8c9afab5d9c8f320762f9ec4d7181c5957c18..7541f228f389bb824c8c3eed3f095fcbecbe43f2 100644
--- a/examples/dokk/datafiles/thrombin/level.ini
+++ b/examples/dokk/datafiles/thrombin/level.ini
@@ -3,6 +3,7 @@ NAME: Thrombin
 DIFFICULTY: Medium
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -18,10 +19,10 @@ TEXTTIME1: 5000
 TEXT2: Mit diesem Spiel wird Ihnen demonstriert wie ein...
 TEXTTIME2: 1000
 
-TEXT3: Sie k�nnen mit dem 3D-Input Device den Liganden sowohl drehen als auch verschieben.
+TEXT3: Sie k�nnen mit dem 3D-Input Device den Liganden sowohl drehen als auch verschieben.
 TEXTTIME3: 3000
  
-TEXT4: Falls Fragen bestehen, k�nnen Sie sich gerne an eine unserer Fachkr�fte wenden.
+TEXT4: Falls Fragen bestehen, k�nnen Sie sich gerne an eine unserer Fachkr�fte wenden.
 TEXTTIME4: 3000
 
 TEXT5: So nun kann es los gehen.
@@ -128,4 +129,4 @@ FRAMESKIP: 12
 RMSD: 0
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/datafiles/thrombin/top_ten.ini b/examples/dokk/datafiles/thrombin/top_ten.ini
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fd278ffe3f7a651d32cf1e70fd23fb4c5e8b4e5d 100644
--- a/examples/dokk/datafiles/thrombin/top_ten.ini
+++ b/examples/dokk/datafiles/thrombin/top_ten.ini
@@ -0,0 +1,4 @@
+[1]
+score = 45.1562461853
+name = GAA
+
diff --git a/examples/dokk/datafiles/thrombinNoH/level.ini b/examples/dokk/datafiles/thrombinNoH/level.ini
index db51d6dfbde891d7f41cec1424ca7ff0986e91b6..fae1fcdf4db36ddd1514f76bb1c8bbb262d92408 100644
--- a/examples/dokk/datafiles/thrombinNoH/level.ini
+++ b/examples/dokk/datafiles/thrombinNoH/level.ini
@@ -3,6 +3,7 @@ NAME: Thrombin no H
 DIFFICULTY: Mittelschwer
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/glwin.py b/examples/dokk/glwin.py
index f57b52cd5d91ca15e61013662b71c95646fac0ca..2f3ade599fc86de1144f49c0c6c46328c4cf5612 100644
--- a/examples/dokk/glwin.py
+++ b/examples/dokk/glwin.py
@@ -62,6 +62,7 @@ class DokkGLCanvas(QGLWidget):
     painter.drawText(QPoint(self.width()-100, 20), "%.0f seconds left" % self.dokk.GetLevel().GetRemainingTime())
     if self.hud is not None:
       self.hud.Paint(painter)
+    self.dokk.GetLevel().CheckSolved()
       
   def resizeGL(self, w, h):
     gfx.Scene().Resize(w, h)
@@ -70,9 +71,9 @@ class DokkGLCanvas(QGLWidget):
     self.last_point_=QPoint(event.x(), event.y())
 
   def mouseMoveEvent(self, event):
+    delta=QPoint(event.x(), event.y())-self.last_point_
+    self.last_point_=QPoint(event.x(), event.y())
     if not self._lock_input:
-      delta=QPoint(event.x(), event.y())-self.last_point_
-      self.last_point_=QPoint(event.x(), event.y())
       if event.buttons() & Qt.LeftButton:
         tf=gfx.Scene().GetTransform()      
         if event.modifiers() & Qt.ShiftModifier:
@@ -88,23 +89,22 @@ class DokkGLCanvas(QGLWidget):
             self.dokk.GetLevel().RotateAxis(tf.GetRot().GetRow(1), delta.x()*0.005)
         self.dokk.GetLevel().UpdateScores()
         self.update()
-      elif event.buttons() & Qt.RightButton:
-        if delta.y()!=0:
-          gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
-                                           gfx.INPUT_COMMAND_ROTX, delta.y()*0.5),
-                            False)
-        if delta.x()!=0:
-          gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
-                                           gfx.INPUT_COMMAND_ROTY, delta.x()*0.5),
-                            False)
-        self.update()
+    if event.buttons() & Qt.RightButton:
+      if delta.y()!=0:
+        gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
+                                         gfx.INPUT_COMMAND_ROTX, delta.y()*0.5),
+                          False)
+      if delta.x()!=0:
+        gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
+                                         gfx.INPUT_COMMAND_ROTY, delta.x()*0.5),
+                          False)
+      self.update()
   def mouseDoubleClickEvent(self, event):
     if not self._lock_input:
       self.dokk.GetLevel().SetPivot(event.x(), self.height()-event.y())
   def wheelEvent(self, event):
-    if not self._lock_input:
-      self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0,gfx.TRANSFORM_VIEW,
-                0.1*(-event.delta()))
+    self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0,gfx.TRANSFORM_VIEW,
+              0.1*(-event.delta()))
 
 
   def OnTransform(self,com, indx, trg, val):
diff --git a/examples/dokk/level.py b/examples/dokk/level.py
index 76b4bdb30b277156944c8f7c2f92deebf083c3c8..edbede190218ae0c73288aa9015e9cf2dc7a116f 100644
--- a/examples/dokk/level.py
+++ b/examples/dokk/level.py
@@ -111,6 +111,7 @@ class Level(QtCore.QObject):
   def Reset(self):
     self.endtime = 0
     self.stop_time = 0
+    self._started = False
     self.timer.stop()
     self.CleanHUD()
     self.ResetPos()
@@ -164,6 +165,14 @@ class Level(QtCore.QObject):
     self.protein.Close()
     self.ligand.Close()
 
+  def CheckSolved(self):
+    goal = float(self.config.Level["GOAL"])
+    if self.GetRMSD()< goal:
+      self.Finished()
+    
+  def IsStarted(self):
+    return self._started
+  
   def _IntroEnd(self):
     if self._started:
       Dokk().gl_win.SetLockInput(False)
diff --git a/examples/dokk/level_info.py b/examples/dokk/level_info.py
index 934a4beae4589108ccfec043b42c1bfd53690dc1..759147ef19df5df43a1bd357ab245c6618560d05 100644
--- a/examples/dokk/level_info.py
+++ b/examples/dokk/level_info.py
@@ -11,7 +11,10 @@ class LevelInfo(QtCore.QObject):
     self.timer = QtCore.QTimer()
     self.timer.setSingleShot(True)
     
-    self.highscore = HighScore(level.topten)
+    if bool(int(level.config.Level["SAVE"])):
+      self.highscore = HighScore(level.topten)
+    else:
+      self.highscore = None
     self.level_info = LevelDetails(level.config.Level["NAME"],level.config.Level["DIFFICULTY"])
     self.connect(level,QtCore.SIGNAL("Started()"),self.Finish)
     self.connect(level,QtCore.SIGNAL("Stopped()"),self.Start)
@@ -25,12 +28,14 @@ class LevelInfo(QtCore.QObject):
     
   def Finish(self):
     self.start = False
-    self.highscore.Finish()
+    if self.highscore:
+      self.highscore.Finish()
     self.level_info.Finish()
     
   def Timeout(self):
     if self.start:
-      self.highscore.Start()
+      if self.highscore:
+        self.highscore.Start()
       self.level_info.Start()
    
       
diff --git a/examples/dokk/spnav_input.py b/examples/dokk/spnav_input.py
index b0eed4b5446ae87b0260b1ef0bfeba69509414bb..d079fe6c4cd66660e3efb23fc54afeb6fe2ea220 100644
--- a/examples/dokk/spnav_input.py
+++ b/examples/dokk/spnav_input.py
@@ -66,7 +66,11 @@ class SpnavInputDevice(QtCore.QObject):
       dokk.Dokk().NextLevel()
     elif button == 6:
       QtGui.QApplication.exit()
-        
+    elif button == 13:
+      self.level.ResetPos()
+    elif button == 12 and not self.level.IsStarted():
+      self.level.Solve()
+    
     if (not self._lock_input):
       if button == 0:
         self.trans = not self.trans
@@ -84,7 +88,3 @@ class SpnavInputDevice(QtCore.QObject):
         self.level.Finished()
       elif button == 11:
         self.level.Finished()
-      elif button == 12:
-        self.level.Solve()
-      elif button == 13:
-        self.level.ResetPos()