How to Stop a CoRoutine?

I have managed to create two CoRoutines, both of which work as far as I can tell!
One of them is triggered in Start() and loops indefinitely, causing the enemy to wander randomly.
The other is triggered when a player is spotted by the enemy, and causes the enemy to be startled, then chase the player.

I need the second Coroutine (AppearStartledFor) to switch off the first one (Wander), but it doesn’t seem to to work!
Here is what I have so far, any help would be much appreciated!

using UnityEngine;
using System.Collections;

public class RatLogic : MonoBehaviour {

	public Transform sightStart1, sightEnd1;
	public Transform sightStart2, sightEnd2;
	public Transform sightStart3, sightEnd3;
	public bool spotted = false;
	public bool chasing = false;
	public bool facingLeft = true;
	public GameObject exclamation;
	public float speed; 
	public int radius;
	public float RateOfDirectionChange;
	public float StartledTime;
	Vector2 waypoint;
	float step;

	void Start()
	{
		StartCoroutine (Wander(RateOfDirectionChange));
	}

	void Update()
	{
		Raycasting ();
		Spotting ();
		step = speed * Time.deltaTime;
		transform.position = Vector3.MoveTowards (transform.position, waypoint, step);
	}

	IEnumerator Wander(float RateOfDirectionChange)
	{
		waypoint = Random.insideUnitCircle * radius;
		waypoint.x += transform.position.x;
		waypoint.y += transform.position.y;
		yield return new WaitForSeconds(RateOfDirectionChange);
		StartCoroutine (Wander(RateOfDirectionChange));
	}

	IEnumerator AppearStartledFor(float seconds)
	{
		StopCoroutine (Wander(RateOfDirectionChange));
		spotted = false;
		exclamation.SetActive(true);
		yield return new WaitForSeconds(StartledTime); //Animate look of surprise!
		chasing = true;
		exclamation.SetActive(false);
	}

	void Raycasting()
	{
		Debug.DrawLine (sightStart1.position, sightEnd1.position, Color.blue);
		Debug.DrawLine (sightStart2.position, sightEnd2.position, Color.blue);
		Debug.DrawLine (sightStart3.position, sightEnd3.position, Color.blue);
		if (Physics2D.Linecast (sightStart1.position, sightEnd1.position, 1 << LayerMask.NameToLayer("Engineer")))
		{
			spotted = true;
		}
		else if (Physics2D.Linecast (sightStart2.position, sightEnd2.position, 1 << LayerMask.NameToLayer("Engineer")))
		{
			spotted = true;
		}
		else if (Physics2D.Linecast (sightStart3.position, sightEnd3.position, 1 << LayerMask.NameToLayer("Engineer")))
		{
			spotted = true;
		}
		else if (Physics2D.Linecast (sightStart1.position, sightEnd1.position, 1 << LayerMask.NameToLayer("Player")))
		{
			spotted = true;
		}
		else if (Physics2D.Linecast (sightStart2.position, sightEnd2.position, 1 << LayerMask.NameToLayer("Player")))
		{
			spotted = true;
		}
		else if (Physics2D.Linecast (sightStart3.position, sightEnd3.position, 1 << LayerMask.NameToLayer("Player")))
		{
			spotted = true;
		}
		else
		{
			spotted = false;
		}

	}

	void Spotting()
	{
		if (spotted == true) 
		{
			StartCoroutine(AppearStartledFor(StartledTime));
		} 

		if (chasing == true) 
		{
			Transform target;
	
			float speed = 4f;
	
			target = GameObject.FindWithTag ("Engineer").transform;
	
			step = speed * Time.deltaTime;
	
			transform.position = Vector3.MoveTowards (transform.position, target.position, step);
		}
	}

	void OnTriggerStay2D(Collider2D detected) 
	{
		if (detected.tag == "Engineer") 
		{
			gameObject.layer = 13;
			((RatLogic)gameObject.GetComponent<RatLogic>()).enabled = false;
		}
	}
}

http://docs.unity3d.com/ScriptReference/MonoBehaviour.StopCoroutine.html

I could be wrong but I think this is a more recent addition to the API.