       else if DoubleHelper.compare(@currentPosition.getY(), target.getY())
         horizontalMove()
       else
-        if @grid.shouldIMoveHorizontal(@currentPosition, target)
+        wasHorizontal = @latestDirectionFromJunction is Direction.HORIZONTAL
+        wasVertical = @latestDirectionFromJunction is Direction.VERTICAL
+        shouldBeHorizontal = @grid.shouldIMoveHorizontal(@currentPosition, target)
+        if (shouldBeHorizontal and (not wasHorizontal)) or ((not shouldBeHorizontal) and wasVertical)
+          @latestDirectionFromJunction = Direction.HORIZONTAL
           horizontalMove()
         else
+          @latestDirectionFromJunction = Direction.VERTICAL
           verticalMove()
 
   getCurrentPosition: () ->

    @RIGHT = 1
    @DOWN = 2
    @LEFT = 3

  constructor: (source, grid) ->
    @source = $(source)


    if @grid.isACrossStreet(@currentPosition)
      @currentStreetDirection = StreetDirection.CROSS
    else
      @latestDirectionFromJunction = Direction.UNKNOWN

    callback = () => @_moveTo(target)

