Smoothing Movement Vector2 List

Last month I helped someone find a way to startup their ghost system, and recently I have been trying to reuse what I gave them to make my own game. The ghost moves fine, but the movement isn’t as smooth as I would want it to be, any ideas how I could make it smoother?
Here is my script:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class GhostPlayer : MonoBehaviour {
	
	public List<Vector2> playerMove;

	public int numberOfMoves = 0;
	public bool canMove = true;
	
	void Start () { 
		controller = GetComponent<Controller2D> ();
		var go = GameObject.FindGameObjectWithTag ("Player"); 
		var original = go.GetComponent<Player> ();

		playerMove = new List<Vector2>(original.playerPos);
	}
	
	void Update () {
		if (transform.position.x == playerMove [numberOfMoves].x && transform.position.y == playerMove [numberOfMoves].y) {
			canMove = true;
		}

		if(canMove) {
			transform.position = Vector2.MoveTowards(this.transform.position, playerMove [numberOfMoves+1], Time.deltaTime * 6);
			if (transform.position.x == playerMove [numberOfMoves+1].x && transform.position.y == playerMove [numberOfMoves+1].y) {
				canMove = false;
				numberOfMoves++;
			}
		}
	}
}

I tried to remove the canMove bool but it does not seem to change much,
Thanks in advance,
NightLucidity

P.S: If you have any idea on how to make the script more efficient that would be great as well, because my overall game will be heavy and I need the tiniest amount of possible lag factors possible.

Never mind,
Tried to remove the canMove boolean again and it worked fine,
That good than for those of you wondering here is what I have now that i’m done

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class GhostPlayer : MonoBehaviour {
	
	public List<Vector2> playerMove;

	public int numberOfMoves = 0;
	
	void Start () { 
		var go = GameObject.FindGameObjectWithTag ("Player"); 
		var original = go.GetComponent<Player> ();

		playerMove = new List<Vector2>(original.playerPos);
	}
	
	void Update () {
		if (transform.position.x == playerMove [numberOfMoves].x && transform.position.y == playerMove [numberOfMoves].y) {
		}

		transform.position = Vector2.MoveTowards(transform.position, playerMove [numberOfMoves+1], Time.deltaTime * 6);
		if (transform.position.x == playerMove [numberOfMoves+1].x && transform.position.y == playerMove [numberOfMoves+1].y) {
			numberOfMoves++;
		}
	}
}