Trouble With Disableing a Function

Okay so I have been working on an FPS, (like most people) and i need to disable my Reload function while I’m shooting my gun. I can get it to work by putting if(!Firing){return} at the beginning of the function and it won’t reload at all. Even when I’m all out of ammo. Any help would be appreciated.

var fireRate : float = .5;

var bulletShell : Transform;

var BulletShellSpead : float;

var MuzzleFlash : Transform;

var Smoke : Transform;

var Sound : AudioClip;

var strayFactor : float;

var bulletPrefab : Transform;
var bulletSpeed : int;

var GrenadeSpeed : float;
var Grenade : Transform;
var GrenadeAmmo : int;

var MaxAmmo : int;
var CurrentClip : int = 10;
var CurrentExtraAmmo : int = 100;
var ClipSize : int = 10;

var ReloadTime : float;
var ClickSound : AudioClip;
var ReloadSound : AudioClip;
var Reloading : boolean = false;

var Firing : boolean = false;

private var nextFire = .5;

function LateUpdate()
{
	if(GrenadeAmmo < 0)
		GrenadeAmmo = 0;
		
	if(CurrentClip < 0)
	CurrentClip = 0;
	
	if(CurrentClip > MaxAmmo)
		CurrentClip = MaxAmmo;	
		
	if(Input.GetButtonDown("Fire1")&& CurrentClip <= 0)
		{
			NoAmmo();
		}
}

function Update() 
{
		if(Input.GetKeyDown(KeyCode.R))
		{
			Reload();
		}
		
		if(Input.GetKeyDown(KeyCode.E))
			{
				GrenadeThrow();
			}
		if(CurrentClip > 0)
		{
			if(Input.GetButtonDown("Fire1") && Time.time > nextFire)
			{
			nextFire = Time.time + fireRate;
			
			Firing = true;
			print("ouch");
			
			Shoot();
		
			var bulletShell = Instantiate(bulletShell, GameObject.Find("Spawn3").transform.position, Quaternion.identity);
			bulletShell.rigidbody.AddForce(transform.right * BulletShellSpead);
		
			var MuzzleFlash = Instantiate(MuzzleFlash, GameObject.Find("Spawn").transform.position, Quaternion.identity);
		
			var Smoke = Instantiate(Smoke, GameObject.Find("Spawn").transform.position, Quaternion.identity);
	
			animation.Play("PistolShoot");	
			audio.PlayOneShot(Sound);
			
			Firing = false;
			}	
		}
}

function GrenadeThrow()
{
	if(GrenadeAmmo > 0)
		{
			var grenade = Instantiate(Grenade, transform.position, Quaternion.identity);
			grenade.rigidbody.AddForce(transform.forward * GrenadeSpeed);
		}
			GrenadeAmmo --;
}

function Shoot()
{
	var randomNumberX = Random.Range(-strayFactor, strayFactor);
	var randomNumberY = Random.Range(-strayFactor, strayFactor);
	var randomNumberZ = Random.Range(-strayFactor, strayFactor);
		
	var bullet = Instantiate(bulletPrefab, GameObject.Find("Spawn").transform.position, transform.rotation);
	
	bullet.transform.Rotate(randomNumberX, randomNumberY, randomNumberZ);
	bullet.rigidbody.AddForce(bullet.transform.forward * bulletSpeed);
			
	bullet.tag = "Bullet";
	CurrentClip --;
}

function Reload()
{	
	if(!Firing)
	{
	return;
	}

	if(CurrentExtraAmmo <= 0)
	{
		NoAmmo();
	}
	else
	{
	if(CurrentClip <= 14)
	{
	Reloading = true;
	
	animation.Play("Reload");
	audio.PlayOneShot(ReloadSound);
	}
	yield WaitForSeconds(ReloadTime);

	Reloading = false;

	if(CurrentExtraAmmo >= ClipSize - CurrentClip)
	{
		CurrentExtraAmmo -= ClipSize - CurrentClip;
		CurrentClip = ClipSize;
	}
	
	if(CurrentExtraAmmo <= ClipSize - CurrentClip)
	{
		CurrentClip += CurrentExtraAmmo;
		CurrentExtraAmmo = 0;
		}
	
	}
	
	
}
function NoAmmo()
{
	Firing = false;
	animation.Play("Emepty");
	audio.PlayOneShot(ClickSound);
}

function OnGUI()
{
	if(CurrentClip <= 5)
	{
	GUI.contentColor = Color.red;
	}

	GUI.Box(Rect(Screen.width / 1.16, Screen.height / 80, 100, 20), ""+ CurrentClip + "/" + CurrentExtraAmmo);
}

Firing = false; should be when Input.GetButtonUp("Fire1) is true, not Down.

By the way, not that it’s important but, why do you use Update and LateUpdate ? I don’t see a real reason here, besides being called after Update, but putting it at the end of Update would have the same effect.