diff --git a/registration-system/view/signups/game1/js/character.js b/registration-system/view/signups/game1/js/character.js
index dd965075127f7cb6e946864d5f142c50fad429aa..2ead572408ea081aadf5a37695c8127ca624c5d8 100644
--- a/registration-system/view/signups/game1/js/character.js
+++ b/registration-system/view/signups/game1/js/character.js
@@ -109,25 +109,26 @@ Char.prototype.animate = function() {
 };
 Char.prototype.physics = function() {
 	if (this.moveTarget && this.moveTarget.length == 0) return;
+
 	if (Vec.equals(this.translation, this.moveTarget[0])) {
 		this.moveTarget.shift();
-		return;
-	}
-
-	var v = Vec.add(Vec.flipSign(this.translation), this.moveTarget[0]);
-	var d = Vec.length(v);
+	} else {
+		var stuckFixer = 0;
+		do {
+			var v = Vec.add(Vec.flipSign(this.translation), this.moveTarget[0]);
+			var d = Vec.length(v);
 
-	if (d > this.maxSpeed) {
-		var n = Vec.mul(v, 1/d); // normalized
-		v = Vec.mul(n, this.maxSpeed);
-	}
+			if (d > this.maxSpeed) {
+				var n = Vec.mul(v, 1 / d); // normalized
+				v = Vec.mul(n, this.maxSpeed + stuckFixer);
+			}
+			stuckFixer += 0.5;
 
-	var nextPosition = (d < g_smallValue) ? this.moveTarget[0] : Vec.add(this.translation, v);
+			var nextPosition = (d < g_smallValue) ? this.moveTarget[0] : Vec.add(this.translation, v);
+		} while (!this.pathFinder.canWalkOn(nextPosition[0], nextPosition[1]));
 
-	if (this.pathFinder.canWalkOn(nextPosition[0], nextPosition[1]))
 		Vec.assign(this.translation, nextPosition);
-	else
-		this.moveTarget.shift();
+	}
 
 	Game.eventHandler.triggerEventOn('walkon', this.translation[0], this.translation[1]);
 
diff --git a/registration-system/view/signups/game1/js/events.js b/registration-system/view/signups/game1/js/events.js
index ef8d2ecf2c6f0501fce3c7525e391b02ef06b443..9918bc9406c66f864726f544a058cb6058ef2150 100644
--- a/registration-system/view/signups/game1/js/events.js
+++ b/registration-system/view/signups/game1/js/events.js
@@ -32,18 +32,28 @@ EventHandler.prototype.hasEventOn = function (trigger, x, y) {
     return this.getEventOn(trigger, x, y) !== undefined;
 };
 
-EventHandler.prototype.getEventOn = function(trigger, x, y) {
+EventHandler.prototype.getEventOn = function(trigger, x, y, callback) {
+    if (!this.walkOnEvents) this.walkOnEvents = {}; // currently active events
+
     for (var i = 0; i < this.eventNodes[trigger].length; ++i) {
-        if (this.eventNodes[trigger][i].path.isInside(x, y)) {
-            return this.eventNodes[trigger][i];
+        var node = this.eventNodes[trigger][i];
+        if (node.path.isInside(x, y)) {
+            if (!this.walkOnEvents[node.id]) {
+                this.walkOnEvents[node.id] = true;
+                callback(node, true);
+            }
+        } else {
+            delete this.walkOnEvents[node.id];
         }
     }
     return undefined;
 };
 
 EventHandler.prototype.triggerEventOn = function (trigger, x, y) {
-    var event = this.getEventOn(trigger, x, y);
-    if (event) this.handleEvent(event, {trigger: trigger, x: x, y: y});
+    var self = this;
+    this.getEventOn(trigger, x, y, function(event, bEnter) {
+        self.handleEvent(event, {trigger: trigger, x: x, y: y, bEnter: bEnter});
+    });
 };
 
 /**
@@ -58,12 +68,10 @@ EventHandler.prototype.triggerEventOn = function (trigger, x, y) {
  * @param event
  */
 EventHandler.prototype.handleEvent = function (event, context) {
-    if (context.trigger == 'walkon')
-        console.log('walkon');
-
     switch (event.type) {
         case 'achievement':
-            Game.achievements.triggerAchievement(event.id, context);
+            if (context.bEnter)
+                Game.achievements.triggerAchievement(event.id, context);
             break;
         case 'mapchange':
             Game.instance.nextMap(event.destination, event.target);