A parte de todo lo que te puedan decir, yo voy a ir a otra cosa. Esos returns no están bien, porque para eso tienes que usar call en vez de goto. Si quieres que los returns funcionen bien, utiliza call.
EDITO: Que a lo mejor puede ser lo que te de los problemas. La verdad es que no lo creo, pero quién sabe.