Collision Damage, Hit points and Instantiate

HI everyone,

I am having a bit of a hard time trying to understand what I am doing here :) I want to apply damage to a gameObject with the weapon. This part is done. I also want this game object to receive damage if it falls. Say, I shoot it, I take 10% of its health, it falls, and the fall takes another percent of its health. Based on the fps tutorial; I have to say that my game object has a healthy prefab, a damaged prefab 1 (damage state) and a damaged prefab 2(completely destroyed); Everything works great up until I have a few more objects up close and this results in instantiating madness (so many instances that the engine hangs) Here's my script:

var hitPoints = 100.0;
var detonationDelay = 0.0;
var deadReplacement : GameObject;
var damage = 10;

function OnCollisionEnter(collision : Collision) {
  if (collision.relativeVelocity.magnitude > 5)

hitPoints -= damage;
if (hitPoints <= 10) {
Invoke("DelayedDetonate", detonationDelay);
}
 }

 function ApplyDamage (damage : float) {

 if (hitPoints <= 0.0)
    return;

hitPoints -= damage;
if (hitPoints <= 0.0) {

    var emitter : ParticleEmitter = GetComponentInChildren(ParticleEmitter);
    if (emitter)
        emitter.emit = true;

    Invoke("DelayedDetonate", detonationDelay);
}
  }

 function DelayedDetonate () {
BroadcastMessage ("Detonate");

}

 function Detonate () {

Destroy(gameObject);
if (deadReplacement) {
var dead : GameObject = Instantiate(deadReplacement, transform.position,    transform.rotation);

   }

}

I am doing something wrong and I have no clue where to look, any help is greatly appreciated.

Perhaps when an object is destroyed, it collides with other such damageable objects, causing a chain-reaction of destruction? You could put a check for this at the top of OnCollisionEnter to check the collider (name, type, tag, whatever) to see if it's the same type, and not react to itself-sorta.