Hi Peach and J,
I have tried moving things around and adding different variables to “trap”, but still no go 
this is pretty much the entire code:
------------------------------------------------------------------
-- interception -- game over
------------------------------------------------------------------
local fnGameOver = function(self,event)
if event.phase == "began" then
self:removeSelf()
self = nil
isGameOver = true
end
end
------------------------------------------------------------------
-- remove self if reached the top --
------------------------------------------------------------------
local removeSelfTop = function( self, event )
if (event.phase == "began" and event.other.myName == "topWall" then
self.parent:remove( self )
self = nil
score = score+1
end
end
------------------------------------------------------------------
-- A collision listener to combine ballA and ballB --
------------------------------------------------------------------
local bCollidesA = function(self, event )
if (event.phase == "began" and event.other.myName == "ballB") then
audio.play( hitSound )
-- convert ballA into ballC and position at ball's b x/y
local ballC = display.newImage("ballC.png", self.x, self.y)
--physics.addBody( ballC, { bounce=0.1, radius=18 } )
ballC.myName = "ballC"
-- remove ballA
event.other:removeSelf()
event.other = nil
--remove ballA
self:removeSelf()
self = nil
-- move ball up
transToballC = transition.to(ballC, {time=3000, y=72})
-- collision detection
ballCObject.collision = removeSelfTop
ballCObject:addEventListener( "collision", ballCObject)
localGroup:insert(ballC)
end
end
------------------------------------------------------------------
-- SPAWN SETUP --
------------------------------------------------------------------
--\> BallA spawn
local fnBallA = function()
local fnRemoveA = function (ballAObject)
if (ballAObject ~= nil) or (ballAObject.transToballA ~= nil) then
transition.cancel(transToballA)
ballAObject:removeSelf()
end
end
local ballAObject = display.newImage( "ballA.png" )
ballAObject.x = math.random(40,400); ballAObject.y = 300
physics.addBody( ballAObject, { bounce=0.6, radius=16 } )
ballAObject.myName = "ballA"
ballAObject.isHit = false
ballAObject.alpha = 0.1
transition.to(ballAObject, { time=1000, alpha=1.0 })
ballAObject.transToballA = transition.to(ballAObject, {time=6000, x=240, y=72, onComplete=fnRemoveA})
-- touch event listener
ballAObject:addEventListener( "touch", fnGameOver )
-- collision detection
ballAObject.collision = bCollidesA
ballAObject:addEventListener( "collision", ballAObject)
localGroup:insert(ballAObject)
end
tmrBallA = timer.performWithDelay( 17000, fnBallA, 0 )
--\> BallB spawn
local fnBallB = function()
local ballBObject = display.newImage( "ballB.png" )
ballBObject.x = math.random(40,400); ballBObject.y = 300
physics.addBody( ballBObject, { bounce=0.6, radius=14 } )
ballBObject.myName = "ballB"
ballBObject.isHit = false
ballBObject.alpha = 0.1
transition.to(ballBObject, { time=1000, alpha=1.0 })
ballBObject.transToballB = transition.to(ballAObject, {time=6000, y=72})
-- collision detection
ballBObject.collision = removeSelfTop
ballBObject:addEventListener( "collision", ballBObject)
localGroup:insert(ballBObject)
end
tmrBallB = timer.performWithDelay( 1000, fnBallB, 0 )
I tried the ‘nil’ check but now I’m getting errors about “removeSelf”.
cuz the onComplete never happens 
Hope you can provide additional feedback.
Thanks,
RD [import]uid: 7856 topic_id: 5402 reply_id: 18214[/import]