Weird FindObjectWithTag and Method-Access behaviour

Hey community, i have a weird situation in my source code.
The first problem is, that i can’t seem to find the player with the GameObject.FindGameObjectWithTag(“Player”). There is definitly a gameobject with that tag and other objects seem to find it without a problem but somehow this one doesn’t.

The second one is that the ‘fireRateTimer’ in the ‘void fire(…)’ is always set to 0.5f. I can see that the fireRateTimer changes in the inspector but when i try to access it in the fire method it is always 0.5.

BulletWeapon.cs :

using UnityEngine;
using System.Collections;
using System;

public class BulletWeapon: IWeapon {

    public float basicFirerate = 0.5f; // Firerate in seconds
    public float firerate;
    public float maxFirerate = 0.1f;
    public float projectileSpeed = 10;
    public float fireRateTimer;
    public GameObject bullet;
    public GameObject player;
    private PlayerControlls playerSkript;




    // Use this for initialization
    void Start () {
        bulletType = BulletType.CLASSICBULLET;
        player = GameObject.FindGameObjectWithTag("Player");
        firerate = basicFirerate;
        fireRateTimer = firerate;
    }
	
	// Update is called once per frame
	void Update () {
        if (!isPause) {
            fireRateTimer -= Time.deltaTime;
        } 
    }

    public override void fire(Vector3 v) {
        if (!isPause) {
            Vector2 target = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
            Vector2 myPos = v; // new Vector2(player.transform.position.x, player.transform.position.y);
            Vector2 direction = target - myPos;
            direction.Normalize();
            Quaternion rotation = Quaternion.Euler(0, 0, Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg);
            if (fireRateTimer <= 0) {
                Debug.Log("wtf");
                GameObject classicProjectile = (GameObject)Instantiate(bullet, myPos, rotation);
                classicProjectile.GetComponent<Rigidbody2D>().velocity = direction * projectileSpeed;
                fireRateTimer = firerate;
            } else if (fireRateTimer > 0) {
                Debug.Log("firerate > 0 it is : " + fireRateTimer);
            }

            }
    }

    public override void upgrade() {
        throw new NotImplementedException();
    }

}

and this is the class that the bulletweapon inherits from:

using UnityEngine;
using System.Collections;

public enum BulletType {
    CLASSICBULLET, LASER
}
public abstract class IWeapon: MonoBehaviour {

    protected bool isPause;

    public BulletType bulletType;

    public abstract void fire(Vector3 v);
    public abstract void upgrade();

    public void pause() {
        isPause = true;
    }

    public void unPause() {
        isPause = false;
    }
}

No ideas ? :frowning: