A method of remotely upgrading a remote device, comprising: resetting a valid code location to indicate that an upgrade to an application program is to be downloaded, and managing download of the upgrade to the application program using a Non-Erasable Application, NEA, running in said remote device, wherein said NEA is not remotely erasable and includes a non-upgradeable version of said application program; upgrading said application program in a non-volatile, programmable memory in said remote device with said upgrade to provide an upgraded application program; determining whether said upgrading said application program was successful using said NEA by validating functionality of said upgraded application program by determining whether said upgraded application program is capable of performing a function within a period of time; and if the upgrading said application program was successful, setting said valid code location to a starting address of said upgraded application program, executing device commands to provide functions of the remote device using said upgraded application program in said remote device if upgrading said application program is successful and executing said device commands using said NEA in said remote device if upgrading said application program is unsuccessful, wherein said upgrading said application program comprises: invalidating said application program in said non-volatile, programmable memory using said NEA, and in response to invalidating said application program using said NEA, downloading and storing said upgrade in said non-volatile, programmable memory using said NEA, wherein another memory in said remote device includes said valid code location configured to store an address of said application program stored in said non-volatile, programmable memory, wherein invalidating said application program comprises resetting said valid code location to an invalid address, and wherein said validating functionality of said upgraded application program comprises repeating validation attempts if functionality is not validated, and wherein said upgrading is repeated if functionality of said upgraded application program is not validated after a number of said validation attempts. resetting a valid code location to indicate that an upgrade to an application program is to be downloaded, and managing download of the upgrade to the application program using a Non-Erasable Application, NEA, running in said remote device, wherein said NEA is not remotely erasable and includes a non-upgradeable version of said application program; upgrading said application program in a non-volatile, programmable memory in said remote device with said upgrade to provide an upgraded application program; determining whether said upgrading said application program was successful using said NEA by validating functionality of said upgraded application program by determining whether said upgraded application program is capable of performing a function within a period of time; and if the upgrading said application program was successful, setting said valid code location to a starting address of said upgraded application program, executing device commands to provide functions of the remote device using said upgraded application program in said remote device if upgrading said application program is successful and executing said device commands using said NEA in said remote device if upgrading said application program is unsuccessful, wherein said upgrading said application program comprises: invalidating said application program in said non-volatile, programmable memory using said NEA, and in response to invalidating said application program using said NEA, downloading and storing said upgrade in said non-volatile, programmable memory using said NEA, wherein another memory in said remote device includes said valid code location configured to store an address of said application program stored in said non-volatile, programmable memory, wherein invalidating said application program comprises resetting said valid code location to an invalid address, and wherein said validating functionality of said upgraded application program comprises repeating validation attempts if functionality is not validated, and wherein said upgrading is repeated if functionality of said upgraded application program is not validated after a number of said validation attempts. invalidating said application program in said non-volatile, programmable memory using said NEA, and in response to invalidating said application program using said NEA, downloading and storing said upgrade in said non-volatile, programmable memory using said NEA, wherein another memory in said remote device includes said valid code location configured to store an address of said application program stored in said non-volatile, programmable memory, wherein invalidating said application program comprises resetting said valid code location to an invalid address, and wherein said validating functionality of said upgraded application program comprises repeating validation attempts if functionality is not validated, and wherein said upgrading is repeated if functionality of said upgraded application program is not validated after a number of said validation attempts.