diff --git a/src/agent.cpp b/src/agent.cpp
index 28dace14f631522e2016236d6132b59de98cd03d..40e3dbff9d3565c9102faa1faa75299c70a438f1 100644
--- a/src/agent.cpp
+++ b/src/agent.cpp
@@ -165,14 +165,6 @@ int Agent::getUnum() {
   return world().self().unum();
 }
 
-void Agent::setLastActionStatusCollision(bool may_fix, bool likely_success) {
-  if (likely_success || may_fix) {
-    last_action_status = true;
-  } else {
-    last_action_status = false;
-  }
-}
-
 bool Agent::initImpl(CmdLineParser & cmd_parser) {
     bool result = PlayerAgent::initImpl(cmd_parser);
 
@@ -270,10 +262,12 @@ void Agent::actionImpl() {
 
   switch(requested_action) {
     case DASH:
-      setLastActionStatusCollision(may_fix, this->doDash(params[0], params[1]));
+      last_action_status = this->doDash(params[0], params[1]);
+      last_action_status |= wm.self().collidesWithPost(); // Can sometimes get out of collision
       break;
     case TURN:
-      setLastActionStatusCollision(may_fix, this->doTurn(params[0]));
+      last_action_status = this->doTurn(params[0]);
+      last_action_status |= wm.self().collidesWithPost(); // ditto
       break;
     case TACKLE:
       last_action_status = this->doTackle(params[0], false);
@@ -290,22 +284,23 @@ void Agent::actionImpl() {
       break;
     case MOVE_TO:
       if (feature_extractor != NULL) {
-        setLastActionStatusCollision(may_fix,
-				     Body_GoToPoint(Vector2D(feature_extractor->absoluteXPos(params[0]),
-							     feature_extractor->absoluteYPos(params[1])), 0.25,
-						    ServerParam::i().maxDashPower()).execute(this));
+	last_action_status = Body_GoToPoint(Vector2D(feature_extractor->absoluteXPos(params[0]),
+						     feature_extractor->absoluteYPos(params[1])), 0.25,
+					    ServerParam::i().maxDashPower()).execute(this);
+	last_action_status |= wm.self().collidesWithPost(); // can get out of collision w/post
       }
       break;
     case DRIBBLE_TO:
       if (feature_extractor != NULL) {
-        setLastActionStatusCollision(may_fix,
-				     Body_Dribble(Vector2D(feature_extractor->absoluteXPos(params[0]),
-							   feature_extractor->absoluteYPos(params[1])), 1.0,
-						  ServerParam::i().maxDashPower(), 2).execute(this));
+        last_action_status = Body_Dribble(Vector2D(feature_extractor->absoluteXPos(params[0]),
+						   feature_extractor->absoluteYPos(params[1])), 1.0,
+					  ServerParam::i().maxDashPower(), 2).execute(this);
+	last_action_status |= wm.self().collidesWithPost(); // ditto
       }
       break;
     case INTERCEPT:
-      setLastActionStatusCollision(may_fix, Body_Intercept().execute(this));
+      last_action_status = Body_Intercept().execute(this);
+      last_action_status |= wm.self().collidesWithPost(); // ditto
       break;
     case MOVE:
       last_action_status = this->doMove();
@@ -914,13 +909,13 @@ Agent::doDribble()
   M_action_generator = ActionGenerator::ConstPtr(g);
   ActionChainHolder::instance().setFieldEvaluator( M_field_evaluator );
   ActionChainHolder::instance().setActionGenerator( M_action_generator );
-  success = doPreprocess();
+  bool preprocess_success = doPreprocess();
   ActionChainHolder::instance().update( world() );
-  if (Bhv_ChainAction(ActionChainHolder::instance().graph()).execute(this)) {
+  if (Bhv_ChainAction(ActionChainHolder::instance().graph()).execute(this) ||
+      preprocess_success) {
     return true;
-  } else {
-    return success;
   }
+  return false;
 }
 
 /*-------------------------------------------------------------------*/
diff --git a/src/agent.h b/src/agent.h
index 2465656976b59a44ce077f935cc33b0ac53ea8df..a753fa8c27c55673f7672c66a906fff2a25c3199 100644
--- a/src/agent.h
+++ b/src/agent.h
@@ -99,7 +99,6 @@ protected:
   bool doDefendGoal();
   bool doGoToBall();
   bool doNewAction1();
-  void setLastActionStatusCollision(bool may_fix, bool likely_success);
 
 
   Communication::Ptr M_communication;