Fixed software programs that internally control various electronic devices or individual hardware parts of these devices (such as mobile phones). They involved very basic low-level operations of the device, without which the device would be completely non-functional. More simple firmwares are usually stored on ROM or OTP/PROM, while more complex firmwares occupy flash memory to allow for updates. Common reasons for updating firmware include fixing bugs or adding features to the device. Doing so usually involves loading a binary image file provided by the manufacturer into the device, according to a specific procedure. More often than not this is meant to be done by the end user.