diff --git a/registration-system/view/signups/game1/js/achievements.js b/registration-system/view/signups/game1/js/achievements.js
index a85e8c27c3f375340ca3967473f355af5090a5aa..6ed22f4331ba98791f0c8ab818a8c4a0a7d4a914 100644
--- a/registration-system/view/signups/game1/js/achievements.js
+++ b/registration-system/view/signups/game1/js/achievements.js
@@ -2,7 +2,12 @@ function Achievements() {
     this.achievements = {
         'started_game': 'Bestes Anmeldesystem gestartet',
         'first_step': 'Erster Schritt getan',
-        'some_water': 'An frischem Brunnenwasser gerochen',
+        'some_water': {
+            message: 'An frischem Brunnenwasser gerochen',
+            condition: function(context) {
+                return euclidianDistance(Game.char.translation[0], Game.char.translation[1], context.x, context.y) < 150;
+            }
+        },
         'saw_devs1': 'Wilde Informatiker auf Wiese gesehen',
         // TODO: add more!
         'achievement42': 'You just found the answer to everything!'
@@ -54,15 +59,30 @@ Achievements.prototype.logMessage = function (message) {
     list.insertBefore(newElem, list.childNodes[0]);
 };
 
-Achievements.prototype.triggerAchievement = function (achievementId) {
+Achievements.prototype.getMessage = function (achievementId) {
+    if (typeof this.achievements[achievementId] === 'object') {
+        return this.achievements[achievementId].message;
+    }
+    return this.achievements[achievementId];
+};
+
+Achievements.prototype.isTriggerable = function (achievementId, context) {
+    var achievement = this.achievements[achievementId];
+    if (typeof achievement === 'object' && 'condition' in achievement){
+        return achievement.condition(context);
+    }
+    return true;
+};
+
+Achievements.prototype.triggerAchievement = function (achievementId, context) {
     if (!this.achievements[achievementId]){
         console.error("No such achievement: " + achievementId);
     }
-    else if (! (this.achievedAchievements.indexOf(achievementId) >= 0)) {
+    else if (this.achievedAchievements.indexOf(achievementId) < 0 && this.isTriggerable(achievementId, context)) {
         this.achievedAchievements.push(achievementId);
         this.updateStatusBar();
         this.updateStatusText();
-        this.logMessage(this.achievements[achievementId]);
+        this.logMessage(this.getMessage(achievementId));
     }
     // else console.warn("Achievement already achieved: " + achievementId);
 
diff --git a/registration-system/view/signups/game1/js/events.js b/registration-system/view/signups/game1/js/events.js
index 0c73e37a06a45a0c25562e28405dea6ccb962f2a..710c1e5b3d8fc7b9d2f737992ea0715caa3c35ae 100644
--- a/registration-system/view/signups/game1/js/events.js
+++ b/registration-system/view/signups/game1/js/events.js
@@ -41,7 +41,7 @@ EventHandler.prototype.getEventOn = function(trigger, x, y) {
 
 EventHandler.prototype.triggerEventOn = function (trigger, x, y) {
     var event = this.getEventOn(trigger, x, y);
-    if (event) this.handleEvent(event);
+    if (event) this.handleEvent(event, {trigger: trigger, x: x, y: y});
 };
 
 /**
@@ -55,10 +55,10 @@ EventHandler.prototype.triggerEventOn = function (trigger, x, y) {
  *
  * @param event
  */
-EventHandler.prototype.handleEvent = function (event) {
+EventHandler.prototype.handleEvent = function (event, context) {
     switch (event.type) {
         case 'achievement':
-            Game.achievements.triggerAchievement(event.id);
+            Game.achievements.triggerAchievement(event.id, context);
             break;
     }
 
diff --git a/registration-system/view/signups/game1/js/svgUtils.js b/registration-system/view/signups/game1/js/svgUtils.js
index 3714798e1dd708bc39e867e252561e912f29d01e..03b8f95997bbbb846223161f18e549f36f78a0c2 100644
--- a/registration-system/view/signups/game1/js/svgUtils.js
+++ b/registration-system/view/signups/game1/js/svgUtils.js
@@ -12,6 +12,9 @@ function getTranslation(svg, node) {
 	return [matrix.e, matrix.f];
 }
 
+function euclidianDistance(a_x, a_y, b_x, b_y){
+	return Math.sqrt((a_x-b_x)*(a_x-b_x) + (a_y-b_y)*(a_y-b_y));
+}
 
 function Path(svgPathData, offset) {
 	this.edges = [];