Yeah, a subroutine must always end with a RETURN and must always be jumped to with a GOSUB.
If you GOTO a subroutine it will fail badly once it hits the RETURN statement because it will then "return" to the wrong place because the correct place hasn't been stored.

* Never GOSUB anything not ending with RETURN.
* Never GOTO anything which does end with RETURN.

The manual is pretty clear on that specifying a label in an IF statement causes a GOTO when the expression is evaluated true.

I'm glad you're moving forward!
/Henrik.