diff --git a/.gitignore b/.gitignore
index dedcfa1..63ad6b9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,12 +5,12 @@
 /.dependencies
 /.libdeps
 /build_details.txt
-/flashrom
-/flashrom-*
-/flashrom.exe
-/flashrom.8
-/libflashrom.a
-/libflashrom-doc/
+/flashprog
+/flashprog-*
+/flashprog.exe
+/flashprog.8
+/libflashprog.a
+/libflashprog-doc/
 /versioninfo.inc
 
 /util/ich_descriptors_tool/ich_descriptors_tool
diff --git a/Documentation/building_meson.md b/Documentation/building_meson.md
index 74dc65b..e0c39a0 100644
--- a/Documentation/building_meson.md
+++ b/Documentation/building_meson.md
@@ -28,7 +28,7 @@
 ```
 meson builddir -D<your_options>
 ```
-- __builddir__ is the directory in which flashrom will be build
+- __builddir__ is the directory in which flashprog will be build
 - for all available options see `meson_options.txt`
 
 ## Compile
@@ -59,7 +59,7 @@
 
 ### NixOS / Nixpkgs
 ```
-nix-shell <flashrom_source>/util/shell.nix
+nix-shell <flashprog_source>/util/shell.nix
 ```
 or
 ```
diff --git a/Documentation/mysteries_intel.txt b/Documentation/mysteries_intel.txt
index 60ad21a..6d38135 100644
--- a/Documentation/mysteries_intel.txt
+++ b/Documentation/mysteries_intel.txt
@@ -13,10 +13,10 @@
 When enabled, the SPI flash can only be written when the system is operating in
 in System Management Mode (SMM). In other words, only certain code that was
 installed by the BIOS can write to the flash chip. Programs that run in OS
-context such as flashrom can still read the flash chip, but cannot write to the
+context such as flashprog can still read the flash chip, but cannot write to the
 flash chip.
 
-Flashrom will attempt to detect this and print a warning such as the following:
+Flashprog will attempt to detect this and print a warning such as the following:
 "Warning: BIOS region SMM protection is enabled!"
 
 Many vendor-supplied firmware update utilities do not actually write to the ROM;
@@ -31,7 +31,7 @@
  the whole flash chip, but some boards ship with a different configuration.
  It seems that in descriptor mode all addresses outside the used regions can not
  be accessed whatsoever. This is not specified anywhere publicly as far as we
- could tell. flashrom does not handle this explicitly yet. It will just fail
+ could tell. flashprog does not handle this explicitly yet. It will just fail
  when trying to touch an address outside of any region.
  See also http://www.flashrom.org/pipermail/flashrom/2011-August/007606.html
 
@@ -85,7 +85,7 @@
  datasheets. The actually communication is documented in a whitepaper [DCMI] and
  an outdated as well as a current Linux kernel implementation (currently in
  staging/ exist [KERNEL]. There exists a patch that re-implements this in user
- space (as part of flashrom).
+ space (as part of flashprog).
  
 == Problems ==
  The problem is that only very few higher level protocols are documented publicly,
diff --git a/Documentation/serprog-protocol.txt b/Documentation/serprog-protocol.txt
index 6b7e7e3..e486763 100644
--- a/Documentation/serprog-protocol.txt
+++ b/Documentation/serprog-protocol.txt
@@ -16,7 +16,7 @@
 0x02	Query supported commands bitmap	none				ACK + 32 bytes (256 bits) of supported cmds flags
 0x03	Query programmer name		none				ACK + 16 bytes string (null padding) / NAK
 0x04	Query serial buffer size	none				ACK + 16bit size / NAK
-0x05	Query supported bustypes	none				ACK + 8-bit flags (as per flashrom) / NAK
+0x05	Query supported bustypes	none				ACK + 8-bit flags / NAK
 0x06	Query connected address lines	none				ACK + 8bit line count / NAK
 0x07	Query operation buffer size	none				ACK + 16bit size / NAK
 0x08	Query maximum write-n length	none				ACK + 24bit length (0==2^24) / NAK
@@ -92,7 +92,7 @@
 	About mandatory commands:
 		The only truly mandatory commands for any device are 0x00, 0x01, 0x02 and 0x10,
 		but one can't really do anything with these commands.
-		Support for the following commands is necessary for flashrom to operate properly:
+		Support for the following commands is necessary for flashprog to operate properly:
 		S_CMD_Q_SERBUF, S_CMD_Q_OPBUF, S_CMD_Q_WRNMAXLEN, S_CMD_R_BYTE,
 		S_CMD_R_NBYTES, S_CMD_O_INIT, S_CMD_O_WRITEB, S_CMD_O_WRITEN,
 		S_CMD_O_DELAY, S_CMD_O_EXEC.
diff --git a/Doxyfile b/Doxyfile
index 6906cc8..5fdf5e8 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -32,7 +32,7 @@
 # title of most generated pages and in a few other places.
 # The default value is: My Project.
 
-PROJECT_NAME           = "libflashrom"
+PROJECT_NAME           = "libflashprog"
 
 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
 # could be handy for archiving the generated documentation or if some version
@@ -58,7 +58,7 @@
 # entered, it will be relative to the location where doxygen was started. If
 # left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = "libflashrom-doc"
+OUTPUT_DIRECTORY       = "libflashprog-doc"
 
 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
 # directories (in 2 levels) under the output directory of each output format and
@@ -780,9 +780,9 @@
 # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
 # Note: If this tag is empty the current directory is searched.
 
-INPUT                  = libflashrom.c \
-                         libflashrom.h \
-                         flashrom.c \
+INPUT                  = libflashprog.c \
+                         libflashprog.h \
+                         flashprog.c \
                          layout.c \
 
 # This tag can be used to specify the character encoding of the source files
diff --git a/Makefile b/Makefile
index 388f3c8..e51fa25 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@
 # GNU General Public License for more details.
 #
 
-PROGRAM = flashrom
+PROGRAM = flashprog
 
 ###############################################################################
 # Defaults for the toolchain.
@@ -37,20 +37,20 @@
 BUILD_DETAILS_FILE ?= build_details.txt
 
 # The following parameter changes the default programmer that will be used if there is no -p/--programmer
-# argument given when running flashrom. The predefined setting does not enable any default so that every
+# argument given when running flashprog. The predefined setting does not enable any default so that every
 # user has to declare the programmer he wants to use on every run. The rationale for this to be not set
 # (to e.g. the internal programmer) is that forgetting to specify this when working with another programmer
 # easily puts the system attached to the default programmer at risk (e.g. you want to flash coreboot to another
 # system attached to an external programmer while the default programmer is set to the internal programmer, and
 # you forget to use the -p parameter. This would (try to) overwrite the existing firmware of the computer
-# running flashrom). Please do not enable this without thinking about the possible consequences. Possible
-# values can be found when running 'flashrom --list-supported' under the 'Supported programmers' section.
+# running flashprog). Please do not enable this without thinking about the possible consequences. Possible
+# values can be found when running 'flashprog --list-supported' under the 'Supported programmers' section.
 CONFIG_DEFAULT_PROGRAMMER_NAME ?=
 # The following adds a default parameter for the default programmer set above (only).
 CONFIG_DEFAULT_PROGRAMMER_ARGS ?=
 # Example: compiling with
 #   make CONFIG_DEFAULT_PROGRAMMER_NAME=serprog CONFIG_DEFAULT_PROGRAMMER_ARGS="dev=/dev/ttyUSB0:1500000"
-# would make executing './flashrom' (almost) equivialent to './flashrom -p serprog:dev=/dev/ttyUSB0:1500000'.
+# would make executing './flashprog' (almost) equivialent to './flashprog -p serprog:dev=/dev/ttyUSB0:1500000'.
 
 # The user can provide CPP, C and LDFLAGS and the Makefile will extend these
 override CPPFLAGS := $(CPPFLAGS)
@@ -294,10 +294,10 @@
 # FIXME: Should we check for Cygwin/MSVC as well?
 ifeq ($(TARGET_OS), MinGW)
 # MinGW doesn't have the ffs() function, but we can use gcc's __builtin_ffs().
-FLASHROM_CFLAGS += -Dffs=__builtin_ffs
+FLASHPROG_CFLAGS += -Dffs=__builtin_ffs
 # Some functions provided by Microsoft do not work as described in C99 specifications. This macro fixes that
 # for MinGW. See http://sourceforge.net/p/mingw-w64/wiki2/printf%20and%20scanf%20family/ */
-FLASHROM_CFLAGS += -D__USE_MINGW_ANSI_STDIO=1
+FLASHPROG_CFLAGS += -D__USE_MINGW_ANSI_STDIO=1
 
 # For now we disable all PCI-based programmers on Windows/MinGW (no libpci).
 $(call mark_unsupported,$(DEPENDS_ON_LIBPCI))
@@ -311,8 +311,8 @@
 
 ifeq ($(TARGET_OS), libpayload)
 ifeq ($(MAKECMDGOALS),)
-.DEFAULT_GOAL := libflashrom.a
-$(info Setting default goal to libflashrom.a)
+.DEFAULT_GOAL := libflashprog.a
+$(info Setting default goal to libflashprog.a)
 endif
 $(call mark_unsupported,CONFIG_DUMMY)
 # libpayload does not provide the romsize field in struct pci_dev that the atapromise code requires.
@@ -360,10 +360,10 @@
 endif
 
 ifeq ($(ENDIAN), little)
-FEATURE_FLAGS += -D'__FLASHROM_LITTLE_ENDIAN__=1'
+FEATURE_FLAGS += -D'__FLASHPROG_LITTLE_ENDIAN__=1'
 endif
 ifeq ($(ENDIAN), big)
-FEATURE_FLAGS += -D'__FLASHROM_BIG_ENDIAN__=1'
+FEATURE_FLAGS += -D'__FLASHPROG_BIG_ENDIAN__=1'
 endif
 
 # PCI port I/O support is unimplemented on PPC/MIPS/SPARC and unavailable on ARM.
@@ -392,7 +392,7 @@
 ###############################################################################
 # Library code.
 
-LIB_OBJS = libflashrom.o layout.o flashrom.o udelay.o parallel.o programmer.o programmer_table.o \
+LIB_OBJS = libflashprog.o layout.o flashprog.o udelay.o parallel.o programmer.o programmer_table.o \
 	helpers.o helpers_fileio.o ich_descriptors.o fmap.o platform/endian_$(ENDIAN).o platform/memaccess.o
 
 
@@ -403,11 +403,11 @@
 
 # By default version information will be fetched from Git if available.
 # Otherwise, versioninfo.inc stores the metadata required to build a
-# packaged flashrom. It is generated by the export, tag and branch rules.
+# packaged flashprog. It is generated by the export, tag and branch rules.
 VERSION := $(shell ./util/getversion.sh --version)
 MAN_DATE := $(shell ./util/getversion.sh --man-date)
 
-SCMDEF := -D'FLASHROM_VERSION="$(VERSION)"'
+SCMDEF := -D'FLASHPROG_VERSION="$(VERSION)"'
 
 # Inform user of the version string
 ifeq ($(filter branch tag,$(MAKECMDGOALS)), )
@@ -837,7 +837,7 @@
 
 USE_X86_PORT_IO := $(if $(call filter_deps,$(DEPENDS_ON_X86_PORT_IO)),yes,no)
 ifeq ($(USE_X86_PORT_IO), yes)
-FEATURE_FLAGS += -D'__FLASHROM_HAVE_OUTB__=1'
+FEATURE_FLAGS += -D'__FLASHPROG_HAVE_OUTB__=1'
 PROGRAMMER_OBJS += hwaccess_x86_io.o
 endif
 
@@ -924,7 +924,7 @@
 endif
 
 config:
-	@echo Building flashrom version $(VERSION)
+	@echo Building flashprog version $(VERSION)
 	@echo -n "C compiler found: "
 	@if [ $(CC_WORKING) = yes ]; \
 		then $(CC) --version 2>/dev/null | head -1; \
@@ -995,12 +995,12 @@
 	fi
 
 %.o: %.c | config
-	$(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) $(FEATURE_FLAGS) $(SCMDEF) -o $@ -c $<
+	$(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHPROG_CFLAGS) $(FEATURE_FLAGS) $(SCMDEF) -o $@ -c $<
 
-$(PROGRAM)$(EXEC_SUFFIX): $(CLI_OBJS) libflashrom.a
+$(PROGRAM)$(EXEC_SUFFIX): $(CLI_OBJS) libflashprog.a
 	$(CC) -o $@ $^ $(LDFLAGS)
 
-libflashrom.a: $(OBJS)
+libflashprog.a: $(OBJS)
 	$(AR) rcs $@ $^
 	$(RANLIB) $@
 
@@ -1009,16 +1009,16 @@
 
 $(PROGRAM).8: $(PROGRAM).8.tmpl
 	@# Add the man page change date and version to the man page
-	@sed -e 's#.TH FLASHROM 8 .*#.TH FLASHROM 8 "$(MAN_DATE)" "flashrom-stable-$(VERSION)" "$(MAN_DATE)"#' <$< >$@
+	@sed -e 's#.TH FLASHPROG 8 .*#.TH FLASHPROG 8 "$(MAN_DATE)" "flashprog-$(VERSION)" "$(MAN_DATE)"#' <$< >$@
 
 strip: $(PROGRAM)$(EXEC_SUFFIX)
 	$(STRIP) $(STRIP_ARGS) $(PROGRAM)$(EXEC_SUFFIX)
 
 # Make sure to add all names of generated binaries here.
-# This includes all frontends and libflashrom.
+# This includes all frontends and libflashprog.
 # We don't use EXEC_SUFFIX here because we want to clean everything.
 clean:
-	rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a $(filter-out Makefile.d, $(wildcard *.d *.o platform/*.d platform/*.o)) \
+	rm -f $(PROGRAM) $(PROGRAM).exe libflashprog.a $(filter-out Makefile.d, $(wildcard *.d *.o platform/*.d platform/*.o)) \
 		$(PROGRAM).8 $(PROGRAM).8.html $(BUILD_DETAILS_FILE)
 	@+$(MAKE) -C util/ich_descriptors_tool/ clean
 
@@ -1028,11 +1028,11 @@
 	$(INSTALL) -m 0755 $(PROGRAM)$(EXEC_SUFFIX) $(DESTDIR)$(PREFIX)/sbin
 	$(INSTALL) -m 0644 $(PROGRAM).8 $(DESTDIR)$(MANDIR)/man8
 
-libinstall: libflashrom.a include/libflashrom.h
+libinstall: libflashprog.a include/libflashprog.h
 	mkdir -p $(DESTDIR)$(PREFIX)/lib
-	$(INSTALL) -m 0644 libflashrom.a $(DESTDIR)$(PREFIX)/lib
+	$(INSTALL) -m 0644 libflashprog.a $(DESTDIR)$(PREFIX)/lib
 	mkdir -p $(DESTDIR)$(PREFIX)/include
-	$(INSTALL) -m 0644 include/libflashrom.h $(DESTDIR)$(PREFIX)/include
+	$(INSTALL) -m 0644 include/libflashprog.h $(DESTDIR)$(PREFIX)/include
 
 versioninfo:
 #	Generate versioninfo.inc containing metadata that would not be available in exported sources otherwise.
@@ -1051,7 +1051,7 @@
 	@git tag -s $(RELEASE)
 
 # No spaces in release names unless set explicitly
-RELEASENAME ?= flashrom-stable-$(shell echo "$(VERSION)" | sed -e 's/ /_/')
+RELEASENAME ?= flashprog-$(shell echo "$(VERSION)" | sed -e 's/ /_/')
 
 _export: EXPORT_VERSIONINFO := $(EXPORTDIR)/$(RELEASENAME)/versioninfo.inc
 _export: $(PROGRAM).8
diff --git a/Makefile.d/arch_test.h b/Makefile.d/arch_test.h
index 04aa121..4ca2ca5 100644
--- a/Makefile.d/arch_test.h
+++ b/Makefile.d/arch_test.h
@@ -19,37 +19,37 @@
  */
 
 #if defined (__i386__) || defined (__x86_64__) || defined(__amd64__)
-	#define __FLASHROM_ARCH__ "x86"
+	#define __FLASHPROG_ARCH__ "x86"
 #elif defined (__mips) || defined (__mips__) || defined (__MIPS__) || defined (mips)
-	#define __FLASHROM_ARCH__ "mips"
+	#define __FLASHPROG_ARCH__ "mips"
 #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || \
       defined(__ppc__) || defined(__ppc64__) || defined(_M_PPC) || defined(_ARCH_PPC) || \
       defined(_ARCH_PPC64) || defined(__ppc)
-	#define __FLASHROM_ARCH__ "ppc"
+	#define __FLASHPROG_ARCH__ "ppc"
 #elif defined(__arm__) || defined(__TARGET_ARCH_ARM) || defined(_ARM) || defined(_M_ARM) || defined(__arm) || \
       defined(__aarch64__)
-	#define __FLASHROM_ARCH__ "arm"
+	#define __FLASHPROG_ARCH__ "arm"
 #elif defined (__sparc__) || defined (__sparc)
-	#define __FLASHROM_ARCH__ "sparc"
+	#define __FLASHPROG_ARCH__ "sparc"
 #elif defined (__alpha__)
-	#define __FLASHROM_ARCH__ "alpha"
+	#define __FLASHPROG_ARCH__ "alpha"
 #elif defined (__hppa__) || defined (__hppa)
-	#define __FLASHROM_ARCH__ "hppa"
+	#define __FLASHPROG_ARCH__ "hppa"
 #elif defined (__m68k__)
-	#define __FLASHROM_ARCH__ "m68k"
+	#define __FLASHPROG_ARCH__ "m68k"
 #elif defined (__riscv)
-	#define __FLASHROM_ARCH__ "riscv"
+	#define __FLASHPROG_ARCH__ "riscv"
 #elif defined (__sh__)
-	#define __FLASHROM_ARCH__ "sh"
+	#define __FLASHPROG_ARCH__ "sh"
 #elif defined(__s390__) || defined(__s390x__) || defined(__zarch__)
-	#define __FLASHROM_ARCH__ "s390"
+	#define __FLASHPROG_ARCH__ "s390"
 #elif defined(__arc__)
-	#define __FLASHROM_ARCH__ "arc"
+	#define __FLASHPROG_ARCH__ "arc"
 #elif defined(__ARC64__)
-	#define __FLASHROM_ARCH__ "arc64"
+	#define __FLASHPROG_ARCH__ "arc64"
 #elif defined(__e2k__)
-	#define __FLASHROM_ARCH__ "e2k"
+	#define __FLASHPROG_ARCH__ "e2k"
 #else
-	#define __FLASHROM_ARCH__ "unknown"
+	#define __FLASHPROG_ARCH__ "unknown"
 #endif
-__FLASHROM_ARCH__
+__FLASHPROG_ARCH__
diff --git a/Makefile.d/os_test.h b/Makefile.d/os_test.h
index 2cf6be0..eacd284 100644
--- a/Makefile.d/os_test.h
+++ b/Makefile.d/os_test.h
@@ -19,49 +19,49 @@
 
 // Solaris
 #if defined (__sun) && (defined(__i386) || defined(__amd64))
-#define __FLASHROM_OS__ "SunOS"
+#define __FLASHPROG_OS__ "SunOS"
 // OS X
 #elif defined(__MACH__) && defined(__APPLE__)
-#define __FLASHROM_OS__ "Darwin"
+#define __FLASHPROG_OS__ "Darwin"
 // FreeBSD
 #elif defined(__FreeBSD__)
-#define __FLASHROM_OS__ "FreeBSD"
+#define __FLASHPROG_OS__ "FreeBSD"
 // FreeBSD with glibc-based userspace (e.g. Debian/kFreeBSD)
 #elif defined(__FreeBSD_kernel__) && defined(__GLIBC__)
-#define __FLASHROM_OS__ "FreeBSD-glibc"
+#define __FLASHPROG_OS__ "FreeBSD-glibc"
 // DragonFlyBSD
 #elif defined(__DragonFly__)
-#define __FLASHROM_OS__ "DragonFlyBSD"
+#define __FLASHPROG_OS__ "DragonFlyBSD"
 // NetBSD
 #elif defined(__NetBSD__)
-#define __FLASHROM_OS__ "NetBSD"
+#define __FLASHPROG_OS__ "NetBSD"
 // OpenBSD
 #elif defined(__OpenBSD__)
-#define __FLASHROM_OS__ "OpenBSD"
+#define __FLASHPROG_OS__ "OpenBSD"
 // DJGPP
 #elif defined(__DJGPP__)
-#define __FLASHROM_OS__ "DOS"
+#define __FLASHPROG_OS__ "DOS"
 // MinGW (always has _WIN32 available)
 #elif defined(__MINGW32__)
-#define __FLASHROM_OS__ "MinGW"
+#define __FLASHPROG_OS__ "MinGW"
 // Cygwin (usually without _WIN32)
 #elif defined( __CYGWIN__)
-#define __FLASHROM_OS__ "Cygwin"
+#define __FLASHPROG_OS__ "Cygwin"
 // libpayload
 #elif defined(__LIBPAYLOAD__)
-#define __FLASHROM_OS__ "libpayload"
+#define __FLASHPROG_OS__ "libpayload"
 // GNU Hurd
 #elif defined(__gnu_hurd__)
-#define __FLASHROM_OS__ "Hurd"
+#define __FLASHPROG_OS__ "Hurd"
 // Linux
 #elif defined(__linux__)
 	// There are various flags in use on Android apparently. __ANDROID__ seems to be the most trustworthy.
 	#if defined(__ANDROID__)
-		#define __FLASHROM_OS__ "Android"
+		#define __FLASHPROG_OS__ "Android"
 	#else
-		#define __FLASHROM_OS__ "Linux"
+		#define __FLASHPROG_OS__ "Linux"
 	#endif
 #else
-#define __FLASHROM_OS__ "unknown"
+#define __FLASHPROG_OS__ "unknown"
 #endif
-__FLASHROM_OS__
+__FLASHPROG_OS__
diff --git a/README b/README
index b9857ad..e993a60 100644
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
 -------------------------------------------------------------------------------
-flashrom README
+flashprog README
 -------------------------------------------------------------------------------
 
-flashrom is a utility for detecting, reading, writing, verifying and erasing
+flashprog is a utility for detecting, reading, writing, verifying and erasing
 flash chips. It is often used to flash BIOS/EFI/coreboot/firmware images
 in-system using a supported mainboard, but it also supports flashing of network
 cards (NICs), SATA controller cards, and other external devices which can
@@ -12,25 +12,25 @@
 SOIC16, WSON8, PLCC32, DIP32, TSOP32, and TSOP40 packages), which use various
 protocols such as LPC, FWH, parallel flash, or SPI.
 
-Do not use flashrom on laptops (yet)! The embedded controller (EC) present in
+Do not use flashprog on laptops (yet)! The embedded controller (EC) present in
 many laptops might interact badly with any attempts to communicate with the
 flash chip and may brick your laptop.
 
 Please make a backup of your flash chip before writing to it.
 
-Please see the flashrom(8) manpage.
+Please see the flashprog(8) manpage.
 
 
 Packaging
 ---------
 
-To package flashrom and remove dependencies on Git, either use
+To package flashprog and remove dependencies on Git, either use
 make export
 or
 make tarball
 
-'make export' will export all flashrom files from the Git repository at
-revision HEAD into a directory named "$EXPORTDIR/flashrom-$RELEASENAME"
+'make export' will export all flashprog files from the Git repository at
+revision HEAD into a directory named "$EXPORTDIR/flashprog-$RELEASENAME"
 and will additionally add a "versioninfo.inc" file in that directory to
 contain the Git revision of the exported tree and a date for the manual
 page.
@@ -45,7 +45,7 @@
 Build Instructions
 ------------------
 
-To build flashrom you need to install the following software:
+To build flashprog you need to install the following software:
 
  * pciutils+libpci (if you want support for mainboard or PCI device flashing)
  * libusb (if you want FT2232, Dediprog or USB-Blaster support)
@@ -111,24 +111,24 @@
  You will need the libpci and libgetopt library source trees and
  their compiled static libraries and header files installed in some
  directory say libpci-libgetopt/, which will be later specified with
- LIBS_BASE parameter during flashrom compilation. Easiest way to
- handle it is to put pciutils, libgetopt and flashrom directories
+ LIBS_BASE parameter during flashprog compilation. Easiest way to
+ handle it is to put pciutils, libgetopt and flashprog directories
  in one subdirectory. There will be an extra subdirectory libpci-libgetopt
  created, which will contain compiled libpci and libgetopt.
 
- Download pciutils 3.5.6 and apply http://flashrom.org/File:Pciutils-3.5.6.patch.gz
+ Download pciutils 3.5.6 and apply http://flashprog.org/File:Pciutils-3.5.6.patch.gz
  Compile pciutils, using following command line:
 
  make ZLIB=no DNS=no HOST=i386-djgpp-djgpp CROSS_COMPILE=i586-pc-msdosdjgpp- \
      PREFIX=/ DESTDIR=$PWD/../libpci-libgetopt  \
      STRIP="--strip-program=i586-pc-msdosdjgpp-strip -s" install install-lib
 
- Download and compile with 'make' http://flashrom.org/File:Libgetopt.tar.gz
+ Download and compile with 'make' http://flashprog.org/File:Libgetopt.tar.gz
 
  Copy the libgetopt.a to ../libpci-libgetopt/lib and
  getopt.h to ../libpci-libgetopt/include
 
- Enter the flashrom directory.
+ Enter the flashprog directory.
 
  make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip \
 	LIBS_BASE=../libpci-libgetopt/ HAS_LIBPCI=yes CONFIG_LIBPCI_LDFLAGS=-lpci \
@@ -136,9 +136,9 @@
 
  If you like, you can compress the resulting executable with UPX:
 
- upx -9 flashrom.exe
+ upx -9 flashprog.exe
 
- To run flashrom.exe, download http://flashrom.org/File:Csdpmi7b.zip and
+ To run flashprog.exe, download http://flashprog.org/File:Csdpmi7b.zip and
  unpack CWSDPMI.EXE into the current directory or one in PATH.
 
 To cross-compile on Linux for Windows:
@@ -167,7 +167,7 @@
 Installation
 ------------
 
-In order to install flashrom and the manpage into /usr/local, type:
+In order to install flashprog and the manpage into /usr/local, type:
 
  make install
 
@@ -182,10 +182,10 @@
 Contact
 -------
 
-The official flashrom website is:
+The official flashprog website is:
 
-  http://www.flashrom.org/
+  http://www.flashprog.org/
 
 Available contact methods are
 
-  https://www.flashrom.org/Contact
+  https://www.flashprog.org/Contact
diff --git a/amd_imc.c b/amd_imc.c
index 2095eb5..71a7889 100644
--- a/amd_imc.c
+++ b/amd_imc.c
@@ -184,7 +184,7 @@
 	if (!amd_imc_force)
 		programmer_may_write = false;
 	msg_pinfo("Writes have been disabled for safety reasons because the presence of the IMC\n"
-		  "was detected and it could interfere with accessing flash memory. Flashrom will\n"
+		  "was detected and it could interfere with accessing flash memory. Flashprog will\n"
 		  "try to disable it temporarily but even then this might not be safe:\n"
 		  "when it is re-enabled and after a reboot it expects to find working code\n"
 		  "in the flash and it is unpredictable what happens if there is none.\n"
diff --git a/amd_spi100.c b/amd_spi100.c
index fab16e3..14096ec 100644
--- a/amd_spi100.c
+++ b/amd_spi100.c
@@ -140,7 +140,7 @@
 static int spi100_read(struct flashctx *const flash, uint8_t *buf, unsigned int start, unsigned int len)
 {
 	const struct spi100 *const spi100 = flash->mst->spi.data;
-	const chipsize_t chip_size = flashrom_flash_getsize(flash);
+	const chipsize_t chip_size = flashprog_flash_getsize(flash);
 
 	/* Don't consider memory mapping at all
 	   if 4BA chips are not mapped as expected. */
diff --git a/at45db.c b/at45db.c
index 5f949bb..463442c 100644
--- a/at45db.c
+++ b/at45db.c
@@ -215,7 +215,7 @@
 	return 1;
 }
 
-/* In case of non-power-of-two page sizes we need to convert the address flashrom uses to the address the
+/* In case of non-power-of-two page sizes we need to convert the address flashprog uses to the address the
  * DataFlash chips use. The latter uses a segmented address space where the page address is encoded in the
  * more significant bits and the offset within the page is encoded in the less significant bits. The exact
  * partition depends on the page size.
diff --git a/atapromise.c b/atapromise.c
index 083239d..a6e2d12 100644
--- a/atapromise.c
+++ b/atapromise.c
@@ -36,7 +36,7 @@
  * thus limiting the the programmer on this card to 32 kB. Without other controllers to test this programmer on,
  * this is currently a hard limit. Note that ROM files for these controllers are 16 kB only.
  *
- * Since flashrom does not support accessing flash chips larger than the size limit of the programmer (the
+ * Since flashprog does not support accessing flash chips larger than the size limit of the programmer (the
  * tested Ultra100 uses a 128 kB MX29F001T chip), the chip size is hackishly adjusted in atapromise_limit_chip.
  */
 
diff --git a/bitbang_spi.c b/bitbang_spi.c
index 76f2642..610dc28 100644
--- a/bitbang_spi.c
+++ b/bitbang_spi.c
@@ -105,8 +105,8 @@
 	    (master->request_bus && !master->release_bus) ||
 	    (!master->request_bus && master->release_bus)) {
 		msg_perr("Incomplete SPI bitbang master setting!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n");
-		return ERROR_FLASHROM_BUG;
+			 "Please report a bug at flashprog@flashprog.org\n");
+		return ERROR_FLASHPROG_BUG;
 	}
 
 	struct bitbang_spi_master_data *data = calloc(1, sizeof(struct bitbang_spi_master_data));
diff --git a/board_enable.c b/board_enable.c
index 76fbe8a..dc0dda2 100644
--- a/board_enable.c
+++ b/board_enable.c
@@ -622,8 +622,8 @@
 			/* The data sheet contradicts itself about max size. */
 			max_rom_decode.parallel = 1024 * 1024;
 			msg_pinfo("IT8705F with very unusual settings.\n"
-				  "Please send the output of \"flashrom -V -p internal\" to\n"
-				  "flashrom-stable@flashrom.org with \"IT8705: your board name: flashrom -V\"\n"
+				  "Please send the output of \"flashprog -V -p internal\" to\n"
+				  "flashprog@flashprog.org with \"IT8705: your board name: flashprog -V\"\n"
 				  "as the subject to help us finish support for your Super I/O. Thanks.\n");
 			ret = 1;
 		} else if (tmp & 0x08) {
@@ -2317,7 +2317,7 @@
 
 /*
  * Below is the list of boards which need a special "board enable" code in
- * flashrom before their ROM chip can be accessed/written to.
+ * flashprog before their ROM chip can be accessed/written to.
  *
  * NOTE: Please add boards that _don't_ need such enables or don't work yet
  *       to the respective tables in print.c. Thanks!
@@ -2553,7 +2553,7 @@
 		const struct board_match *b = &board_matches[i];
 		if (b->vendor_name == NULL || b->board_name == NULL) {
 			msg_gerr("ERROR: Board enable #%d does not define a vendor and board name.\n"
-				 "Please report a bug at flashrom-stable@flashrom.org\n", i);
+				 "Please report a bug at flashprog@flashprog.org\n", i);
 			ret = 1;
 			continue;
 		}
@@ -2562,7 +2562,7 @@
 		    ((b->lb_vendor == NULL) ^ (b->lb_part == NULL)) ||
 		    (b->max_rom_decode_parallel == 0 && b->enable == NULL)) {
 			msg_gerr("ERROR: Board enable for %s %s is misdefined.\n"
-				 "Please report a bug at flashrom-stable@flashrom.org\n",
+				 "Please report a bug at flashprog@flashprog.org\n",
 				 b->vendor_name, b->board_name);
 			ret = 1;
 		}
@@ -2631,7 +2631,7 @@
 		if (partmatch) {
 			/* More than one entry has a matching name. */
 			msg_perr("Board name \"%s\":\"%s\" and PCI IDs matched more than one board enable\n"
-				 "entry. Please report a bug at flashrom-stable@flashrom.org\n", vendor, model);
+				 "entry. Please report a bug at flashprog@flashprog.org\n", vendor, model);
 			return NULL;
 		}
 		partmatch = board;
@@ -2714,7 +2714,7 @@
 		return 1;
 	}
 	msg_pwarn("NOTE: Running an untested board enable procedure.\n"
-		  "Please report success/failure to flashrom-stable@flashrom.org.\n");
+		  "Please report success/failure to flashprog@flashprog.org.\n");
 	return 0;
 }
 
diff --git a/buspirate_spi.c b/buspirate_spi.c
index 2909a3e..27bca8a 100644
--- a/buspirate_spi.c
+++ b/buspirate_spi.c
@@ -245,7 +245,7 @@
 		dev = NULL;
 	}
 	if (!dev) {
-		msg_perr("No serial device given. Use flashrom -p buspirate_spi:dev=/dev/ttyUSB0\n");
+		msg_perr("No serial device given. Use flashprog -p buspirate_spi:dev=/dev/ttyUSB0\n");
 		return 1;
 	}
 
@@ -326,7 +326,7 @@
 	bp_data->commbufsize = bp_commbufsize;
 
 	/* This is the brute force version, but it should work.
-	 * It is likely to fail if a previous flashrom run was aborted during a write with the new SPI commands
+	 * It is likely to fail if a previous flashprog run was aborted during a write with the new SPI commands
 	 * in firmware v5.5 because that firmware may wait for up to 4096 bytes of input before responding to
 	 * 0x00 again. The obvious workaround (sending 4096 bytes of \0) may cause significant startup delays.
 	 */
diff --git a/ch341a_spi.c b/ch341a_spi.c
index 9b07ef0..2b6413b 100644
--- a/ch341a_spi.c
+++ b/ch341a_spi.c
@@ -388,7 +388,7 @@
 
 static const struct spi_master spi_master_ch341a_spi = {
 	.features	= SPI_MASTER_4BA,
-	/* flashrom's current maximum is 256 B. CH341A was tested on Linux and Windows to accept at least
+	/* flashprog's current maximum is 256 B. CH341A was tested on Linux and Windows to accept at least
 	 * 128 kB. Basically there should be no hard limit because transfers are broken up into USB packets
 	 * sent to the device and most of their payload streamed via SPI. */
 	.max_data_read	= 4 * 1024,
@@ -424,7 +424,7 @@
 static int ch341a_spi_init(void)
 {
 	if (handle != NULL) {
-		msg_cerr("%s: handle already set! Please report a bug at flashrom-stable@flashrom.org\n",
+		msg_cerr("%s: handle already set! Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
 		return -1;
 	}
diff --git a/chipset_enable.c b/chipset_enable.c
index 5a0e826..7327317 100644
--- a/chipset_enable.c
+++ b/chipset_enable.c
@@ -282,7 +282,7 @@
 	 * what other SPI-capable chipsets have at DCh. Others like Bay Trail use a memmapped register.
 	 * The Tunnel Creek datasheet contains a lot of details about the SPI controller, among other things it
 	 * mentions that the prefetching and caching does only happen for direct memory reads.
-	 * Therefore - at least for Tunnel Creek - it should not matter to flashrom because we use the
+	 * Therefore - at least for Tunnel Creek - it should not matter to flashprog because we use the
 	 * programmed access only and not memory mapping. */
 	case CHIPSET_TUNNEL_CREEK:
 	case CHIPSET_POULSBO:
@@ -1187,7 +1187,7 @@
 	internal_buses_supported &= BUS_PARALLEL;
 	/* Decode 0x000E0000-0x000FFFFF (128 kB), not just 64 kB, and
 	 * decode 0xFF000000-0xFFFFFFFF (16 MB), not just 256 kB.
-	 * FIXME: Should we really touch the low mapping below 1 MB? Flashrom
+	 * FIXME: Should we really touch the low mapping below 1 MB? Flashprog
 	 * ignores that region completely.
 	 * Make the configured ROM areas writable.
 	 */
@@ -1685,8 +1685,8 @@
 		/* Should not happen. */
 		internal_buses_supported = BUS_NONE;
 		msg_pwarn("Flash bus type is unknown (none)\n");
-		msg_pinfo("Please send the log files created by \"flashrom -p internal -o logfile\" to\n"
-			  "flashrom-stable@flashrom.org with \"your board name: flashrom -V\" as the subject\n"
+		msg_pinfo("Please send the log files created by \"flashprog -p internal -o logfile\" to\n"
+			  "flashprog@flashprog.org with \"your board name: flashprog -V\" as the subject\n"
 			  "to help us finish support for your chipset. Thanks.\n");
 		return ERROR_NONFATAL;
 	}
@@ -1855,7 +1855,7 @@
 	/* 10de:0361 is present in Tyan S2915 OEM systems, but not connected to
 	 * the flash chip. Instead, 10de:0364 is connected to the flash chip.
 	 * Until we have PCI device class matching or some fallback mechanism,
-	 * this is needed to get flashrom working on Tyan S2915 and maybe other
+	 * this is needed to get flashprog working on Tyan S2915 and maybe other
 	 * dual-MCP55 boards.
 	 */
 #if 0
@@ -2242,7 +2242,7 @@
 			msg_pwarn("Warning: unexpected second chipset match: "
 				    "\"%s %s\"\n"
 				  "ignoring, please report lspci and board URL "
-				    "to flashrom-stable@flashrom.org\n"
+				    "to flashprog@flashprog.org\n"
 				  "with \'CHIPSET: your board name\' in the "
 				    "subject line.\n",
 				chipset_enables[i].vendor_name,
@@ -2264,10 +2264,10 @@
 		if (chipset_enables[i].status == NT) {
 			msg_pinfo("This chipset is marked as untested. If "
 				  "you are using an up-to-date version\nof "
-				  "flashrom *and* were (not) able to "
+				  "flashprog *and* were (not) able to "
 				  "successfully update your firmware with it,\n"
 				  "then please email a report to "
-				  "flashrom-stable@flashrom.org including a\n"
+				  "flashprog@flashprog.org including a\n"
 				  "verbose (-V) log.\nThank you!\n");
 		}
 		if (!(chipset_enables[i].buses & (internal_buses_supported | BUS_SPI))) {
diff --git a/cli_classic.c b/cli_classic.c
index ad2de6f..1ffe4dd 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -28,7 +28,7 @@
 #include "flashchips.h"
 #include "fmap.h"
 #include "programmer.h"
-#include "libflashrom.h"
+#include "libflashprog.h"
 
 static void cli_classic_usage(const char *name)
 {
@@ -77,14 +77,14 @@
 	         "-z, "
 #endif
 	         "-E, -r, -w, -v or no operation.\n"
-	       "If no operation is specified, flashrom will only probe for flash chips.\n");
+	       "If no operation is specified, flashprog will only probe for flash chips.\n");
 }
 
 static void cli_classic_abort_usage(const char *msg)
 {
 	if (msg)
 		fprintf(stderr, "%s", msg);
-	printf("Please run \"flashrom --help\" for usage info.\n");
+	printf("Please run \"flashprog --help\" for usage info.\n");
 	exit(1);
 }
 
@@ -121,14 +121,14 @@
 {
 	int ret;
 
-	unsigned long size = flashrom_flash_getsize(flash);
+	unsigned long size = flashprog_flash_getsize(flash);
 	unsigned char *buf = calloc(size, sizeof(unsigned char));
 	if (!buf) {
 		msg_gerr("Memory allocation failed!\n");
 		return 1;
 	}
 
-	ret = flashrom_image_read(flash, buf, size);
+	ret = flashprog_image_read(flash, buf, size);
 	if (ret > 0)
 		goto free_out;
 
@@ -141,7 +141,7 @@
 
 static int do_write(struct flashctx *const flash, const char *const filename, const char *const referencefile)
 {
-	const size_t flash_size = flashrom_flash_getsize(flash);
+	const size_t flash_size = flashprog_flash_getsize(flash);
 	int ret = 1;
 
 	uint8_t *const newcontents = malloc(flash_size);
@@ -160,7 +160,7 @@
 			goto _free_ret;
 	}
 
-	ret = flashrom_image_write(flash, newcontents, flash_size, refcontents);
+	ret = flashprog_image_write(flash, newcontents, flash_size, refcontents);
 
 _free_ret:
 	free(refcontents);
@@ -170,7 +170,7 @@
 
 static int do_verify(struct flashctx *const flash, const char *const filename)
 {
-	const size_t flash_size = flashrom_flash_getsize(flash);
+	const size_t flash_size = flashprog_flash_getsize(flash);
 	int ret = 1;
 
 	uint8_t *const newcontents = malloc(flash_size);
@@ -182,7 +182,7 @@
 	if (read_buf_from_file(newcontents, flash_size, filename))
 		goto _free_ret;
 
-	ret = flashrom_image_verify(flash, newcontents, flash_size);
+	ret = flashprog_image_verify(flash, newcontents, flash_size);
 
 _free_ret:
 	free(newcontents);
@@ -251,7 +251,7 @@
 	bool read_it = false, write_it = false, erase_it = false, verify_it = false;
 	bool dont_verify_it = false, dont_verify_all = false;
 	bool list_supported = false;
-	struct flashrom_layout *layout = NULL;
+	struct flashprog_layout *layout = NULL;
 	static const struct programmer_entry *prog = NULL;
 	enum {
 		OPTION_IFD = 0x0100,
@@ -304,20 +304,20 @@
 
 	/*
 	 * Safety-guard against a user who has (mistakenly) closed
-	 * stdout or stderr before exec'ing flashrom.  We disable
+	 * stdout or stderr before exec'ing flashprog.  We disable
 	 * logging in this case to prevent writing log data to a flash
 	 * chip when a flash device gets opened with fd 1 or 2.
 	 */
 	if (check_file(stdout) && check_file(stderr)) {
-		flashrom_set_log_callback(
-			(flashrom_log_callback *)&flashrom_print_cb);
+		flashprog_set_log_callback(
+			(flashprog_log_callback *)&flashprog_print_cb);
 	}
 
 	print_version();
 	print_banner();
 
 	/* FIXME: Delay calibration should happen in programmer code. */
-	if (flashrom_init(1))
+	if (flashprog_init(1))
 		exit(1);
 
 	setbuf(stdout, NULL);
@@ -360,7 +360,7 @@
 			break;
 		case 'V':
 			verbose_screen++;
-			if (verbose_screen > FLASHROM_MSG_DEBUG2)
+			if (verbose_screen > FLASHPROG_MSG_DEBUG2)
 				verbose_logfile = verbose_screen;
 			break;
 		case 'E':
@@ -565,7 +565,7 @@
 				break;
 		if (!chip || !chip->name) {
 			msg_cerr("Error: Unknown chip '%s' specified.\n", chip_to_probe);
-			msg_gerr("Run flashrom -L to view the hardware supported in this flashrom version.\n");
+			msg_gerr("Run flashprog -L to view the hardware supported in this flashprog version.\n");
 			ret = 1;
 			goto out;
 		}
@@ -625,7 +625,7 @@
 	} else if (!chipcount) {
 		msg_cinfo("No EEPROM/flash device found.\n");
 		if (!force || !chip_to_probe) {
-			msg_cinfo("Note: flashrom can never write if the flash chip isn't found "
+			msg_cinfo("Note: flashprog can never write if the flash chip isn't found "
 				  "automatically.\n");
 		}
 		if (force && read_it && chip_to_probe) {
@@ -660,7 +660,7 @@
 				goto out_shutdown;
 			}
 			msg_cinfo("Please note that forced reads most likely contain garbage.\n");
-			flashrom_flag_set(&flashes[0], FLASHROM_FLAG_FORCE, force);
+			flashprog_flag_set(&flashes[0], FLASHPROG_FLAG_FORCE, force);
 			ret = do_read(&flashes[0], filename);
 			free(flashes[0].chip);
 			goto out_shutdown;
@@ -712,11 +712,11 @@
 	}
 
 	if (flash_size) {
-		printf("%zu\n", flashrom_flash_getsize(fill_flash));
+		printf("%zu\n", flashprog_flash_getsize(fill_flash));
 		goto out_shutdown;
 	}
 
-	if (ifd && (flashrom_layout_read_from_ifd(&layout, fill_flash, NULL, 0) ||
+	if (ifd && (flashprog_layout_read_from_ifd(&layout, fill_flash, NULL, 0) ||
 			   process_include_args(layout, include_args))) {
 		ret = 1;
 		goto out_shutdown;
@@ -741,26 +741,26 @@
 			goto out_shutdown;
 		}
 
-		if (flashrom_layout_read_fmap_from_buffer(&layout, fill_flash, fmapfile_buffer, fmapfile_size) ||
+		if (flashprog_layout_read_fmap_from_buffer(&layout, fill_flash, fmapfile_buffer, fmapfile_size) ||
 		    process_include_args(layout, include_args)) {
 			ret = 1;
 			free(fmapfile_buffer);
 			goto out_shutdown;
 		}
 		free(fmapfile_buffer);
-	} else if (fmap && (flashrom_layout_read_fmap_from_rom(&layout, fill_flash, 0,
-				flashrom_flash_getsize(fill_flash)) || process_include_args(layout, include_args))) {
+	} else if (fmap && (flashprog_layout_read_fmap_from_rom(&layout, fill_flash, 0,
+				flashprog_flash_getsize(fill_flash)) || process_include_args(layout, include_args))) {
 		ret = 1;
 		goto out_shutdown;
 	}
 
-	flashrom_layout_set(fill_flash, layout);
-	flashrom_flag_set(fill_flash, FLASHROM_FLAG_FORCE, force);
+	flashprog_layout_set(fill_flash, layout);
+	flashprog_flag_set(fill_flash, FLASHPROG_FLAG_FORCE, force);
 #if CONFIG_INTERNAL == 1
-	flashrom_flag_set(fill_flash, FLASHROM_FLAG_FORCE_BOARDMISMATCH, force_boardmismatch);
+	flashprog_flag_set(fill_flash, FLASHPROG_FLAG_FORCE_BOARDMISMATCH, force_boardmismatch);
 #endif
-	flashrom_flag_set(fill_flash, FLASHROM_FLAG_VERIFY_AFTER_WRITE, !dont_verify_it);
-	flashrom_flag_set(fill_flash, FLASHROM_FLAG_VERIFY_WHOLE_CHIP, !dont_verify_all);
+	flashprog_flag_set(fill_flash, FLASHPROG_FLAG_VERIFY_AFTER_WRITE, !dont_verify_it);
+	flashprog_flag_set(fill_flash, FLASHPROG_FLAG_VERIFY_WHOLE_CHIP, !dont_verify_all);
 
 	/* FIXME: We should issue an unconditional chip reset here. This can be
 	 * done once we have a .reset function in struct flashchip.
@@ -770,7 +770,7 @@
 	if (read_it)
 		ret = do_read(fill_flash, filename);
 	else if (erase_it) {
-		ret = flashrom_flash_erase(fill_flash);
+		ret = flashprog_flash_erase(fill_flash);
 		/*
 		 * FIXME: Do we really want the scary warning if erase failed?
 		 * After all, after erase the chip is either blank or partially
@@ -786,13 +786,13 @@
 	else if (verify_it)
 		ret = do_verify(fill_flash, filename);
 
-	flashrom_layout_release(layout);
+	flashprog_layout_release(layout);
 
 out_shutdown:
-	flashrom_programmer_shutdown(NULL);
+	flashprog_programmer_shutdown(NULL);
 out:
 	for (i = 0; i < chipcount; i++) {
-		flashrom_layout_release(flashes[i].default_layout);
+		flashprog_layout_release(flashes[i].default_layout);
 		free(flashes[i].chip);
 	}
 
diff --git a/cli_common.c b/cli_common.c
index 8cc1eda..cf3c7ae 100644
--- a/cli_common.c
+++ b/cli_common.c
@@ -23,7 +23,7 @@
 void print_chip_support_status(const struct flashchip *chip)
 {
 	if (chip->feature_bits & FEATURE_OTP) {
-		msg_cdbg("This chip may contain one-time programmable memory. flashrom cannot read\n"
+		msg_cdbg("This chip may contain one-time programmable memory. flashprog cannot read\n"
 			 "and may never be able to write it, hence it may not be able to completely\n"
 			 "clone the contents of this chip (see man page for details).\n");
 	}
@@ -68,10 +68,10 @@
 			msg_cinfo("\n");
 		}
 		msg_cinfo("The test status of this chip may have been updated in the latest development\n"
-			  "version of flashrom. If you are running the latest development version,\n"
-			  "please email a report to flashrom-stable@flashrom.org if any of the above\n"
+			  "version of flashprog. If you are running the latest development version,\n"
+			  "please email a report to flashprog@flashprog.org if any of the above\n"
 			  "operations work correctly for you with this flash chip. Please include the\n"
-			  "flashrom log file for all operations you tested (see the man page for details),\n"
+			  "flashprog log file for all operations you tested (see the man page for details),\n"
 			  "and mention which mainboard or programmer you tested in the subject line.\n"
 			  "Thanks for your help!\n");
 	}
diff --git a/cli_output.c b/cli_output.c
index 629db67..2108e92 100644
--- a/cli_output.c
+++ b/cli_output.c
@@ -21,8 +21,8 @@
 #include <errno.h>
 #include "flash.h"
 
-enum flashrom_log_level verbose_screen = FLASHROM_MSG_INFO;
-enum flashrom_log_level verbose_logfile = FLASHROM_MSG_DEBUG2;
+enum flashprog_log_level verbose_screen = FLASHPROG_MSG_INFO;
+enum flashprog_log_level verbose_logfile = FLASHPROG_MSG_DEBUG2;
 
 static FILE *logfile = NULL;
 
@@ -56,16 +56,16 @@
 
 void start_logging(void)
 {
-	enum flashrom_log_level oldverbose_screen = verbose_screen;
+	enum flashprog_log_level oldverbose_screen = verbose_screen;
 
 	/* Shut up the console. */
-	verbose_screen = FLASHROM_MSG_ERROR;
+	verbose_screen = FLASHPROG_MSG_ERROR;
 	print_version();
 	verbose_screen = oldverbose_screen;
 }
 
 /* Please note that level is the verbosity, not the importance of the message. */
-int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap)
+int flashprog_print_cb(enum flashprog_log_level level, const char *fmt, va_list ap)
 {
 	int ret = 0;
 	FILE *output_type = stdout;
@@ -73,20 +73,20 @@
 	va_list logfile_args;
 	va_copy(logfile_args, ap);
 
-	if (level < FLASHROM_MSG_INFO)
+	if (level < FLASHPROG_MSG_INFO)
 		output_type = stderr;
 
 	if (level <= verbose_screen) {
 		ret = vfprintf(output_type, fmt, ap);
 		/* msg_*spew often happens inside chip accessors in possibly
 		 * time-critical operations. Don't slow them down by flushing. */
-		if (level != FLASHROM_MSG_SPEW)
+		if (level != FLASHPROG_MSG_SPEW)
 			fflush(output_type);
 	}
 
 	if ((level <= verbose_logfile) && logfile) {
 		ret = vfprintf(logfile, fmt, logfile_args);
-		if (level != FLASHROM_MSG_SPEW)
+		if (level != FLASHPROG_MSG_SPEW)
 			fflush(logfile);
 	}
 
diff --git a/dediprog.c b/dediprog.c
index dfbb949..866d628 100644
--- a/dediprog.c
+++ b/dediprog.c
@@ -136,7 +136,7 @@
 };
 
 /*
- * These are not official designations; they are for use in flashrom only.
+ * These are not official designations; they are for use in flashprog only.
  * Order must be preserved so that comparison operators work.
  */
 enum protocol {
@@ -374,7 +374,7 @@
 
 	if (count >= 1 << 16) {
 		msg_perr("%s: Unsupported transfer length of %u blocks!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__, count);
 		return 1;
 	}
@@ -458,7 +458,7 @@
 
 	if ((start % chunksize) || (len % chunksize)) {
 		msg_perr("%s: Unaligned start=%i, len=%i!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__, start, len);
 		return 1;
 	}
@@ -608,14 +608,14 @@
 	 */
 	if (chunksize != 256) {
 		msg_perr("%s: Chunk sizes other than 256 bytes are unsupported, chunksize=%u!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__, chunksize);
 		return 1;
 	}
 
 	if ((start % chunksize) || (len % chunksize)) {
 		msg_perr("%s: Unaligned start=%i, len=%i!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__, start, len);
 		return 1;
 	}
@@ -1231,7 +1231,7 @@
 			 * libusb_set_configuration() and
 			 * libusb_claim_interface(). When searching by id and
 			 * either configuration or claim fails (usually the
-			 * device is in use by another instance of flashrom),
+			 * device is in use by another instance of flashprog),
 			 * the device is skipped and the next device is tried.
 			 */
 			found_id = dediprog_read_id(dp_data->handle);
diff --git a/digilent_spi.c b/digilent_spi.c
index 20f3b1e..f563bdc 100644
--- a/digilent_spi.c
+++ b/digilent_spi.c
@@ -379,7 +379,7 @@
 
 	if (handle != NULL) {
 		msg_cerr("%s: handle already set!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
 		return -1;
 	}
diff --git a/flashchips.c b/flashchips.c
index 182ff06..31bed4f 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -26,10 +26,10 @@
  * List of supported flash chips.
  *
  * Temporarily, this file is sorted alphabetically by vendor and name to
- * assist with merging the Chromium fork of flashrom.
+ * assist with merging the Chromium fork of flashprog.
  *
  * The usual intention is that that this list is sorted by vendor, then chip
- * family and chip density, which is useful for the output of 'flashrom -L'.
+ * family and chip density, which is useful for the output of 'flashprog -L'.
  */
 const struct flashchip flashchips[] = {
 
@@ -1103,7 +1103,7 @@
 	/* The A25L40P{T,U} chips are distinguished by their
 	 * erase block layouts, but without any distinction in RDID.
 	 * This inexplicable quirk was verified by Rudolf Marek
-	 * and discussed on the flashrom mailing list on 2010-07-12.
+	 * and discussed on the flashprog mailing list on 2010-07-12.
 	 */
 	{
 		.vendor		= "AMIC",
diff --git a/flashrom.8.tmpl b/flashprog.8.tmpl
similarity index 84%
rename from flashrom.8.tmpl
rename to flashprog.8.tmpl
index 4ac3fd8..826da48 100644
--- a/flashrom.8.tmpl
+++ b/flashprog.8.tmpl
@@ -40,11 +40,11 @@
 .    \}
 .  \}
 ..
-.TH FLASHROM 8 "@MAN_DATE@" "flashrom-stable-@VERSION@" "@MAN_DATE@"
+.TH FLASHPROG 8 "@MAN_DATE@" "flashprog-@VERSION@" "@MAN_DATE@"
 .SH NAME
-flashrom \- detect, read, write, verify and erase flash chips
+flashprog \- detect, read, write, verify and erase flash chips
 .SH SYNOPSIS
-.B flashrom \fR[\fB\-h\fR|\fB\-R\fR|\fB\-L\fR|\fB\-z\fR|
+.B flashprog \fR[\fB\-h\fR|\fB\-R\fR|\fB\-L\fR|\fB\-z\fR|
           \fB\-p\fR <programmername>[:<parameters>] [\fB\-c\fR <chipname>]
             (\fB\-\-flash\-name\fR|\fB\-\-flash\-size\fR|
              [\fB\-E\fR|\fB\-r\fR <file>|\fB\-w\fR <file>|\fB\-v\fR <file>]
@@ -53,7 +53,7 @@
              [\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR])]
          [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>]
 .SH DESCRIPTION
-.B flashrom
+.B flashprog
 is a utility for detecting, reading, writing, verifying and erasing flash
 chips. It's often used to flash BIOS/EFI/coreboot/firmware images in-system
 using a supported mainboard. However, it also supports various external
@@ -68,8 +68,8 @@
 You can specify one of
 .BR \-h ", " \-R ", " \-L ", " \-z ", " \-E ", " \-r ", " \-w ", " \-v
 or no operation.
-If no operation is specified, flashrom will only probe for flash chips. It is
-recommended that if you try flashrom the first time on a system, you run it
+If no operation is specified, flashprog will only probe for flash chips. It is
+recommended that if you try flashprog the first time on a system, you run it
 in probe-only mode and check the output. Also you are advised to make a
 backup of your current ROM contents with
 .B \-r
@@ -106,7 +106,7 @@
 feel that the time for verification takes too long.
 .sp
 Typical usage is:
-.B "flashrom \-p prog \-n \-w <file>"
+.B "flashprog \-p prog \-n \-w <file>"
 .sp
 This option is only useful in combination with
 .BR \-\-write .
@@ -117,7 +117,7 @@
 You should only use this option if you are sure that communication with
 the flash chip is reliable (e.g. when using the
 .BR internal
-programmer). Even if flashrom is instructed not to touch parts of the
+programmer). Even if flashprog is instructed not to touch parts of the
 flash chip, their contents could be damaged (e.g. due to misunderstood
 erase commands).
 .sp
@@ -145,7 +145,7 @@
 .B "\-c, \-\-chip" <chipname>
 Probe only for the specified flash ROM chip. This option takes the chip name as
 printed by
-.B "flashrom \-L"
+.B "flashprog \-L"
 without the vendor name as parameter. Please note that the chip name is
 case sensitive.
 .TP
@@ -165,7 +165,7 @@
 Read ROM layout from
 .BR <file> .
 .sp
-flashrom supports ROM layouts. This allows you to flash certain parts of
+flashprog supports ROM layouts. This allows you to flash certain parts of
 the flash chip only. A ROM layout file contains multiple lines with the
 following syntax:
 .sp
@@ -187,19 +187,19 @@
 If you only want to update the image named
 .BR "normal " "in a ROM based on the layout above, run"
 .sp
-.B "  flashrom \-p prog \-\-layout rom.layout \-\-image normal \-w some.rom"
+.B "  flashprog \-p prog \-\-layout rom.layout \-\-image normal \-w some.rom"
 .sp
 To update only the images named
 .BR "normal " "and " "fallback" ", run:"
 .sp
-.B "  flashrom \-p prog \-l rom.layout \-i normal -i fallback \-w some.rom"
+.B "  flashprog \-p prog \-l rom.layout \-i normal -i fallback \-w some.rom"
 .sp
 Overlapping sections are not supported.
 .TP
 .B "\-\-fmap"
 Read layout from fmap in flash chip.
 .sp
-flashrom supports the fmap binary format which is commonly used by coreboot
+flashprog supports the fmap binary format which is commonly used by coreboot
 for partitioning a flash chip. The on-chip fmap will be read and used to generate
 the layout.
 .sp
@@ -207,14 +207,14 @@
 .BR "COREBOOT"
 region defined in the fmap, run
 .sp
-.B " flashrom -p prog \-\-fmap \-\-image COREBOOT \-w some.rom"
+.B " flashprog -p prog \-\-fmap \-\-image COREBOOT \-w some.rom"
 .TP
 .B "\-\-fmap-file <file>"
 Read layout from a
 .BR <file>
 containing binary fmap (e.g. coreboot roms).
 .sp
-flashrom supports the fmap binary format which is commonly used by coreboot
+flashprog supports the fmap binary format which is commonly used by coreboot
 for partitioning a flash chip. The fmap in the specified file will be read and
 used to generate the layout.
 .sp
@@ -222,12 +222,12 @@
 .BR "COREBOOT"
 region defined in the binary fmap file, run
 .sp
-.B "  flashrom \-p prog \-\-fmap-file some.rom \-\-image COREBOOT \-w some.rom"
+.B "  flashprog \-p prog \-\-fmap-file some.rom \-\-image COREBOOT \-w some.rom"
 .TP
 .B "\-\-ifd"
 Read ROM layout from Intel Firmware Descriptor.
 .sp
-flashrom supports ROM layouts given by an Intel Firmware Descriptor
+flashprog supports ROM layouts given by an Intel Firmware Descriptor
 (IFD). The on-chip descriptor will be read and used to generate the
 layout. If you need to change the layout, you have to update the IFD
 only first.
@@ -261,10 +261,10 @@
 .B "\-L, \-\-list\-supported"
 List the flash chips, chipsets, mainboards, and external programmers
 (including PCI, USB, parallel port, and serial port based devices)
-supported by flashrom.
+supported by flashprog.
 .sp
 There are many unlisted boards which will work out of the box, without
-special support in flashrom. Please let us know if you can verify that
+special support in flashprog. Please let us know if you can verify that
 other boards work or do not work out of the box.
 .sp
 .B IMPORTANT:
@@ -277,7 +277,7 @@
 .BR \-\-list\-supported ,
 but outputs the supported hardware in MediaWiki syntax, so that it can be
 easily pasted into the
-.URLB https://flashrom.org/Supported_hardware "supported hardware wiki page" .
+.URLB https://flashprog.org/Supported_hardware "supported hardware wiki page" .
 Please note that MediaWiki output is not compiled in by default.
 .TP
 .B "\-p, \-\-programmer <name>[:parameter[,parameter[,parameter]]]"
@@ -286,7 +286,7 @@
 .sp
 .BR "* internal" " (for in-system flashing in the mainboard)"
 .sp
-.BR "* dummy" " (virtual programmer for testing flashrom)"
+.BR "* dummy" " (virtual programmer for testing flashprog)"
 .sp
 .BR "* nic3com" " (for flash ROMs on 3COM network cards)"
 .sp
@@ -363,7 +363,7 @@
 in detail in the
 .B PROGRAMMER-SPECIFIC INFORMATION
 section. Support for some programmers can be disabled at compile time.
-.B "flashrom \-h"
+.B "flashprog \-h"
 lists all supported programmers.
 .TP
 .B "\-h, \-\-help"
@@ -373,7 +373,7 @@
 Save the full debug log to
 .BR <logfile> .
 If the file already exists, it will be overwritten. This is the recommended
-way to gather logs from flashrom because they will be verbose even if the
+way to gather logs from flashprog because they will be verbose even if the
 on-screen messages are not verbose and don't require output redirection.
 .TP
 .B "\-R, \-\-version"
@@ -399,33 +399,33 @@
 identify the mainboard (which is the exception), or if you want to override
 the detected mainboard model, you can specify the mainboard using the
 .sp
-.B "  flashrom \-p internal:mainboard=<vendor>:<board>"
+.B "  flashprog \-p internal:mainboard=<vendor>:<board>"
 syntax.
 .sp
 See the 'Known boards' or 'Known laptops' section in the output
-of 'flashrom \-L' for a list of boards which require the specification of
+of 'flashprog \-L' for a list of boards which require the specification of
 the board name, if no coreboot table is found.
 .sp
 Some of these board-specific flash enabling functions (called
 .BR "board enables" )
-in flashrom have not yet been tested. If your mainboard is detected needing
+in flashprog have not yet been tested. If your mainboard is detected needing
 an untested board enable function, a warning message is printed and the
 board enable is not executed, because a wrong board enable function might
 cause the system to behave erratically, as board enable functions touch the
 low-level internals of a mainboard. Not executing a board enable function
 (if one is needed) might cause detection or erasing failure. If your board
 protects only part of the flash (commonly the top end, called boot block),
-flashrom might encounter an error only after erasing the unprotected part,
+flashprog might encounter an error only after erasing the unprotected part,
 so running without the board-enable function might be dangerous for erase
 and write (which includes erase).
 .sp
 The suggested procedure for a mainboard with untested board specific code is
-to first try to probe the ROM (just invoke flashrom and check that it
+to first try to probe the ROM (just invoke flashprog and check that it
 detects your flash chip type) without running the board enable code (i.e.
 without any parameters). If it finds your chip, fine. Otherwise, retry
 probing your chip with the board-enable code running, using
 .sp
-.B "  flashrom \-p internal:boardenable=force"
+.B "  flashprog \-p internal:boardenable=force"
 .sp
 If your chip is still not detected, the board enable code seems to be broken
 or the flash chip unsupported. Otherwise, make a backup of your current ROM
@@ -438,17 +438,17 @@
 You should enable the board enable code in any case now, as it
 has been written because it is known that writing/erasing without the board
 enable is going to fail. In any case (success or failure), please report to
-the flashrom mailing list, see below.
+the flashprog mailing list, see below.
 .sp
 .TP
 .B Coreboot
 .sp
-On systems running coreboot, flashrom checks whether the desired image matches
+On systems running coreboot, flashprog checks whether the desired image matches
 your mainboard. This needs some special board ID to be present in the image.
-If flashrom detects that the image you want to write and the current board
+If flashprog detects that the image you want to write and the current board
 do not match, it will refuse to write the image unless you specify
 .sp
-.B "  flashrom \-p internal:boardmismatch=force"
+.B "  flashprog \-p internal:boardmismatch=force"
 .TP
 .B ITE IT87 Super I/O
 .sp
@@ -456,7 +456,7 @@
 ITE IT87 series Super I/O to switch between the two flash chips. Only one of them can be accessed at a time
 and you can manually select which one to use with the
 .sp
-.B "  flashrom \-p internal:dualbiosindex=chip"
+.B "  flashprog \-p internal:dualbiosindex=chip"
 .sp
 syntax where
 .B chip
@@ -466,16 +466,16 @@
 parameter.
 .sp
 If your mainboard uses an ITE IT87 series Super I/O for LPC<->SPI flash bus
-translation, flashrom should autodetect that configuration. If you want to
+translation, flashprog should autodetect that configuration. If you want to
 set the I/O base port of the IT87 series SPI controller manually instead of
 using the value provided by the BIOS, use the
 .sp
-.B "  flashrom \-p internal:it87spiport=portnum"
+.B "  flashprog \-p internal:it87spiport=portnum"
 .sp
 syntax where
 .B portnum
 is the I/O port number (must be a multiple of 8). In the unlikely case
-flashrom doesn't detect an active IT87 LPC<->SPI bridge, please send a bug
+flashprog doesn't detect an active IT87 LPC<->SPI bridge, please send a bug
 report so we can diagnose the problem.
 .sp
 .TP
@@ -483,13 +483,13 @@
 .sp
 Beginning with the SB700 chipset there is an integrated microcontroller (IMC) based on the 8051 embedded in
 every AMD southbridge. Its firmware resides in the same flash chip as the host's which makes writing to the
-flash risky if the IMC is active. Flashrom tries to temporarily disable the IMC but even then changing the
+flash risky if the IMC is active. Flashprog tries to temporarily disable the IMC but even then changing the
 contents of the flash can have unwanted effects: when the IMC continues (at the latest after a reboot) it will
 continue executing code from the flash. If the code was removed or changed in an unfortunate way it is
-unpredictable what the IMC will do. Therefore, if flashrom detects an active IMC it will disable write support
+unpredictable what the IMC will do. Therefore, if flashprog detects an active IMC it will disable write support
 unless the user forces it with the
 .sp
-.B "  flashrom \-p internal:amd_imc_force=yes"
+.B "  flashprog \-p internal:amd_imc_force=yes"
 .sp
 syntax. The user is responsible for supplying a suitable image or leaving out the IMC region with the help of
 a layout file. This limitation might be removed in the future when we understand the details better and have
@@ -501,7 +501,7 @@
 directly attached to the chipset).
 Syntax is
 .sp
-.B "  flashrom \-p internal:spispeed=frequency"
+.B "  flashprog \-p internal:spispeed=frequency"
 .sp
 where
 .B frequency
@@ -528,7 +528,7 @@
 but does not allow the software to choose the SPI commands to be sent.
 You can use the
 .sp
-.B "  flashrom \-p internal:ich_spi_mode=value"
+.B "  flashprog \-p internal:ich_spi_mode=value"
 .sp
 syntax where
 .BR "value " "can be"
@@ -552,7 +552,7 @@
 to set specific IDSEL values for a non-default flash chip or an embedded
 controller (EC), you can use the
 .sp
-.B "  flashrom \-p internal:fwh_idsel=value"
+.B "  flashprog \-p internal:fwh_idsel=value"
 .sp
 syntax where
 .B value
@@ -565,28 +565,28 @@
 settings. The default value for ICH7 is given in the example below.
 .sp
 Example:
-.B "flashrom \-p internal:fwh_idsel=0x001122334567"
+.B "flashprog \-p internal:fwh_idsel=0x001122334567"
 .TP
 .B Laptops
 .sp
-Using flashrom on older laptops that don't boot from the SPI bus is
+Using flashprog on older laptops that don't boot from the SPI bus is
 dangerous and may easily make your hardware unusable (see also the
 .B BUGS
 section). The embedded controller (EC) in some
 machines may interact badly with flashing.
 More information is
-.URLB https://flashrom.org/Laptops "in the wiki" .
+.URLB https://flashprog.org/Laptops "in the wiki" .
 Problems occur when the flash chip is shared between BIOS
-and EC firmware, and the latter does not expect flashrom
-to access the chip. While flashrom tries to change the contents of
+and EC firmware, and the latter does not expect flashprog
+to access the chip. While flashprog tries to change the contents of
 that memory the EC might need to fetch new instructions or data from it and
 could stop working correctly. Probing for and reading from the chip may also
 irritate your EC and cause fan failure, backlight failure, sudden poweroff, and
-other nasty effects. flashrom will attempt to detect if it is running on such a
+other nasty effects. flashprog will attempt to detect if it is running on such a
 laptop and limit probing to SPI buses. If you want to probe the LPC bus
 anyway at your own risk, use
 .sp
-.B "  flashrom \-p internal:laptop=force_I_want_a_brick"
+.B "  flashprog \-p internal:laptop=force_I_want_a_brick"
 .sp
 We will not help you if you force flashing on a laptop because this is a really
 dumb idea.
@@ -595,24 +595,24 @@
 .sp
 Currently we rely on the chassis type encoded in the DMI/SMBIOS data to detect
 laptops. Some vendors did not implement those bits correctly or set them to
-generic and/or dummy values. flashrom will then issue a warning and restrict
+generic and/or dummy values. flashprog will then issue a warning and restrict
 buses like above. In this case you can use
 .sp
-.B "  flashrom \-p internal:laptop=this_is_not_a_laptop"
+.B "  flashprog \-p internal:laptop=this_is_not_a_laptop"
 .sp
-to tell flashrom (at your own risk) that it is not running on a laptop.
+to tell flashprog (at your own risk) that it is not running on a laptop.
 .SS
 .BR "dummy " programmer
 .IP
 The dummy programmer operates on a buffer in memory only. It provides a safe and fast way to test various
-aspects of flashrom and is mainly used in development and while debugging.
+aspects of flashprog and is mainly used in development and while debugging.
 It is able to emulate some chips to a certain degree (basic
 identify/read/erase/write operations work).
 .sp
 An optional parameter specifies the bus types it
 should support. For that you have to use the
 .sp
-.B "  flashrom \-p dummy:bus=[type[+type[+type]]]"
+.B "  flashprog \-p dummy:bus=[type[+type[+type]]]"
 .sp
 syntax where
 .B type
@@ -622,12 +622,12 @@
 If you do not specify bus, all buses will be enabled.
 .sp
 Example:
-.B "flashrom \-p dummy:bus=lpc+fwh"
+.B "flashprog \-p dummy:bus=lpc+fwh"
 .sp
 The dummy programmer supports flash chip emulation for automated self-tests
 without hardware access. If you want to emulate a flash chip, use the
 .sp
-.B "  flashrom \-p dummy:emulate=chip"
+.B "  flashprog \-p dummy:emulate=chip"
 .sp
 syntax where
 .B chip
@@ -647,22 +647,22 @@
 .RB "* Spansion " S25FL128L " SPI flash chip (16384 kB, RDID)"
 .sp
 Example:
-.B "flashrom -p dummy:emulate=SST25VF040.REMS"
+.B "flashprog -p dummy:emulate=SST25VF040.REMS"
 .TP
 .B Persistent images
 .sp
 If you use flash chip emulation, flash image persistence is available as well
 by using the
 .sp
-.B "  flashrom \-p dummy:emulate=chip,image=image.rom"
+.B "  flashprog \-p dummy:emulate=chip,image=image.rom"
 .sp
 syntax where
 .B image.rom
-is the file where the simulated chip contents are read on flashrom startup and
-where the chip contents on flashrom shutdown are written to.
+is the file where the simulated chip contents are read on flashprog startup and
+where the chip contents on flashprog shutdown are written to.
 .sp
 Example:
-.B "flashrom -p dummy:emulate=M25P10.RES,image=dummy.bin"
+.B "flashprog -p dummy:emulate=M25P10.RES,image=dummy.bin"
 .TP
 .B SPI write chunk size
 .sp
@@ -670,7 +670,7 @@
 with the default opcode, you can set the maximum allowed write chunk size with
 the
 .sp
-.B "  flashrom \-p dummy:emulate=chip,spi_write_256_chunksize=size"
+.B "  flashprog \-p dummy:emulate=chip,spi_write_256_chunksize=size"
 .sp
 syntax where
 .B size
@@ -678,22 +678,22 @@
 .sp
 Example:
 .sp
-.B "  flashrom -p dummy:emulate=M25P10.RES,spi_write_256_chunksize=5"
+.B "  flashprog -p dummy:emulate=M25P10.RES,spi_write_256_chunksize=5"
 .TP
 .B SPI blacklist
 .sp
 To simulate a programmer which refuses to send certain SPI commands to the
 flash chip, you can specify a blacklist of SPI commands with the
 .sp
-.B "  flashrom -p dummy:spi_blacklist=commandlist"
+.B "  flashprog -p dummy:spi_blacklist=commandlist"
 .sp
 syntax where
 .B commandlist
 is a list of two-digit hexadecimal representations of
-SPI commands. If commandlist is e.g.\& 0302, flashrom will behave as if the SPI
+SPI commands. If commandlist is e.g.\& 0302, flashprog will behave as if the SPI
 controller refuses to run command 0x03 (READ) and command 0x02 (WRITE).
 commandlist may be up to 512 characters (256 commands) long.
-Implementation note: flashrom will detect an error during command execution.
+Implementation note: flashprog will detect an error during command execution.
 .sp
 .TP
 .B SPI ignorelist
@@ -701,7 +701,7 @@
 To simulate a flash chip which ignores (doesn't support) certain SPI commands,
 you can specify an ignorelist of SPI commands with the
 .sp
-.B "  flashrom -p dummy:spi_ignorelist=commandlist"
+.B "  flashprog -p dummy:spi_ignorelist=commandlist"
 .sp
 syntax where
 .B commandlist
@@ -709,14 +709,14 @@
 SPI commands. If commandlist is e.g.\& 0302, the emulated flash chip will ignore
 command 0x03 (READ) and command 0x02 (WRITE).  commandlist may be up to 512
 characters (256 commands) long.
-Implementation note: flashrom won't detect an error during command execution.
+Implementation note: flashprog won't detect an error during command execution.
 .sp
 .TP
 .B SPI status register
 .sp
 You can specify the initial content of the chip's status register with the
 .sp
-.B "  flashrom -p dummy:spi_status=content"
+.B "  flashprog -p dummy:spi_status=content"
 .sp
 syntax where
 .B content
@@ -732,7 +732,7 @@
 .sp
 You can simulate state of hardware protection pin (WP) with the
 .sp
-.B "  flashrom -p dummy:hwwp=state"
+.B "  flashprog -p dummy:hwwp=state"
 .sp
 syntax where
 .B state
@@ -748,7 +748,7 @@
 your want to use, which must be specified if more than one card supported
 by the selected programmer is installed in your system. The syntax is
 .sp
-.BR "  flashrom \-p xxxx:pci=bb:dd.f" ,
+.BR "  flashprog \-p xxxx:pci=bb:dd.f" ,
 .sp
 where
 .B xxxx
@@ -761,19 +761,19 @@
 is the PCI function number of the desired device.
 .sp
 Example:
-.B "flashrom \-p nic3com:pci=05:04.0"
+.B "flashprog \-p nic3com:pci=05:04.0"
 .SS
 .BR "atavia " programmer
 .IP
 Due to the mysterious address handling of the VIA VT6421A controller the user can specify an offset with the
 .sp
-.B "  flashrom \-p atavia:offset=addr"
+.B "  flashprog \-p atavia:offset=addr"
 .sp
 syntax where
 .B addr
 will be interpreted as usual (leading 0x (0) for hexadecimal (octal) values, or else decimal).
 For more information please see
-.URLB https://flashrom.org/VT6421A "its wiki page" .
+.URLB https://flashprog.org/VT6421A "its wiki page" .
 .SS
 .BR "atapromise " programmer
 .IP
@@ -784,10 +784,10 @@
 .SS
 .BR "nicintel_eeprom " programmer
 .IP
-This is the first programmer module in flashrom that does not provide access to NOR flash chips but EEPROMs
+This is the first programmer module in flashprog that does not provide access to NOR flash chips but EEPROMs
 mounted on gigabit Ethernet cards based on Intel's 82580 NIC. Because EEPROMs normally do not announce their
 size nor allow themselves to be identified, the controller relies on correct size values written to predefined
-addresses within the chip. Flashrom follows this scheme but assumes the minimum size of 16 kB (128 kb) if an
+addresses within the chip. Flashprog follows this scheme but assumes the minimum size of 16 kB (128 kb) if an
 unprogrammed EEPROM/card is detected. Intel specifies following EEPROMs to be compatible:
 Atmel AT25128, AT25256, Micron (ST) M95128, M95256 and OnSemi (Catalyst) CAT25CS128.
 .SS
@@ -802,7 +802,7 @@
 An optional parameter specifies the controller
 type, channel/interface/port it should support. For that you have to use the
 .sp
-.B "  flashrom \-p ft2232_spi:type=model,port=interface"
+.B "  flashprog \-p ft2232_spi:type=model,port=interface"
 .sp
 syntax where
 .B model
@@ -823,7 +823,7 @@
 If there is more than one ft2232_spi-compatible device connected, you can select which one should be used by
 specifying its serial number with the
 .sp
-.B "  flashrom \-p ft2232_spi:serial=number"
+.B "  flashprog \-p ft2232_spi:serial=number"
 .sp
 syntax where
 .B number
@@ -838,7 +838,7 @@
 .B divisor
 parameter with the
 .sp
-.B "  flashrom \-p ft2232_spi:divisor=div"
+.B "  flashprog \-p ft2232_spi:divisor=div"
 .sp
 syntax.
 .sp
@@ -847,7 +847,7 @@
 an additional CS# pin can be chosen, where the value can be a number between 0 and 3, denoting GPIOL0-GPIOL3
 correspondingly. Example:
 .sp
-.B "  flashrom \-p ft2232_spi:csgpiol=3"
+.B "  flashprog \-p ft2232_spi:csgpiol=3"
 .sp
 The parameter
 .B gpiolX=[HLC]
@@ -875,7 +875,7 @@
 .sp
 .B Example:
 .sp
-.B "  flashrom \-p ft2232_spi:gpiol0=H"
+.B "  flashprog \-p ft2232_spi:gpiol0=H"
 .sp
 .B Note
 that not all GPIOL pins are freely usable with all programmers as some have special functionality.
@@ -892,12 +892,12 @@
 and separate the optional baud rate with a colon.
 For example
 .sp
-.B "  flashrom \-p serprog:dev=/dev/ttyS0:115200"
+.B "  flashprog \-p serprog:dev=/dev/ttyS0:115200"
 .sp
 If no baud rate is given the default values by the operating system/hardware will be used.
 For IP connections you have to use the
 .sp
-.B "  flashrom \-p serprog:ip=ipaddr:port"
+.B "  flashprog \-p serprog:ip=ipaddr:port"
 .sp
 syntax.
 In case the device supports it, you can set the SPI clock frequency with the optional
@@ -907,7 +907,7 @@
 suffix is given, then megahertz or kilohertz are used respectively.
 Example that sets the frequency to 2 MHz:
 .sp
-.B "  flashrom \-p serprog:dev=/dev/device:baud,spispeed=2M"
+.B "  flashprog \-p serprog:dev=/dev/device:baud,spispeed=2M"
 .sp
 More information about serprog is available in
 .B serprog-protocol.txt
@@ -922,7 +922,7 @@
 parameter specifies the frequency of the SPI bus. The parameter
 delimiter is a comma. Syntax is
 .sp
-.B "  flashrom \-p buspirate_spi:dev=/dev/device,spispeed=frequency"
+.B "  flashprog \-p buspirate_spi:dev=/dev/device,spispeed=frequency"
 .sp
 where
 .B frequency
@@ -934,7 +934,7 @@
 .B serialspeed
 parameter. Syntax is
 .sp
-.B "  flashrom -p buspirate_spi:serialspeed=baud
+.B "  flashprog -p buspirate_spi:serialspeed=baud
 .sp
 where
 .B baud
@@ -945,7 +945,7 @@
 An optional pullups parameter specifies the use of the Bus Pirate internal pull-up resistors. This may be
 needed if you are working with a flash ROM chip that you have physically removed from the board. Syntax is
 .sp
-.B "  flashrom -p buspirate_spi:pullups=state"
+.B "  flashprog -p buspirate_spi:pullups=state"
 .sp
 where
 .B state
@@ -959,7 +959,7 @@
 .B psus
 parameter. Syntax is
 .sp
-.B "  flashrom -p buspirate_spi:psus=state"
+.B "  flashprog -p buspirate_spi:psus=state"
 .sp
 where
 .B state
@@ -979,7 +979,7 @@
 .BR mV ", " millivolt ", " V " or " Volt
 as unit specifier. Syntax is
 .sp
-.B "  flashrom \-p pickit2_spi:voltage=value"
+.B "  flashprog \-p pickit2_spi:voltage=value"
 .sp
 where
 .B value
@@ -991,7 +991,7 @@
 .B spispeed
 parameter specifies the frequency of the SPI bus. Syntax is
 .sp
-.B "  flashrom \-p pickit2_spi:spispeed=frequency"
+.B "  flashprog \-p pickit2_spi:spispeed=frequency"
 .sp
 where
 .B frequency
@@ -1008,7 +1008,7 @@
 .BR mV ", " milliVolt ", " V " or " Volt
 as unit specifier. Syntax is
 .sp
-.B "  flashrom \-p dediprog:voltage=value"
+.B "  flashprog \-p dediprog:voltage=value"
 .sp
 where
 .B value
@@ -1023,14 +1023,14 @@
 at 0.
 Usage example to select the second device:
 .sp
-.B "  flashrom \-p dediprog:device=1"
+.B "  flashprog \-p dediprog:device=1"
 .sp
 An optional
 .B spispeed
 parameter specifies the frequency of the SPI bus. The firmware on the device needs to be 5.0.0 or newer.
 Syntax is
 .sp
-.B "  flashrom \-p dediprog:spispeed=frequency"
+.B "  flashprog \-p dediprog:spispeed=frequency"
 .sp
 where
 .B frequency
@@ -1042,7 +1042,7 @@
 .B target
 parameter specifies which target chip should be used. Syntax is
 .sp
-.B "  flashrom \-p dediprog:target=value"
+.B "  flashprog \-p dediprog:target=value"
 .sp
 where
 .B value
@@ -1057,7 +1057,7 @@
 .B iobase
 parameter to specify an alternate base I/O address with the
 .sp
-.B "  flashrom \-p rayer_spi:iobase=baseaddr"
+.B "  flashprog \-p rayer_spi:iobase=baseaddr"
 .sp
 syntax where
 .B baseaddr
@@ -1068,7 +1068,7 @@
 .B type
 parameter to specify the cable type with the
 .sp
-.B "  flashrom \-p rayer_spi:type=model"
+.B "  flashprog \-p rayer_spi:type=model"
 .sp
 syntax where
 .B model
@@ -1101,9 +1101,9 @@
 Information about the SI-Prog adapter can be found at
 .URLB "http://www.lancos.com/siprogsch.html" "its website" .
 .sp
-An example call to flashrom is
+An example call to flashprog is
 .sp
-.B "  flashrom \-p pony_spi:dev=/dev/ttyS0,type=serbang"
+.B "  flashprog \-p pony_spi:dev=/dev/ttyS0,type=serbang"
 .sp
 Please note that while USB-to-serial adapters work under certain circumstances,
 this slows down operation considerably.
@@ -1114,7 +1114,7 @@
 .B rom
 parameter.
 .sp
-.B "  flashrom \-p ogp_spi:rom=name"
+.B "  flashprog \-p ogp_spi:rom=name"
 .sp
 Where
 .B name
@@ -1139,11 +1139,11 @@
 Either the GPIO device node or the chip number as well as the GPIO numbers
 of the SPI lines must be specified like in the following examples:
 .sp
-.B "  flashrom \-p linux_gpio_spi:dev=/dev/gpiochip0,cs=8,sck=11,mosi=10,miso=9"
+.B "  flashprog \-p linux_gpio_spi:dev=/dev/gpiochip0,cs=8,sck=11,mosi=10,miso=9"
 .sp
 or
 .sp
-.B "  flashrom \-p linux_gpio_spi:gpiochip=0,cs=8,sck=11,mosi=10,miso=9"
+.B "  flashprog \-p linux_gpio_spi:gpiochip=0,cs=8,sck=11,mosi=10,miso=9"
 .sp
 Here,
 .B gpiochip=0
@@ -1166,7 +1166,7 @@
 .IP
 You may specify the MTD device to use with the
 .sp
-.B "  flashrom \-p linux_mtd:dev=/dev/mtdX"
+.B "  flashprog \-p linux_mtd:dev=/dev/mtdX"
 .sp
 syntax where
 .B /dev/mtdX
@@ -1179,7 +1179,7 @@
 .IP
 You have to specify the SPI controller to use with the
 .sp
-.B "  flashrom \-p linux_spi:dev=/dev/spidevX.Y"
+.B "  flashprog \-p linux_spi:dev=/dev/spidevX.Y"
 .sp
 syntax where
 .B /dev/spidevX.Y
@@ -1190,7 +1190,7 @@
 parameter. The frequency is parsed as kilohertz.
 Example that sets the frequency to 8 MHz:
 .sp
-.B "  flashrom \-p linux_spi:dev=/dev/spidevX.Y,spispeed=8000"
+.B "  flashprog \-p linux_spi:dev=/dev/spidevX.Y,spispeed=8000"
 .sp
 Please note that the linux_spi driver only works on Linux.
 .SS
@@ -1201,19 +1201,19 @@
 through EDID (at I2C address 0x50) and sending commands to the display using the DDC/CI protocol (at address
 0x37). On displays driven by MSTAR SoCs, it is also possible to access the SoC firmware flash (connected to
 the Soc through another SPI bus) using an In-System Programming (ISP) port, usually at address 0x49.
-This flashrom module allows the latter via Linux's I2C driver.
+This flashprog module allows the latter via Linux's I2C driver.
 .sp
 .B IMPORTANT:
 Before using this programmer, the display
 .B MUST
-be in standby mode, and only connected to the computer that will run flashrom using a VGA cable, to an
+be in standby mode, and only connected to the computer that will run flashprog using a VGA cable, to an
 inactive VGA output. It absolutely
 .B MUST NOT
 be used as a display during the procedure!
 .sp
 You have to specify the DDC/I2C controller and I2C address to use with the
 .sp
-.B "  flashrom \-p mstarddc_spi:dev=/dev/i2c-X:YY"
+.B "  flashprog \-p mstarddc_spi:dev=/dev/i2c-X:YY"
 .sp
 syntax where
 .B /dev/i2c-X
@@ -1222,18 +1222,18 @@
 is the (hexadecimal) address of the MSTAR ISP port (address 0x49 is usually used).
 Example that uses I2C controller /dev/i2c-1 and address 0x49:
 .sp
-.B "  flashrom \-p mstarddc_spi:dev=/dev/i2c-1:49
+.B "  flashprog \-p mstarddc_spi:dev=/dev/i2c-1:49
 .sp
-It is also possible to inhibit the reset command that is normally sent to the display once the flashrom
+It is also possible to inhibit the reset command that is normally sent to the display once the flashprog
 operation is completed using the optional
 .B noreset
-parameter. A value of 1 prevents flashrom from sending the reset command.
+parameter. A value of 1 prevents flashprog from sending the reset command.
 Example that does not reset the display at the end of the operation:
 .sp
-.B "  flashrom \-p mstarddc_spi:dev=/dev/i2c-1:49,noreset=1
+.B "  flashprog \-p mstarddc_spi:dev=/dev/i2c-1:49,noreset=1
 .sp
 Please note that sending the reset command is also inhibited if an error occurred during the operation.
-To send the reset command afterwards, you can simply run flashrom once more, in chip probe mode (not specifying
+To send the reset command afterwards, you can simply run flashprog once more, in chip probe mode (not specifying
 an operation), without the
 .B noreset
 parameter, once the flash read/write operation you intended to perform has completed successfully.
@@ -1253,7 +1253,7 @@
 parameter specifies the frequency of the SPI bus.
 Syntax is
 .sp
-.B "  flashrom \-p ch347_spi:spispeed=frequency"
+.B "  flashprog \-p ch347_spi:spispeed=frequency"
 .sp
 where
 .B frequency
@@ -1273,7 +1273,7 @@
 as unit specifier.
 Syntax is
 .sp
-.B "  flashrom \-p ni845x_spi:voltage=value"
+.B "  flashprog \-p ni845x_spi:voltage=value"
 .sp
 where
 .B value
@@ -1282,13 +1282,13 @@
 or the equivalent in mV.
 .sp
 In the case if none of the programmer's supported IO voltage is within the supported voltage range of
-the detected flash chip the flashrom will abort the operation (to prevent damaging the flash chip).
+the detected flash chip the flashprog will abort the operation (to prevent damaging the flash chip).
 You can override this behaviour by passing "yes" to the
 .B ignore_io_voltage_limits
 parameter (for e.g. if you are using an external voltage translator circuit).
 Syntax is
 .sp
-.B "  flashrom \-p ni845x_spi:ignore_io_voltage_limits=yes"
+.B "  flashprog \-p ni845x_spi:ignore_io_voltage_limits=yes"
 .sp
 You can use the
 .B serial
@@ -1296,14 +1296,14 @@
 You should use your device's 7 digit hexadecimal serial number.
 Usage example to select the device with 1230A12 serial number:
 .sp
-.B "  flashrom \-p ni845x_spi:serial=1230A12"
+.B "  flashprog \-p ni845x_spi:serial=1230A12"
 .sp
 An optional
 .B spispeed
 parameter specifies the frequency of the SPI bus.
 Syntax is
 .sp
-.B "  flashrom \-p ni845x_spi:spispeed=frequency"
+.B "  flashprog \-p ni845x_spi:spispeed=frequency"
 .sp
 where
 .B frequency
@@ -1317,7 +1317,7 @@
 .B cs
 parameter specifies which target chip select line should be used. Syntax is
 .sp
-.B "  flashrom \-p ni845x_spi:csnumber=value"
+.B "  flashprog \-p ni845x_spi:csnumber=value"
 .sp
 where
 .B value
@@ -1332,7 +1332,7 @@
 parameter specifies the frequency of the SPI bus.
 Syntax is
 .sp
-.B "  flashrom \-p digilent_spi:spispeed=frequency"
+.B "  flashprog \-p digilent_spi:spispeed=frequency"
 .sp
 where
 .B frequency
@@ -1347,7 +1347,7 @@
 parameter specifies the frequency of the SPI bus.
 Syntax is
 .sp
-.B "  flashrom \-p dirtyjtag_spi:spispeed=frequency"
+.B "  flashprog \-p dirtyjtag_spi:spispeed=frequency"
 .sp
 where
 .B frequency
@@ -1363,7 +1363,7 @@
 The chip select (\fBCS\fP) signal of the flash chip can be attached to
 different pins of the programmer which can be selected with the
 .sp
-.B "  flashrom \-p jlink_spi:cs=pin"
+.B "  flashprog \-p jlink_spi:cs=pin"
 .sp
 syntax where \fBpin\fP can be either \fBTRST\fP or \fBRESET\fP.
 The default pin for chip select is \fBRESET\fP.
@@ -1393,7 +1393,7 @@
 If there is more than one compatible device connected, you can select which one
 should be used by specifying its serial number with the
 .sp
-.B "  flashrom \-p jlink_spi:serial=number"
+.B "  flashprog \-p jlink_spi:serial=number"
 .sp
 syntax where
 .B number
@@ -1402,7 +1402,7 @@
 .sp
 The SPI speed can be selected by using the
 .sp
-.B "  flashrom \-p jlink_spi:spispeed=frequency"
+.B "  flashprog \-p jlink_spi:spispeed=frequency"
 .sp
 syntax where \fBfrequency\fP is the SPI clock frequency in kHz.
 The maximum speed depends on the device in use.
@@ -1415,12 +1415,12 @@
 This module supports SPI flash programming through the STMicroelectronics
 STLINK V3 programmer/debugger's SPI bridge interface
 .sp
-.B "  flashrom \-p stlinkv3_spi"
+.B "  flashprog \-p stlinkv3_spi"
 .sp
 If there is more than one compatible device connected, you can select which one
 should be used by specifying its serial number with the
 .sp
-.B "  flashrom \-p stlinkv3_spi:serial=number"
+.B "  flashprog \-p stlinkv3_spi:serial=number"
 .sp
 syntax where
 .B number
@@ -1429,7 +1429,7 @@
 .sp
 The SPI speed can be selected by using the
 .sp
-.B "  flashrom \-p stlinkv3_spi:spispeed=frequency"
+.B "  flashprog \-p stlinkv3_spi:spispeed=frequency"
 .sp
 syntax where \fBfrequency\fP is the SPI clock frequency in kHz.
 If the passed frequency is not supported by the adapter the nearest lower
@@ -1439,26 +1439,26 @@
 .SH EXAMPLES
 To back up and update your BIOS, run
 .sp
-.B flashrom -p internal -r backup.rom -o backuplog.txt
+.B flashprog -p internal -r backup.rom -o backuplog.txt
 .br
-.B flashrom -p internal -w newbios.rom -o writelog.txt
+.B flashprog -p internal -w newbios.rom -o writelog.txt
 .sp
 Please make sure to copy backup.rom to some external media before you try
 to write. That makes offline recovery easier.
 .br
-If writing fails and flashrom complains about the chip being in an unknown
+If writing fails and flashprog complains about the chip being in an unknown
 state, you can try to restore the backup by running
 .sp
-.B flashrom -p internal -w backup.rom -o restorelog.txt
+.B flashprog -p internal -w backup.rom -o restorelog.txt
 .sp
 If you encounter any problems, please contact us and supply
 backuplog.txt, writelog.txt and restorelog.txt. See section
 .B BUGS
 for contact info.
 .SH EXIT STATUS
-flashrom exits with 0 on success, 1 on most failures but with 3 if a call to mmap() fails.
+flashprog exits with 0 on success, 1 on most failures but with 3 if a call to mmap() fails.
 .SH REQUIREMENTS
-flashrom needs different access permissions for different programmers.
+flashprog needs different access permissions for different programmers.
 .sp
 .B internal
 needs raw memory access, PCI configuration space access, raw I/O port
@@ -1521,7 +1521,7 @@
 .SH BUGS
 You can report bugs, ask us questions or send success reports
 via our communication channels listed here:
-.URLB "https://www.flashrom.org/Contact" "" .
+.URLB "https://www.flashprog.org/Contact" "" .
 .sp
 Also, we provide a
 .URLB https://paste.flashrom.org "pastebin service"
@@ -1529,23 +1529,23 @@
 .SS
 .B Laptops
 .sp
-Using flashrom on older laptops is dangerous and may easily make your hardware
-unusable. flashrom will attempt to detect if it is running on a susceptible
+Using flashprog on older laptops is dangerous and may easily make your hardware
+unusable. flashprog will attempt to detect if it is running on a susceptible
 laptop and restrict flash-chip probing for safety reasons. Please see the
-detailed discussion of this topic and associated flashrom options in the
+detailed discussion of this topic and associated flashprog options in the
 .B Laptops
 paragraph in the
 .B internal programmer
 subsection of the
 .B PROGRAMMER-SPECIFIC INFORMATION
 section and the information
-.URLB "https://flashrom.org/Laptops" "in our wiki" .
+.URLB "https://flashprog.org/Laptops" "in our wiki" .
 .SS
 One-time programmable (OTP) memory and unique IDs
 .sp
 Some flash chips contain OTP memory often denoted as "security registers".
 They usually have a capacity in the range of some bytes to a few hundred
-bytes and can be used to give devices unique IDs etc.  flashrom is not able
+bytes and can be used to give devices unique IDs etc.  flashprog is not able
 to read or write these memories and may therefore not be able to duplicate a
 chip completely. For chip types known to include OTP memories a warning is
 printed when they are detected.
@@ -1553,7 +1553,7 @@
 Similar to OTP memories are unique, factory programmed, unforgeable IDs.
 They are not modifiable by the user at all.
 .SH LICENSE
-.B flashrom
+.B flashprog
 is covered by the GNU General Public License (GPL), version 2. Some files are
 additionally available under any later version of the GPL.
 .SH COPYRIGHT
@@ -1638,10 +1638,10 @@
 .br
 Yinghai Lu
 .br
-some others, please see the flashrom git history for details.
+some others, please see the flashprog git history for details.
 .br
 Active maintainers can be reached via
-.MTOB "flashrom-stable@flashrom.org" "the mailing list" .
+.MTOB "flashprog@flashprog.org" "the mailing list" .
 .PP
 This manual page was written by
 .MTOB "uwe@hermann-uwe.de" "Uwe Hermann" ,
diff --git a/flashrom.c b/flashprog.c
similarity index 95%
rename from flashrom.c
rename to flashprog.c
index 50e0a86..096453e 100644
--- a/flashrom.c
+++ b/flashprog.c
@@ -34,7 +34,7 @@
 #include "hwaccess_physmap.h"
 #include "chipdrivers.h"
 
-const char flashrom_version[] = FLASHROM_VERSION;
+const char flashprog_version[] = FLASHPROG_VERSION;
 const char *chip_to_probe = NULL;
 
 static const struct programmer_entry *programmer = NULL;
@@ -261,7 +261,7 @@
 	needlelen = strlen(needle);
 	if (!needlelen) {
 		msg_gerr("%s: empty needle! Please report a bug at "
-			 "flashrom-stable@flashrom.org\n", __func__);
+			 "flashprog@flashprog.org\n", __func__);
 		return NULL;
 	}
 	/* No programmer parameters given. */
@@ -478,7 +478,7 @@
 			return need_erase_gran_bytes(have, want, len, stride, erased_value);
 		}
 		msg_cerr("%s: Unsupported granularity! Please report a bug at "
-			 "flashrom-stable@flashrom.org\n", __func__);
+			 "flashprog@flashprog.org\n", __func__);
 		return 0;
 	}
 }
@@ -516,7 +516,7 @@
 	const size_t stride = gran_to_bytes(gran);
 	if (!stride) {
 		msg_cerr("%s: Unsupported granularity! Please report a bug at "
-			 "flashrom-stable@flashrom.org\n", __func__);
+			 "flashprog@flashprog.org\n", __func__);
 		/* Claim that no write was needed. A write with unknown
 		 * granularity is too dangerous to try.
 		 */
@@ -637,10 +637,10 @@
 static int init_default_layout(struct flashctx *flash)
 {
 	/* Fill default layout covering the whole chip. */
-	if (flashrom_layout_new(&flash->default_layout) ||
-	    flashrom_layout_add_region(flash->default_layout,
+	if (flashprog_layout_new(&flash->default_layout) ||
+	    flashprog_layout_add_region(flash->default_layout,
 			0, flash->chip->total_size * 1024 - 1, "complete flash") ||
-	    flashrom_layout_include_region(flash->default_layout, "complete flash"))
+	    flashprog_layout_include_region(flash->default_layout, "complete flash"))
 	        return -1;
 	return 0;
 }
@@ -662,7 +662,7 @@
 			continue;
 		msg_gdbg("Probing for %s %s, %d kB: ", chip->vendor, chip->name, chip->total_size);
 		if (!chip->probe && !force) {
-			msg_gdbg("failed! flashrom has no probe function for this flash chip.\n");
+			msg_gdbg("failed! flashprog has no probe function for this flash chip.\n");
 			continue;
 		}
 
@@ -697,7 +697,7 @@
 		if (startchip == 0 && flash->chip->model_id == SFDP_DEVICE_ID) {
 			msg_cinfo("===\n"
 				  "SFDP has autodetected a flash chip which is "
-				  "not natively supported by flashrom yet.\n");
+				  "not natively supported by flashprog yet.\n");
 			if (count_usable_erasers(flash) == 0)
 				msg_cinfo("The standard operations read and "
 					  "verify should work, but to support "
@@ -711,8 +711,8 @@
 
 			msg_cinfo(" we need to add them manually.\n"
 				  "You can help us by mailing us the output of the following command to "
-				  "flashrom-stable@flashrom.org:\n"
-				  "'flashrom -VV [plus the -p/--programmer parameter]'\n"
+				  "flashprog@flashprog.org:\n"
+				  "'flashprog -VV [plus the -p/--programmer parameter]'\n"
 				  "Thanks for your help!\n"
 				  "===\n");
 		}
@@ -778,7 +778,7 @@
 			if (eraser.eraseblocks[i].count &&
 			    !eraser.eraseblocks[i].size) {
 				msg_gerr("ERROR: Flash chip %s erase function %i region %i has size 0.\n"
-					 "Please report a bug at flashrom-stable@flashrom.org\n",
+					 "Please report a bug at flashprog@flashprog.org\n",
 					 chip->name, k, i);
 				ret = 1;
 			}
@@ -786,7 +786,7 @@
 			if (!eraser.eraseblocks[i].count &&
 			    eraser.eraseblocks[i].size) {
 				msg_gerr("ERROR: Flash chip %s erase function %i region %i has count 0.\n"
-					 "Please report a bug at flashrom-stable@flashrom.org\n",
+					 "Please report a bug at flashprog@flashprog.org\n",
 					 chip->name, k, i);
 				ret = 1;
 			}
@@ -804,7 +804,7 @@
 			msg_gerr("ERROR: Flash chip %s erase function %i "
 				"region walking resulted in 0x%06x bytes total,"
 				" expected 0x%06x bytes.\n"
-				"Please report a bug at flashrom-stable@flashrom.org\n",
+				"Please report a bug at flashprog@flashprog.org\n",
 				chip->name, k, done, chip->total_size * 1024);
 			ret = 1;
 		}
@@ -818,7 +818,7 @@
 			if (eraser.block_erase ==
 			    chip->block_erasers[j].block_erase) {
 				msg_gerr("ERROR: Flash chip %s erase function %i and %i are identical.\n"
-					 "Please report a bug at flashrom-stable@flashrom.org\n",
+					 "Please report a bug at flashprog@flashprog.org\n",
 					 chip->name, k, j);
 				ret = 1;
 			}
@@ -826,7 +826,7 @@
 		if(curr_eraseblock_count > prev_eraseblock_count)
 		{
 			msg_gerr("ERROR: Flash chip %s erase function %i is not in order.\n"
-				 "Please report a bug at flashrom-stable@flashrom.org\n",
+				 "Please report a bug at flashprog@flashprog.org\n",
 				 chip->name, k);
 			ret = 1;
 		}
@@ -886,7 +886,7 @@
  */
 static int read_by_layout(struct flashctx *const flashctx, uint8_t *const buffer)
 {
-	const struct flashrom_layout *const layout = get_layout(flashctx);
+	const struct flashprog_layout *const layout = get_layout(flashctx);
 	const struct romentry *entry = NULL;
 
 	while ((entry = layout_next_included(layout, entry))) {
@@ -1194,7 +1194,7 @@
 			  const per_blockfn_t per_blockfn)
 {
 	const bool do_erase = explicit_erase(info) || !(flashctx->chip->feature_bits & FEATURE_NO_ERASE);
-	const struct flashrom_layout *const layout = get_layout(flashctx);
+	const struct flashprog_layout *const layout = get_layout(flashctx);
 	struct erase_layout *erase_layouts = NULL;
 	const struct romentry *entry = NULL;
 	int ret = 0, layout_count = 0;
@@ -1374,7 +1374,7 @@
  */
 static int verify_by_layout(
 		struct flashctx *const flashctx,
-		const struct flashrom_layout *const layout,
+		const struct flashprog_layout *const layout,
 		void *const curcontents, const uint8_t *const newcontents)
 {
 	const struct romentry *entry = NULL;
@@ -1398,16 +1398,16 @@
 #if CONFIG_INTERNAL == 1
 	if (programmer == &programmer_internal)
 		msg_gerr("This means we have to add special support for your board, programmer or flash\n"
-			 "chip. Please report this to the mailing list at flashrom-stable@flashrom.org or\n"
-			 "on IRC (see https://www.flashrom.org/Contact for details), thanks!\n"
+			 "chip. Please report this to the mailing list at flashprog@flashprog.org or\n"
+			 "on IRC (see https://www.flashprog.org/Contact for details), thanks!\n"
 			 "-------------------------------------------------------------------------------\n"
 			 "You may now reboot or simply leave the machine running.\n");
 	else
 #endif
 		msg_gerr("Please check the connections (especially those to write protection pins) between\n"
-			 "the programmer and the flash chip. If you think the error is caused by flashrom\n"
-			 "please report this to the mailing list at flashrom-stable@flashrom.org or on IRC\n"
-			 "(see https://www.flashrom.org/Contact for details), thanks!\n");
+			 "the programmer and the flash chip. If you think the error is caused by flashprog\n"
+			 "please report this to the mailing list at flashprog@flashprog.org or on IRC\n"
+			 "(see https://www.flashprog.org/Contact for details), thanks!\n");
 }
 
 void emergency_help_message(void)
@@ -1415,14 +1415,14 @@
 	msg_gerr("Your flash chip is in an unknown state.\n");
 #if CONFIG_INTERNAL == 1
 	if (programmer == &programmer_internal)
-		msg_gerr("Get help on IRC (see https://www.flashrom.org/Contact) or mail\n"
-			"flashrom-stable@flashrom.org with the subject \"FAILED: <your board name>\"!\n"
+		msg_gerr("Get help on IRC (see https://www.flashprog.org/Contact) or mail\n"
+			"flashprog@flashprog.org with the subject \"FAILED: <your board name>\"!\n"
 			"-------------------------------------------------------------------------------\n"
 			"DO NOT REBOOT OR POWEROFF!\n");
 	else
 #endif
-		msg_gerr("Please report this to the mailing list at flashrom-stable@flashrom.org\n"
-			 "or on IRC (see https://www.flashrom.org/Contact for details), thanks!\n");
+		msg_gerr("Please report this to the mailing list at flashprog@flashprog.org\n"
+			 "or on IRC (see https://www.flashprog.org/Contact for details), thanks!\n");
 }
 
 void list_programmers_linebreak(int startcol, int cols, int paren)
@@ -1521,7 +1521,7 @@
 			if (chip->vendor == NULL || chip->name == NULL || chip->bustype == BUS_NONE) {
 				ret = 1;
 				msg_gerr("ERROR: Some field of flash chip #%d (%s) is misconfigured.\n"
-					 "Please report a bug at flashrom-stable@flashrom.org\n", i,
+					 "Please report a bug at flashprog@flashprog.org\n", i,
 					 chip->name == NULL ? "unnamed" : chip->name);
 			}
 			if (selfcheck_eraseblocks(chip)) {
@@ -1566,7 +1566,7 @@
 			msg_cerr("Continuing anyway.\n");
 		}
 		if (!chip->read) {
-			msg_cerr("flashrom has no read function for this "
+			msg_cerr("flashprog has no read function for this "
 				 "flash chip.\n");
 			return 1;
 		}
@@ -1584,7 +1584,7 @@
 			msg_cerr("Continuing anyway.\n");
 		}
 		if(count_usable_erasers(flash) == 0) {
-			msg_cerr("flashrom has no erase function for this "
+			msg_cerr("flashprog has no erase function for this "
 				 "flash chip.\n");
 			return 1;
 		}
@@ -1601,7 +1601,7 @@
 			msg_cerr("Continuing anyway.\n");
 		}
 		if (!chip->write) {
-			msg_cerr("flashrom has no write function for this "
+			msg_cerr("flashprog has no write function for this "
 				 "flash chip.\n");
 			return 1;
 		}
@@ -1670,7 +1670,7 @@
 }
 
 /**
- * @addtogroup flashrom-flash
+ * @addtogroup flashprog-flash
  * @{
  */
 
@@ -1683,7 +1683,7 @@
  * @param flashctx The context of the flash chip to erase.
  * @return 0 on success.
  */
-int flashrom_flash_erase(struct flashctx *const flashctx)
+int flashprog_flash_erase(struct flashctx *const flashctx)
 {
 	if (prepare_flash_access(flashctx, false, false, true, false))
 		return 1;
@@ -1695,10 +1695,10 @@
 	return ret;
 }
 
-/** @} */ /* end flashrom-flash */
+/** @} */ /* end flashprog-flash */
 
 /**
- * @defgroup flashrom-ops Operations
+ * @defgroup flashprog-ops Operations
  * @{
  */
 
@@ -1715,7 +1715,7 @@
  *         2 if buffer_len is too short for the flash chip's contents,
  *         or 1 on any other failure.
  */
-int flashrom_image_read(struct flashctx *const flashctx, void *const buffer, const size_t buffer_len)
+int flashprog_image_read(struct flashctx *const flashctx, void *const buffer, const size_t buffer_len)
 {
 	const size_t flash_size = flashctx->chip->total_size * 1024;
 
@@ -1744,7 +1744,7 @@
 static void combine_image_by_layout(const struct flashctx *const flashctx,
 				    uint8_t *const newcontents, const uint8_t *const oldcontents)
 {
-	const struct flashrom_layout *const layout = get_layout(flashctx);
+	const struct flashprog_layout *const layout = get_layout(flashctx);
 	const struct romentry *included;
 	chipoff_t start = 0;
 
@@ -1780,13 +1780,13 @@
  *         2 if write failed and flash contents changed,
  *         or 1 on any other failure.
  */
-int flashrom_image_write(struct flashctx *const flashctx, void *const buffer, const size_t buffer_len,
+int flashprog_image_write(struct flashctx *const flashctx, void *const buffer, const size_t buffer_len,
                          const void *const refbuffer)
 {
 	const size_t flash_size = flashctx->chip->total_size * 1024;
 	const bool verify_all = flashctx->flags.verify_whole_chip;
 	const bool verify = flashctx->flags.verify_after_write;
-	const struct flashrom_layout *const verify_layout =
+	const struct flashprog_layout *const verify_layout =
 		verify_all ? get_default_layout(flashctx) : get_layout(flashctx);
 
 	if (buffer_len != flash_size)
@@ -1917,9 +1917,9 @@
  *         2 if buffer_len doesn't match the size of the flash chip,
  *         or 1 on any other failure.
  */
-int flashrom_image_verify(struct flashctx *const flashctx, const void *const buffer, const size_t buffer_len)
+int flashprog_image_verify(struct flashctx *const flashctx, const void *const buffer, const size_t buffer_len)
 {
-	const struct flashrom_layout *const layout = get_layout(flashctx);
+	const struct flashprog_layout *const layout = get_layout(flashctx);
 	const size_t flash_size = flashctx->chip->total_size * 1024;
 
 	if (buffer_len != flash_size)
@@ -1948,4 +1948,4 @@
 	return ret;
 }
 
-/** @} */ /* end flashrom-ops */
+/** @} */ /* end flashprog-ops */
diff --git a/fmap.c b/fmap.c
index 69824ea..0eb5bf9 100644
--- a/fmap.c
+++ b/fmap.c
@@ -324,7 +324,7 @@
 	 * speed benefit of using bsearch at which point we need to use brute-
 	 * force instead.
 	 *
-	 * TODO: Since flashrom is often used with high-latency external
+	 * TODO: Since flashprog is often used with high-latency external
 	 * programmers we should not be overly aggressive with bsearch.
 	 */
 	ret = fmap_bsearch_rom(fmap_out, flashctx, rom_offset, len, 256);
diff --git a/ft2232_spi.c b/ft2232_spi.c
index 246956e..4f9fbeb 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -26,7 +26,7 @@
 #include <ftdi.h>
 
 /* This is not defined in libftdi.h <0.20 (c7e4c09e68cfa6f5e112334aa1b3bb23401c8dc7 to be exact).
- * Some tests indicate that this is the only change that it is needed to support the FT232H in flashrom. */
+ * Some tests indicate that this is the only change that it is needed to support the FT232H in flashprog. */
 #if !defined(HAVE_FT232H)
 #define TYPE_232H	6
 #endif
diff --git a/hwaccess_physmap.c b/hwaccess_physmap.c
index 5f18f8e..8d7ddf2 100644
--- a/hwaccess_physmap.c
+++ b/hwaccess_physmap.c
@@ -320,7 +320,7 @@
 	/* No need to check for zero size, such mappings would have yielded ERROR_PTR. */
 	if (virt_addr == ERROR_PTR) {
 		msg_perr("Trying to unmap a nonexisting mapping!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n");
+			 "Please report a bug at flashprog@flashprog.org\n");
 		return;
 	}
 
@@ -334,7 +334,7 @@
 	/* No need to check for zero size, such mappings would have yielded ERROR_PTR. */
 	if (virt_addr == ERROR_PTR) {
 		msg_perr("Trying to unmap a nonexisting mapping!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n");
+			 "Please report a bug at flashprog@flashprog.org\n");
 		return;
 	}
 	tmp = (uintptr_t)virt_addr;
diff --git a/ich_descriptors.c b/ich_descriptors.c
index 4ea2727..f939389 100644
--- a/ich_descriptors.c
+++ b/ich_descriptors.c
@@ -1066,7 +1066,7 @@
 			msg_pwarn("\nThe flash descriptor looks like a Skylake/Sunrise Point descriptor.\n"
 				  "However, the read frequency isn't set to 17MHz (the only valid value).\n"
 				  "Please report this message, the output of `ich_descriptors_tool` for\n"
-				  "your descriptor and the output of `lspci -nn` to flashrom-stable@flashrom.org\n\n");
+				  "your descriptor and the output of `lspci -nn` to flashprog@flashprog.org\n\n");
 		}
 		break;
 	default:
@@ -1074,7 +1074,7 @@
 			msg_pwarn("\nThe flash descriptor has the read frequency set to 17MHz. However,\n"
 				  "it doesn't look like a Skylake/Sunrise Point compatible descriptor.\n"
 				  "Please report this message, the output of `ich_descriptors_tool` for\n"
-				  "your descriptor and the output of `lspci -nn` to flashrom-stable@flashrom.org\n\n");
+				  "your descriptor and the output of `lspci -nn` to flashprog@flashprog.org\n\n");
 		}
 	}
 	return guess;
@@ -1339,7 +1339,7 @@
  *	   2 when out of memory.
  */
 int layout_from_ich_descriptors(
-		struct flashrom_layout **const layout,
+		struct flashprog_layout **const layout,
 		const void *const dump, const size_t len)
 {
 	static const char *const regions[] = {
@@ -1352,7 +1352,7 @@
 	if (read_ich_descriptors_from_dump(dump, len, &cs, &desc))
 		return 1;
 
-	if (flashrom_layout_new(layout))
+	if (flashprog_layout_new(layout))
 		return 2;
 
 	ssize_t i;
@@ -1362,8 +1362,8 @@
 		const chipoff_t limit = ICH_FREG_LIMIT(desc.region.FLREGs[i]);
 		if (limit <= base)
 			continue;
-		if (flashrom_layout_add_region(*layout, base, limit, regions[i])) {
-			flashrom_layout_release(*layout);
+		if (flashprog_layout_add_region(*layout, base, limit, regions[i])) {
+			flashprog_layout_release(*layout);
 			*layout = NULL;
 			return 2;
 		}
diff --git a/ichspi.c b/ichspi.c
index afedaf2..b4555b9 100644
--- a/ichspi.c
+++ b/ichspi.c
@@ -1905,9 +1905,9 @@
 			for (i = 0; i < num_freg; i++)
 				ich_spi_rw_restricted |= ich9_handle_frap(tmp, i);
 			if (ich_spi_rw_restricted)
-				msg_pinfo("Not all flash regions are freely accessible by flashrom. This is "
+				msg_pinfo("Not all flash regions are freely accessible by flashprog. This is "
 					  "most likely\ndue to an active ME. Please see "
-					  "https://flashrom.org/ME for details.\n");
+					  "https://flashprog.org/ME for details.\n");
 		}
 
 		/* Handle PR registers */
@@ -1975,17 +1975,17 @@
 				tmp = mmio_readl(ich_spibar + ICH8_REG_VSCC);
 				msg_pdbg("0x%x: 0x%08x (VSCC)\n", ICH8_REG_VSCC, tmp);
 				msg_pdbg("VSCC: ");
-				prettyprint_ich_reg_vscc(tmp, FLASHROM_MSG_DEBUG, true);
+				prettyprint_ich_reg_vscc(tmp, FLASHPROG_MSG_DEBUG, true);
 			} else {
 				tmp = mmio_readl(ich_spibar + ICH9_REG_LVSCC);
 				msg_pdbg("0x%x: 0x%08x (LVSCC)\n", ICH9_REG_LVSCC, tmp);
 				msg_pdbg("LVSCC: ");
-				prettyprint_ich_reg_vscc(tmp, FLASHROM_MSG_DEBUG, true);
+				prettyprint_ich_reg_vscc(tmp, FLASHPROG_MSG_DEBUG, true);
 
 				tmp = mmio_readl(ich_spibar + ICH9_REG_UVSCC);
 				msg_pdbg("0x%x: 0x%08x (UVSCC)\n", ICH9_REG_UVSCC, tmp);
 				msg_pdbg("UVSCC: ");
-				prettyprint_ich_reg_vscc(tmp, FLASHROM_MSG_DEBUG, false);
+				prettyprint_ich_reg_vscc(tmp, FLASHPROG_MSG_DEBUG, false);
 			}
 
 			switch (ich_gen) {
diff --git a/include/flash.h b/include/flash.h
index db19566..bb31731 100644
--- a/include/flash.h
+++ b/include/flash.h
@@ -32,7 +32,7 @@
 #undef max
 #endif
 
-#include "libflashrom.h"
+#include "libflashprog.h"
 #include "layout.h"
 #include "writeprotect.h"
 
@@ -178,8 +178,8 @@
 #define TEST_BAD_PREW	(struct tested){ .probe = BAD, .read = BAD, .erase = BAD, .write = BAD, .wp = NT }
 #define TEST_BAD_PREWB	(struct tested){ .probe = BAD, .read = BAD, .erase = BAD, .write = BAD, .wp = BAD }
 
-struct flashrom_flashctx;
-#define flashctx flashrom_flashctx /* TODO: Agree on a name and convert all occurrences. */
+struct flashprog_flashctx;
+#define flashctx flashprog_flashctx /* TODO: Agree on a name and convert all occurrences. */
 typedef int (erasefunc_t)(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
 
 enum flash_reg {
@@ -230,7 +230,7 @@
 	unsigned int page_size;
 	int feature_bits;
 
-	/* Indicate how well flashrom supports different operations of this flash chip. */
+	/* Indicate how well flashprog supports different operations of this flash chip. */
 	struct tested {
 		enum test_state probe;
 		enum test_state read;
@@ -327,20 +327,20 @@
 
 typedef int (*chip_restore_fn_cb_t)(struct flashctx *flash, uint8_t status);
 
-struct flashrom_flashctx {
+struct flashprog_flashctx {
 	struct flashchip *chip;
 	/* FIXME: The memory mappings should be saved in a more structured way. */
 	/* The physical_* fields store the respective addresses in the physical address space of the CPU. */
 	uintptr_t physical_memory;
-	/* The virtual_* fields store where the respective physical address is mapped into flashrom's address
+	/* The virtual_* fields store where the respective physical address is mapped into flashprog's address
 	 * space. A value equivalent to (chipaddr)ERROR_PTR indicates an invalid mapping (or none at all). */
 	chipaddr virtual_memory;
 	/* Some flash devices have an additional register space; semantics are like above. */
 	uintptr_t physical_registers;
 	chipaddr virtual_registers;
 	struct registered_master *mst;
-	const struct flashrom_layout *layout;
-	struct flashrom_layout *default_layout;
+	const struct flashprog_layout *layout;
+	struct flashprog_layout *default_layout;
 	struct {
 		bool force;
 		bool force_boardmismatch;
@@ -412,8 +412,8 @@
 size_t strnlen(const char *str, size_t n);
 #endif
 
-/* flashrom.c */
-extern const char flashrom_version[];
+/* flashprog.c */
+extern const char flashprog_version[];
 extern const char *chip_to_probe;
 char *flashbuses_to_text(enum chipbustype bustype);
 int map_flash(struct flashctx *flash);
@@ -436,26 +436,26 @@
 
 /* Something happened that shouldn't happen, we'll abort. */
 #define ERROR_FATAL -0xee
-#define ERROR_FLASHROM_BUG -200
-/* We reached one of the hardcoded limits of flashrom. This can be fixed by
+#define ERROR_FLASHPROG_BUG -200
+/* We reached one of the hardcoded limits of flashprog. This can be fixed by
  * increasing the limit of a compile-time allocation or by switching to dynamic
  * allocation.
  * Note: If this warning is triggered, check first for runaway registrations.
  */
-#define ERROR_FLASHROM_LIMIT -201
+#define ERROR_FLASHPROG_LIMIT -201
 
 /* cli_common.c */
 void print_chip_support_status(const struct flashchip *chip);
 
 /* cli_output.c */
-extern enum flashrom_log_level verbose_screen;
-extern enum flashrom_log_level verbose_logfile;
+extern enum flashprog_log_level verbose_screen;
+extern enum flashprog_log_level verbose_logfile;
 int open_logfile(const char * const filename);
 int close_logfile(void);
 void start_logging(void);
-int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap);
+int flashprog_print_cb(enum flashprog_log_level level, const char *fmt, va_list ap);
 /* Let gcc and clang check for correct printf-style format strings. */
-int print(enum flashrom_log_level level, const char *fmt, ...)
+int print(enum flashprog_log_level level, const char *fmt, ...)
 #ifdef __MINGW32__
 #  ifndef __MINGW_PRINTF_FORMAT
 #    define __MINGW_PRINTF_FORMAT gnu_printf
@@ -464,24 +464,24 @@
 #else
 __attribute__((format(printf, 2, 3)));
 #endif
-#define msg_gerr(...)	print(FLASHROM_MSG_ERROR, __VA_ARGS__)	/* general errors */
-#define msg_perr(...)	print(FLASHROM_MSG_ERROR, __VA_ARGS__)	/* programmer errors */
-#define msg_cerr(...)	print(FLASHROM_MSG_ERROR, __VA_ARGS__)	/* chip errors */
-#define msg_gwarn(...)	print(FLASHROM_MSG_WARN, __VA_ARGS__)	/* general warnings */
-#define msg_pwarn(...)	print(FLASHROM_MSG_WARN, __VA_ARGS__)	/* programmer warnings */
-#define msg_cwarn(...)	print(FLASHROM_MSG_WARN, __VA_ARGS__)	/* chip warnings */
-#define msg_ginfo(...)	print(FLASHROM_MSG_INFO, __VA_ARGS__)	/* general info */
-#define msg_pinfo(...)	print(FLASHROM_MSG_INFO, __VA_ARGS__)	/* programmer info */
-#define msg_cinfo(...)	print(FLASHROM_MSG_INFO, __VA_ARGS__)	/* chip info */
-#define msg_gdbg(...)	print(FLASHROM_MSG_DEBUG, __VA_ARGS__)	/* general debug */
-#define msg_pdbg(...)	print(FLASHROM_MSG_DEBUG, __VA_ARGS__)	/* programmer debug */
-#define msg_cdbg(...)	print(FLASHROM_MSG_DEBUG, __VA_ARGS__)	/* chip debug */
-#define msg_gdbg2(...)	print(FLASHROM_MSG_DEBUG2, __VA_ARGS__)	/* general debug2 */
-#define msg_pdbg2(...)	print(FLASHROM_MSG_DEBUG2, __VA_ARGS__)	/* programmer debug2 */
-#define msg_cdbg2(...)	print(FLASHROM_MSG_DEBUG2, __VA_ARGS__)	/* chip debug2 */
-#define msg_gspew(...)	print(FLASHROM_MSG_SPEW, __VA_ARGS__)	/* general debug spew  */
-#define msg_pspew(...)	print(FLASHROM_MSG_SPEW, __VA_ARGS__)	/* programmer debug spew  */
-#define msg_cspew(...)	print(FLASHROM_MSG_SPEW, __VA_ARGS__)	/* chip debug spew  */
+#define msg_gerr(...)	print(FLASHPROG_MSG_ERROR, __VA_ARGS__)	/* general errors */
+#define msg_perr(...)	print(FLASHPROG_MSG_ERROR, __VA_ARGS__)	/* programmer errors */
+#define msg_cerr(...)	print(FLASHPROG_MSG_ERROR, __VA_ARGS__)	/* chip errors */
+#define msg_gwarn(...)	print(FLASHPROG_MSG_WARN, __VA_ARGS__)	/* general warnings */
+#define msg_pwarn(...)	print(FLASHPROG_MSG_WARN, __VA_ARGS__)	/* programmer warnings */
+#define msg_cwarn(...)	print(FLASHPROG_MSG_WARN, __VA_ARGS__)	/* chip warnings */
+#define msg_ginfo(...)	print(FLASHPROG_MSG_INFO, __VA_ARGS__)	/* general info */
+#define msg_pinfo(...)	print(FLASHPROG_MSG_INFO, __VA_ARGS__)	/* programmer info */
+#define msg_cinfo(...)	print(FLASHPROG_MSG_INFO, __VA_ARGS__)	/* chip info */
+#define msg_gdbg(...)	print(FLASHPROG_MSG_DEBUG, __VA_ARGS__)	/* general debug */
+#define msg_pdbg(...)	print(FLASHPROG_MSG_DEBUG, __VA_ARGS__)	/* programmer debug */
+#define msg_cdbg(...)	print(FLASHPROG_MSG_DEBUG, __VA_ARGS__)	/* chip debug */
+#define msg_gdbg2(...)	print(FLASHPROG_MSG_DEBUG2, __VA_ARGS__)	/* general debug2 */
+#define msg_pdbg2(...)	print(FLASHPROG_MSG_DEBUG2, __VA_ARGS__)	/* programmer debug2 */
+#define msg_cdbg2(...)	print(FLASHPROG_MSG_DEBUG2, __VA_ARGS__)	/* chip debug2 */
+#define msg_gspew(...)	print(FLASHPROG_MSG_SPEW, __VA_ARGS__)	/* general debug spew  */
+#define msg_pspew(...)	print(FLASHPROG_MSG_SPEW, __VA_ARGS__)	/* programmer debug spew  */
+#define msg_cspew(...)	print(FLASHPROG_MSG_SPEW, __VA_ARGS__)	/* chip debug spew  */
 
 /* spi.c */
 struct spi_command {
diff --git a/include/ich_descriptors.h b/include/ich_descriptors.h
index 5a6cdf1..7e123f3 100644
--- a/include/ich_descriptors.h
+++ b/include/ich_descriptors.h
@@ -591,6 +591,6 @@
 int read_ich_descriptors_via_fdo(enum ich_chipset cs, void *spibar, struct ich_descriptors *desc);
 int getFCBA_component_density(enum ich_chipset cs, const struct ich_descriptors *desc, uint8_t idx);
 
-int layout_from_ich_descriptors(struct flashrom_layout **, const void *dump, size_t len);
+int layout_from_ich_descriptors(struct flashprog_layout **, const void *dump, size_t len);
 
 #endif /* __ICH_DESCRIPTORS_H__ */
diff --git a/include/layout.h b/include/layout.h
index 91a6d6e..356ca25 100644
--- a/include/layout.h
+++ b/include/layout.h
@@ -44,23 +44,23 @@
 	char *name;
 };
 
-struct flashrom_layout;
+struct flashprog_layout;
 
 struct layout_include_args;
 
-struct flashrom_flashctx;
-const struct flashrom_layout *get_default_layout(const struct flashrom_flashctx *);
-const struct flashrom_layout *get_layout(const struct flashrom_flashctx *);
+struct flashprog_flashctx;
+const struct flashprog_layout *get_default_layout(const struct flashprog_flashctx *);
+const struct flashprog_layout *get_layout(const struct flashprog_flashctx *);
 
-int layout_from_file(struct flashrom_layout **, const char *name);
+int layout_from_file(struct flashprog_layout **, const char *name);
 
 int register_include_arg(struct layout_include_args **, char *arg);
-int process_include_args(struct flashrom_layout *, const struct layout_include_args *);
+int process_include_args(struct flashprog_layout *, const struct layout_include_args *);
 void cleanup_include_args(struct layout_include_args **);
 
-const struct romentry *layout_next_included_region(const struct flashrom_layout *, chipoff_t);
-const struct romentry *layout_next_included(const struct flashrom_layout *, const struct romentry *);
-const struct romentry *layout_next(const struct flashrom_layout *, const struct romentry *);
-int layout_sanity_checks(const struct flashrom_flashctx *, bool write_it);
+const struct romentry *layout_next_included_region(const struct flashprog_layout *, chipoff_t);
+const struct romentry *layout_next_included(const struct flashprog_layout *, const struct romentry *);
+const struct romentry *layout_next(const struct flashprog_layout *, const struct romentry *);
+int layout_sanity_checks(const struct flashprog_flashctx *, bool write_it);
 
 #endif /* !__LAYOUT_H__ */
diff --git a/include/libflashprog.h b/include/libflashprog.h
new file mode 100644
index 0000000..9c39f5f
--- /dev/null
+++ b/include/libflashprog.h
@@ -0,0 +1,118 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright (C) 2010 Google Inc.
+ * Copyright (C) 2012 secunet Security Networks AG
+ * (Written by Nico Huber <nico.huber@secunet.com> for secunet)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef __LIBFLASHPROG_H__
+#define __LIBFLASHPROG_H__ 1
+
+#include <sys/types.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdarg.h>
+
+int flashprog_init(int perform_selfcheck);
+int flashprog_shutdown(void);
+/** @ingroup flashprog-general */
+enum flashprog_log_level {
+	FLASHPROG_MSG_ERROR	= 0,
+	FLASHPROG_MSG_WARN	= 1,
+	FLASHPROG_MSG_INFO	= 2,
+	FLASHPROG_MSG_DEBUG	= 3,
+	FLASHPROG_MSG_DEBUG2	= 4,
+	FLASHPROG_MSG_SPEW	= 5,
+};
+/** @ingroup flashprog-general */
+typedef int(flashprog_log_callback)(enum flashprog_log_level, const char *format, va_list);
+void flashprog_set_log_callback(flashprog_log_callback *);
+
+/** @ingroup flashprog-prog */
+struct flashprog_programmer;
+int flashprog_programmer_init(struct flashprog_programmer **, const char *prog_name, const char *prog_params);
+int flashprog_programmer_shutdown(struct flashprog_programmer *);
+
+struct flashprog_flashctx;
+int flashprog_flash_probe(struct flashprog_flashctx **, const struct flashprog_programmer *, const char *chip_name);
+size_t flashprog_flash_getsize(const struct flashprog_flashctx *);
+int flashprog_flash_erase(struct flashprog_flashctx *);
+void flashprog_flash_release(struct flashprog_flashctx *);
+
+/** @ingroup flashprog-flash */
+enum flashprog_flag {
+	FLASHPROG_FLAG_FORCE,
+	FLASHPROG_FLAG_FORCE_BOARDMISMATCH,
+	FLASHPROG_FLAG_VERIFY_AFTER_WRITE,
+	FLASHPROG_FLAG_VERIFY_WHOLE_CHIP,
+};
+void flashprog_flag_set(struct flashprog_flashctx *, enum flashprog_flag, bool value);
+bool flashprog_flag_get(const struct flashprog_flashctx *, enum flashprog_flag);
+
+int flashprog_image_read(struct flashprog_flashctx *, void *buffer, size_t buffer_len);
+int flashprog_image_write(struct flashprog_flashctx *, void *buffer, size_t buffer_len, const void *refbuffer);
+int flashprog_image_verify(struct flashprog_flashctx *, const void *buffer, size_t buffer_len);
+
+struct flashprog_layout;
+int flashprog_layout_new(struct flashprog_layout **);
+int flashprog_layout_read_from_ifd(struct flashprog_layout **, struct flashprog_flashctx *, const void *dump, size_t len);
+int flashprog_layout_read_fmap_from_rom(struct flashprog_layout **,
+		struct flashprog_flashctx *, size_t offset, size_t length);
+int flashprog_layout_read_fmap_from_buffer(struct flashprog_layout **layout,
+		struct flashprog_flashctx *, const uint8_t *buf, size_t len);
+int flashprog_layout_add_region(struct flashprog_layout *, size_t start, size_t end, const char *name);
+int flashprog_layout_include_region(struct flashprog_layout *, const char *name);
+void flashprog_layout_release(struct flashprog_layout *);
+void flashprog_layout_set(struct flashprog_flashctx *, const struct flashprog_layout *);
+
+/** @ingroup flashprog-wp */
+enum flashprog_wp_result {
+	FLASHPROG_WP_OK = 0,
+	FLASHPROG_WP_ERR_CHIP_UNSUPPORTED = 1,
+	FLASHPROG_WP_ERR_OTHER = 2,
+	FLASHPROG_WP_ERR_READ_FAILED = 3,
+	FLASHPROG_WP_ERR_WRITE_FAILED = 4,
+	FLASHPROG_WP_ERR_VERIFY_FAILED = 5,
+	FLASHPROG_WP_ERR_RANGE_UNSUPPORTED = 6,
+	FLASHPROG_WP_ERR_MODE_UNSUPPORTED = 7,
+	FLASHPROG_WP_ERR_RANGE_LIST_UNAVAILABLE = 8,
+	FLASHPROG_WP_ERR_UNSUPPORTED_STATE = 9,
+};
+
+enum flashprog_wp_mode {
+	FLASHPROG_WP_MODE_DISABLED,
+	FLASHPROG_WP_MODE_HARDWARE,
+	FLASHPROG_WP_MODE_POWER_CYCLE,
+	FLASHPROG_WP_MODE_PERMANENT
+};
+struct flashprog_wp_cfg;
+struct flashprog_wp_ranges;
+
+enum flashprog_wp_result flashprog_wp_cfg_new(struct flashprog_wp_cfg **);
+void flashprog_wp_cfg_release(struct flashprog_wp_cfg *);
+void flashprog_wp_set_mode(struct flashprog_wp_cfg *, enum flashprog_wp_mode);
+enum flashprog_wp_mode flashprog_wp_get_mode(const struct flashprog_wp_cfg *);
+void flashprog_wp_set_range(struct flashprog_wp_cfg *, size_t start, size_t len);
+void flashprog_wp_get_range(size_t *start, size_t *len, const struct flashprog_wp_cfg *);
+
+enum flashprog_wp_result flashprog_wp_read_cfg(struct flashprog_wp_cfg *, struct flashprog_flashctx *);
+enum flashprog_wp_result flashprog_wp_write_cfg(struct flashprog_flashctx *, const struct flashprog_wp_cfg *);
+
+enum flashprog_wp_result flashprog_wp_get_available_ranges(struct flashprog_wp_ranges **, struct flashprog_flashctx *);
+size_t flashprog_wp_ranges_get_count(const struct flashprog_wp_ranges *);
+enum flashprog_wp_result flashprog_wp_ranges_get_range(size_t *start, size_t *len, const struct flashprog_wp_ranges *, unsigned int index);
+void flashprog_wp_ranges_release(struct flashprog_wp_ranges *);
+
+#endif				/* !__LIBFLASHPROG_H__ */
diff --git a/include/libflashrom.h b/include/libflashrom.h
deleted file mode 100644
index 9f503a2..0000000
--- a/include/libflashrom.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * This file is part of the flashrom project.
- *
- * Copyright (C) 2010 Google Inc.
- * Copyright (C) 2012 secunet Security Networks AG
- * (Written by Nico Huber <nico.huber@secunet.com> for secunet)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#ifndef __LIBFLASHROM_H__
-#define __LIBFLASHROM_H__ 1
-
-#include <sys/types.h>
-#include <stddef.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdarg.h>
-
-int flashrom_init(int perform_selfcheck);
-int flashrom_shutdown(void);
-/** @ingroup flashrom-general */
-enum flashrom_log_level {
-	FLASHROM_MSG_ERROR	= 0,
-	FLASHROM_MSG_WARN	= 1,
-	FLASHROM_MSG_INFO	= 2,
-	FLASHROM_MSG_DEBUG	= 3,
-	FLASHROM_MSG_DEBUG2	= 4,
-	FLASHROM_MSG_SPEW	= 5,
-};
-/** @ingroup flashrom-general */
-typedef int(flashrom_log_callback)(enum flashrom_log_level, const char *format, va_list);
-void flashrom_set_log_callback(flashrom_log_callback *);
-
-/** @ingroup flashrom-prog */
-struct flashrom_programmer;
-int flashrom_programmer_init(struct flashrom_programmer **, const char *prog_name, const char *prog_params);
-int flashrom_programmer_shutdown(struct flashrom_programmer *);
-
-struct flashrom_flashctx;
-int flashrom_flash_probe(struct flashrom_flashctx **, const struct flashrom_programmer *, const char *chip_name);
-size_t flashrom_flash_getsize(const struct flashrom_flashctx *);
-int flashrom_flash_erase(struct flashrom_flashctx *);
-void flashrom_flash_release(struct flashrom_flashctx *);
-
-/** @ingroup flashrom-flash */
-enum flashrom_flag {
-	FLASHROM_FLAG_FORCE,
-	FLASHROM_FLAG_FORCE_BOARDMISMATCH,
-	FLASHROM_FLAG_VERIFY_AFTER_WRITE,
-	FLASHROM_FLAG_VERIFY_WHOLE_CHIP,
-};
-void flashrom_flag_set(struct flashrom_flashctx *, enum flashrom_flag, bool value);
-bool flashrom_flag_get(const struct flashrom_flashctx *, enum flashrom_flag);
-
-int flashrom_image_read(struct flashrom_flashctx *, void *buffer, size_t buffer_len);
-int flashrom_image_write(struct flashrom_flashctx *, void *buffer, size_t buffer_len, const void *refbuffer);
-int flashrom_image_verify(struct flashrom_flashctx *, const void *buffer, size_t buffer_len);
-
-struct flashrom_layout;
-int flashrom_layout_new(struct flashrom_layout **);
-int flashrom_layout_read_from_ifd(struct flashrom_layout **, struct flashrom_flashctx *, const void *dump, size_t len);
-int flashrom_layout_read_fmap_from_rom(struct flashrom_layout **,
-		struct flashrom_flashctx *, size_t offset, size_t length);
-int flashrom_layout_read_fmap_from_buffer(struct flashrom_layout **layout,
-		struct flashrom_flashctx *, const uint8_t *buf, size_t len);
-int flashrom_layout_add_region(struct flashrom_layout *, size_t start, size_t end, const char *name);
-int flashrom_layout_include_region(struct flashrom_layout *, const char *name);
-void flashrom_layout_release(struct flashrom_layout *);
-void flashrom_layout_set(struct flashrom_flashctx *, const struct flashrom_layout *);
-
-/** @ingroup flashrom-wp */
-enum flashrom_wp_result {
-	FLASHROM_WP_OK = 0,
-	FLASHROM_WP_ERR_CHIP_UNSUPPORTED = 1,
-	FLASHROM_WP_ERR_OTHER = 2,
-	FLASHROM_WP_ERR_READ_FAILED = 3,
-	FLASHROM_WP_ERR_WRITE_FAILED = 4,
-	FLASHROM_WP_ERR_VERIFY_FAILED = 5,
-	FLASHROM_WP_ERR_RANGE_UNSUPPORTED = 6,
-	FLASHROM_WP_ERR_MODE_UNSUPPORTED = 7,
-	FLASHROM_WP_ERR_RANGE_LIST_UNAVAILABLE = 8,
-	FLASHROM_WP_ERR_UNSUPPORTED_STATE = 9,
-};
-
-enum flashrom_wp_mode {
-	FLASHROM_WP_MODE_DISABLED,
-	FLASHROM_WP_MODE_HARDWARE,
-	FLASHROM_WP_MODE_POWER_CYCLE,
-	FLASHROM_WP_MODE_PERMANENT
-};
-struct flashrom_wp_cfg;
-struct flashrom_wp_ranges;
-
-enum flashrom_wp_result flashrom_wp_cfg_new(struct flashrom_wp_cfg **);
-void flashrom_wp_cfg_release(struct flashrom_wp_cfg *);
-void flashrom_wp_set_mode(struct flashrom_wp_cfg *, enum flashrom_wp_mode);
-enum flashrom_wp_mode flashrom_wp_get_mode(const struct flashrom_wp_cfg *);
-void flashrom_wp_set_range(struct flashrom_wp_cfg *, size_t start, size_t len);
-void flashrom_wp_get_range(size_t *start, size_t *len, const struct flashrom_wp_cfg *);
-
-enum flashrom_wp_result flashrom_wp_read_cfg(struct flashrom_wp_cfg *, struct flashrom_flashctx *);
-enum flashrom_wp_result flashrom_wp_write_cfg(struct flashrom_flashctx *, const struct flashrom_wp_cfg *);
-
-enum flashrom_wp_result flashrom_wp_get_available_ranges(struct flashrom_wp_ranges **, struct flashrom_flashctx *);
-size_t flashrom_wp_ranges_get_count(const struct flashrom_wp_ranges *);
-enum flashrom_wp_result flashrom_wp_ranges_get_range(size_t *start, size_t *len, const struct flashrom_wp_ranges *, unsigned int index);
-void flashrom_wp_ranges_release(struct flashrom_wp_ranges *);
-
-#endif				/* !__LIBFLASHROM_H__ */
diff --git a/include/programmer.h b/include/programmer.h
index a4e2be6..4fee2ef 100644
--- a/include/programmer.h
+++ b/include/programmer.h
@@ -277,7 +277,7 @@
 int register_spi_bitbang_master(const struct bitbang_spi_master *master, void *spi_data);
 
 
-/* flashrom.c */
+/* flashprog.c */
 struct decode_sizes {
 	uint32_t parallel;
 	uint32_t lpc;
diff --git a/include/spi.h b/include/spi.h
index 4c6ff3e..dc09b8e 100644
--- a/include/spi.h
+++ b/include/spi.h
@@ -211,7 +211,7 @@
 #define SPI_INVALID_OPCODE	-2
 #define SPI_INVALID_ADDRESS	-3
 #define SPI_INVALID_LENGTH	-4
-#define SPI_FLASHROM_BUG	-5
+#define SPI_FLASHPROG_BUG	-5
 #define SPI_PROGRAMMER_ERROR	-6
 
 #endif		/* !__SPI_H__ */
diff --git a/include/writeprotect.h b/include/writeprotect.h
index e27403d..0e5a86e 100644
--- a/include/writeprotect.h
+++ b/include/writeprotect.h
@@ -22,7 +22,7 @@
 #include <stdbool.h>
 #include <stddef.h>
 
-#include "libflashrom.h"
+#include "libflashprog.h"
 
 #define MAX_BP_BITS 4
 
@@ -32,13 +32,13 @@
 };
 
 /* Generic description of a chip's write protection configuration. */
-struct flashrom_wp_cfg {
-        enum flashrom_wp_mode mode;
+struct flashprog_wp_cfg {
+        enum flashprog_wp_mode mode;
         struct wp_range range;
 };
 
 /* Collection of multiple write protection ranges. */
-struct flashrom_wp_ranges {
+struct flashprog_wp_ranges {
 	struct wp_range *ranges;
 	size_t count;
 };
@@ -75,15 +75,15 @@
 	uint8_t bp[MAX_BP_BITS];
 };
 
-struct flashrom_flashctx;
+struct flashprog_flashctx;
 
 /* Write WP configuration to the chip */
-enum flashrom_wp_result wp_write_cfg(struct flashrom_flashctx *, const struct flashrom_wp_cfg *);
+enum flashprog_wp_result wp_write_cfg(struct flashprog_flashctx *, const struct flashprog_wp_cfg *);
 
 /* Read WP configuration from the chip */
-enum flashrom_wp_result wp_read_cfg(struct flashrom_wp_cfg *, struct flashrom_flashctx *);
+enum flashprog_wp_result wp_read_cfg(struct flashprog_wp_cfg *, struct flashprog_flashctx *);
 
 /* Get a list of protection ranges supported by the chip */
-enum flashrom_wp_result wp_get_available_ranges(struct flashrom_wp_ranges **, struct flashrom_flashctx *);
+enum flashprog_wp_result wp_get_available_ranges(struct flashprog_wp_ranges **, struct flashprog_flashctx *);
 
 #endif /* !__WRITEPROTECT_H__ */
diff --git a/internal.c b/internal.c
index 9ddcff9..f8de4a7 100644
--- a/internal.c
+++ b/internal.c
@@ -282,10 +282,10 @@
 	if (is_laptop && !laptop_ok) {
 		msg_pinfo("========================================================================\n");
 		if (is_laptop == 1) {
-			msg_pinfo("You seem to be running flashrom on an unknown laptop. Some\n"
+			msg_pinfo("You seem to be running flashprog on an unknown laptop. Some\n"
 				  "internal buses have been disabled for safety reasons.\n\n");
 		} else {
-			msg_pinfo("You may be running flashrom on an unknown laptop. We could not\n"
+			msg_pinfo("You may be running flashprog on an unknown laptop. We could not\n"
 				  "detect this for sure because your vendor has not set up the SMBIOS\n"
 				  "tables correctly. Some internal buses have been disabled for\n"
 				  "safety reasons. You can enforce using all buses by adding\n"
@@ -296,7 +296,7 @@
 		msg_perr("Laptops, notebooks and netbooks are difficult to support and we\n"
 			 "recommend to use the vendor flashing utility. The embedded controller\n"
 			 "(EC) in these machines often interacts badly with flashing.\n"
-			 "See the manpage and https://flashrom.org/Laptops for details.\n\n"
+			 "See the manpage and https://flashprog.org/Laptops for details.\n\n"
 			 "If flash is shared with the EC, erase is guaranteed to brick your laptop\n"
 			 "and write may brick your laptop.\n"
 			 "Read and probe may irritate your EC and cause fan failure, backlight\n"
diff --git a/jedec.c b/jedec.c
index 280eed7..a8b734b 100644
--- a/jedec.c
+++ b/jedec.c
@@ -649,7 +649,7 @@
 	/* Only allow changes to known read/write/lockdown bits */
 	if (((cur ^ new) & ~REG2_MASK) != 0) {
 		msg_cerr("Invalid lock change from 0x%02x to 0x%02x requested at 0x%0*" PRIxPTR "!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 cur, new, PRIxPTR_WIDTH, lockreg);
 		return -1;
 	}
diff --git a/known_boards.c b/known_boards.c
index afc6992..135f45e 100644
--- a/known_boards.c
+++ b/known_boards.c
@@ -72,7 +72,7 @@
 	B("ASRock",	"960GM-GS3 FX",		OK, "http://www.asrock.com/mb/overview.asp?Model=960GM-GS3%20FX", NULL),
 	B("ASRock",	"A330GC",		OK, "http://www.asrock.com/mb/overview.asp?Model=A330GC", NULL),
 	B("ASRock",	"A770CrossFire",	OK, "http://www.asrock.com/mb/overview.asp?Model=A770CrossFire", NULL),
-	B("ASRock",	"A780FullHD",		OK, "http://www.asrock.com/mb/overview.asp?Model=A780FullHD", "While flashrom is working correctly, there might be problems with the firmware images themselves. Please see https://flashrom.org/pipermail/flashrom/2012-July/009600.html for details."),
+	B("ASRock",	"A780FullHD",		OK, "http://www.asrock.com/mb/overview.asp?Model=A780FullHD", "While flashprog is working correctly, there might be problems with the firmware images themselves. Please see https://flashrom.org/pipermail/flashrom/2012-July/009600.html for details."),
 	B("ASRock",	"ALiveNF6G-DVI",	OK, "http://www.asrock.com/mb/overview.asp?Model=ALiveNF6G-DVI", NULL),
 	B("ASRock",	"AM2NF6G-VSTA",		OK, "http://www.asrock.com/mb/overview.asp?Model=AM2NF6G-VSTA", NULL),
 	B("ASRock",	"AMCP7AION-HT",		OK, "http://www.asrock.com/nettop/NVIDIA/ION%20330HT/", "Used in ION 330HT(-BD) barebones."),
@@ -163,7 +163,7 @@
 	B("ASUS",	"M4N68T V2",		OK, "https://www.asus.com/Motherboards/AMD_AM3/M4N68T_V2/", NULL),
 	B("ASUS",	"M4N78 PRO",		OK, "https://www.asus.com/Motherboards/AMD_AM2Plus/M4N78_PRO/", NULL),
 	B("ASUS",	"M4N78 SE",		OK, "https://www.asus.com/Motherboards/AMD_AM2Plus/M4N78_SE/", NULL),
-	B("ASUS",	"M5A78L-M LX",		OK, "https://www.asus.com/Motherboards/AMD_AM3Plus/M5A78LM_LX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashrom; see https://flashrom.org/pipermail/flashrom/2012-May/009200.html"),
+	B("ASUS",	"M5A78L-M LX",		OK, "https://www.asus.com/Motherboards/AMD_AM3Plus/M5A78LM_LX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashprog; see https://flashrom.org/pipermail/flashrom/2012-May/009200.html"),
 	B("ASUS",	"M5A97 (rev. 1.0)",	OK, "https://www.asus.com/Motherboard/M5A97/", NULL),
 	B("ASUS",	"M5A99X EVO",		OK, "https://www.asus.com/Motherboards/AMD_AM3Plus/M5A99X_EVO/", NULL),
 	B("ASUS",	"Maximus IV Extreme",	BAD, "https://www.asus.com/Motherboards/Intel_Socket_1155/Maximus_IV_Extreme/", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."),
@@ -202,7 +202,7 @@
 	B("ASUS",	"P5BV-R",		OK, "https://www.asus.com/Server_Workstation/Servers/RS120E5PA2/", "Used in RS120-E5/PA2 servers."),
 	B("ASUS",	"P5GC-MX/1333",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5GCMX1333/", NULL),
 	B("ASUS",	"P5GD1 Pro",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5GD1_PRO/", NULL),
-	B("ASUS",	"P5GD1-VM/S",		OK, NULL, "This is an OEM board from FSC. Although flashrom supports it and can probably not distinguish it from the P5GD1-VM, please note that the P5GD1-VM BIOS does not support the FSC variants completely."),
+	B("ASUS",	"P5GD1-VM/S",		OK, NULL, "This is an OEM board from FSC. Although flashprog supports it and can probably not distinguish it from the P5GD1-VM, please note that the P5GD1-VM BIOS does not support the FSC variants completely."),
 	B("ASUS",	"P5GD1(-VM)",		NT, NULL, "Untested board enable."),
 	B("ASUS",	"P5GD2 Premium",	OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5GD2_Premium/", NULL),
 	B("ASUS",	"P5GD2-X",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5GD2X/", NULL),
@@ -233,13 +233,13 @@
 	B("ASUS",	"P5PE-VM",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5PEVM/", NULL),
 	B("ASUS",	"P5QPL-AM",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5QPLAM/", NULL),
 	B("ASUS",	"P5VD1-X",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5VD1X/", NULL),
-	B("ASUS",	"P5VD2-MX",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5VD2MX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashrom; see https://flashrom.org/pipermail/flashrom/2012-March/009014.html"),
+	B("ASUS",	"P5VD2-MX",		OK, "https://www.asus.com/Motherboards/Intel_Socket_775/P5VD2MX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashprog; see https://flashrom.org/pipermail/flashrom/2012-March/009014.html"),
 	B("ASUS",	"P5W DH Deluxe",	OK, "https://www.asus.com/SupportOnly/P5W_DH_Deluxe/HelpDesk_Knowledge/", NULL),
 	B("ASUS",	"P6T SE",		OK, "https://www.asus.com/Motherboards/Intel_Socket_1366/P6T_SE/", NULL),
 	B("ASUS",	"P6T Deluxe",		OK, "https://www.asus.com/Motherboards/Intel_Socket_1366/P6T_Deluxe/", NULL),
 	B("ASUS",	"P6T Deluxe V2",	OK, "https://www.asus.com/Motherboards/Intel_Socket_1366/P6T_Deluxe_V2/", NULL),
 	B("ASUS",	"P7H57D-V EVO",		OK, "https://www.asus.com/Motherboards/Intel_Socket_1156/P7H57DV_EVO/", NULL),
-	B("ASUS",	"P7H55-M LX",		BAD, NULL, "flashrom works correctly, but GbE LAN is nonworking (probably due to a missing/bogus MAC address; see https://flashrom.org/pipermail/flashrom/2011-July/007432.html and http://ubuntuforums.org/showthread.php?t=1534389 for a possible workaround)"),
+	B("ASUS",	"P7H55-M LX",		BAD, NULL, "flashprog works correctly, but GbE LAN is nonworking (probably due to a missing/bogus MAC address; see https://flashrom.org/pipermail/flashrom/2011-July/007432.html and http://ubuntuforums.org/showthread.php?t=1534389 for a possible workaround)"),
 	B("ASUS",	"P8B-E/4L",		BAD, NULL, "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."),
 	B("ASUS",	"P8B WS",		BAD, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."),
 	B("ASUS",	"P8B75-M LE",		BAD, NULL, "Probing works (2x 8192 kB via hwseq), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."),
@@ -484,11 +484,11 @@
 	B("MSI",	"MS-7250 (K9N SLI (rev 2.1))", OK, "http://www.msi.com/product/mb/K9N--SLI.html", NULL),
 	B("MSI",	"MS-7253 (K9VGM-V)",	OK, "http://www.msi.com/product/mb/K9VGM-V.html", NULL),
 	B("MSI",	"MS-7255 (P4M890M)",	OK, "http://www.msi.com/product/mb/P4M890M-L-IL.html", NULL),
-	B("MSI",	"MS-7260 (K9N Neo PCB 1.0)", BAD, "http://www.msi.com/product/mb/K9N-Neo--PCB-1-0-.html", "Interestingly flashrom does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot. Owned by Uwe Hermann <uwe@hermann-uwe.de>."),
+	B("MSI",	"MS-7260 (K9N Neo PCB 1.0)", BAD, "http://www.msi.com/product/mb/K9N-Neo--PCB-1-0-.html", "Interestingly flashprog does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot. Owned by Uwe Hermann <uwe@hermann-uwe.de>."),
 	B("MSI",	"MS-7309 (K9N6SGM-V)", BAD, "http://www.msi.com/product/mb/K9N6SGM-V---K9N6PGM-FI---K9N6PGM-F.html", "Uses Fintek F71882F/F71883F/F71887 SPI-to-LPC translation."),
 	B("MSI",	"MS-7309 (K9N6PGM2-V2)", OK, "http://www.msi.com/product/mb/K9N6PGM2-V2.html", NULL),
 	B("MSI",	"MS-7312 (K9MM-V)",	OK, "http://www.msi.com/product/mb/K9MM-V.html", NULL),
-	B("MSI",	"MS-7336",		OK, NULL, "Some non-essential DMI data (e.g. serial numbers) is overwritten when using flashrom. This is an OEM board used by HP (e.g. dx2300 Microtower)."),
+	B("MSI",	"MS-7336",		OK, NULL, "Some non-essential DMI data (e.g. serial numbers) is overwritten when using flashprog. This is an OEM board used by HP (e.g. dx2300 Microtower)."),
 	B("MSI",	"MS-7345 (P35 Neo2-FIR)", OK, "http://www.msi.com/product/mb/P35-Neo2-FR---FIR.html", NULL),
 	B("MSI",	"MS-7357 (G33M)",	OK, "http://www.msi.com/product/mb/G33M.html", NULL),
 	B("MSI",	"MS-7368 (K9AG Neo2-Digital)", OK, "http://www.msi.com/product/mb/K9AG-Neo2-Digital.html", NULL),
@@ -675,7 +675,7 @@
 	B("Fujitsu",	"Amilo Xi 3650",	OK, NULL, NULL),
 	B("HP/Compaq",	"EliteBook 8560p",	BAD, NULL, "SPI lock down, SMM protection, PR in BIOS region, read-only descriptor, locked ME region."),
 	B("HP/Compaq",	"nx9005",		BAD, "http://h18000.www1.hp.com/products/quickspecs/11602_na/11602_na.HTML", "Shuts down when probing for a chip. https://flashrom.org/pipermail/flashrom/2010-May/003321.html"),
-	B("HP/Compaq",	"nx9010",		BAD, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=c00348514", "Hangs upon '''flashrom -V''' (needs hard power-cycle then)."),
+	B("HP/Compaq",	"nx9010",		BAD, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=c00348514", "Hangs upon '''flashprog -V''' (needs hard power-cycle then)."),
 	B("IBM/Lenovo",	"ThinkPad T40p",	BAD, "http://www.thinkwiki.org/wiki/Category:T40p", NULL),
 	B("IBM/Lenovo",	"ThinkPad T410s",	BAD, "http://www.thinkwiki.org/wiki/Category:T410s", "Probing works (Winbond W25X64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."),
 	B("IBM/Lenovo",	"ThinkPad T420",	BAD, "http://www.thinkwiki.org/wiki/Category:T420", "Probing works (Macronix MX25L6405, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."),
diff --git a/layout.c b/layout.c
index 4a5c276..5ae8f95 100644
--- a/layout.c
+++ b/layout.c
@@ -24,7 +24,7 @@
 #include "programmer.h"
 #include "layout.h"
 
-struct flashrom_layout {
+struct flashprog_layout {
 	struct romentry *head;
 };
 
@@ -33,12 +33,12 @@
 	struct layout_include_args *next;
 };
 
-const struct flashrom_layout *get_default_layout(const struct flashrom_flashctx *const flashctx)
+const struct flashprog_layout *get_default_layout(const struct flashprog_flashctx *const flashctx)
 {
 	return flashctx->default_layout;
 }
 
-const struct flashrom_layout *get_layout(const struct flashrom_flashctx *const flashctx)
+const struct flashprog_layout *get_layout(const struct flashprog_flashctx *const flashctx)
 {
 	if (flashctx->layout)
 		return flashctx->layout;
@@ -47,19 +47,19 @@
 }
 
 static struct romentry *mutable_layout_next(
-		const struct flashrom_layout *const layout, struct romentry *iterator)
+		const struct flashprog_layout *const layout, struct romentry *iterator)
 {
 	return iterator ? iterator->next : layout->head;
 }
 
 #ifndef __LIBPAYLOAD__
-int layout_from_file(struct flashrom_layout **layout, const char *name)
+int layout_from_file(struct flashprog_layout **layout, const char *name)
 {
 	FILE *romlayout;
 	char tempstr[256], tempname[256];
 	int ret = 1;
 
-	if (flashrom_layout_new(layout))
+	if (flashprog_layout_new(layout))
 		return 1;
 
 	romlayout = fopen(name, "r");
@@ -87,7 +87,7 @@
 			msg_gerr("Error parsing layout file. Offending string: \"%s\"\n", tempstr);
 			goto _close_ret;
 		}
-		if (flashrom_layout_add_region(*layout,
+		if (flashprog_layout_add_region(*layout,
 				strtol(tstr1, NULL, 16), strtol(tstr2, NULL, 16), tempname))
 			goto _close_ret;
 	}
@@ -131,13 +131,13 @@
 }
 
 /* returns -1 if an entry is not found, 0 if found. */
-static int find_romentry(struct flashrom_layout *const l, char *name)
+static int find_romentry(struct flashprog_layout *const l, char *name)
 {
 	if (!l->head)
 		return -1;
 
 	msg_gspew("Looking for region \"%s\"... ", name);
-	if (flashrom_layout_include_region(l, name)) {
+	if (flashprog_layout_include_region(l, name)) {
 		msg_gspew("not found.\n");
 		return -1;
 	}
@@ -148,7 +148,7 @@
 /* process -i arguments
  * returns 0 to indicate success, >0 to indicate failure
  */
-int process_include_args(struct flashrom_layout *l, const struct layout_include_args *const args)
+int process_include_args(struct flashprog_layout *l, const struct layout_include_args *const args)
 {
 	unsigned int found = 0;
 	const struct layout_include_args *tmp;
@@ -197,9 +197,9 @@
 	}
 }
 
-int layout_sanity_checks(const struct flashrom_flashctx *const flash, const bool write_it)
+int layout_sanity_checks(const struct flashprog_flashctx *const flash, const bool write_it)
 {
-	const struct flashrom_layout *const layout = get_layout(flash);
+	const struct flashprog_layout *const layout = get_layout(flash);
 	const chipsize_t total_size = flash->chip->total_size * 1024;
 	const size_t gran = gran_to_bytes(flash->chip->gran);
 	int ret = 0;
@@ -228,7 +228,7 @@
 }
 
 const struct romentry *layout_next_included_region(
-		const struct flashrom_layout *const l, const chipoff_t where)
+		const struct flashprog_layout *const l, const chipoff_t where)
 {
 	const struct romentry *entry = NULL, *lowest = NULL;
 
@@ -245,7 +245,7 @@
 }
 
 const struct romentry *layout_next_included(
-		const struct flashrom_layout *const layout, const struct romentry *iterator)
+		const struct flashprog_layout *const layout, const struct romentry *iterator)
 {
 	while ((iterator = layout_next(layout, iterator))) {
 		if (iterator->included)
@@ -255,13 +255,13 @@
 }
 
 const struct romentry *layout_next(
-		const struct flashrom_layout *const layout, const struct romentry *iterator)
+		const struct flashprog_layout *const layout, const struct romentry *iterator)
 {
 	return iterator ? iterator->next : layout->head;
 }
 
 /**
- * @addtogroup flashrom-layout
+ * @addtogroup flashprog-layout
  * @{
  */
 
@@ -273,7 +273,7 @@
  * @return 0 on success,
  *         1 if out of memory.
  */
-int flashrom_layout_new(struct flashrom_layout **const layout)
+int flashprog_layout_new(struct flashprog_layout **const layout)
 {
 	*layout = malloc(sizeof(**layout));
 	if (!*layout) {
@@ -281,7 +281,7 @@
 		return 1;
 	}
 
-	const struct flashrom_layout tmp = { 0 };
+	const struct flashprog_layout tmp = { 0 };
 	**layout = tmp;
 	return 0;
 }
@@ -297,8 +297,8 @@
  * @return 0 on success,
  *         1 if out of memory.
  */
-int flashrom_layout_add_region(
-		struct flashrom_layout *const layout,
+int flashprog_layout_add_region(
+		struct flashprog_layout *const layout,
 		const size_t start, const size_t end, const char *const name)
 {
 	struct romentry *const entry = malloc(sizeof(*entry));
@@ -335,7 +335,7 @@
  * @return 0 on success,
  *         1 if the given name can't be found.
  */
-int flashrom_layout_include_region(struct flashrom_layout *const layout, const char *name)
+int flashprog_layout_include_region(struct flashprog_layout *const layout, const char *name)
 {
 	struct romentry *entry = NULL;
 	while ((entry = mutable_layout_next(layout, entry))) {
@@ -352,7 +352,7 @@
  *
  * @param layout Layout to free.
  */
-void flashrom_layout_release(struct flashrom_layout *const layout)
+void flashprog_layout_release(struct flashprog_layout *const layout)
 {
 	if (!layout)
 		return;
@@ -366,4 +366,4 @@
 	free(layout);
 }
 
-/** @} */ /* end flashrom-layout */
+/** @} */ /* end flashprog-layout */
diff --git a/libflashrom.c b/libflashprog.c
similarity index 69%
rename from libflashrom.c
rename to libflashprog.c
index 3408faf..ea1142d 100644
--- a/libflashrom.c
+++ b/libflashprog.c
@@ -30,24 +30,24 @@
 #include "programmer.h"
 #include "layout.h"
 #include "ich_descriptors.h"
-#include "libflashrom.h"
+#include "libflashprog.h"
 #include "writeprotect.h"
 
 /**
- * @defgroup flashrom-general General
+ * @defgroup flashprog-general General
  * @{
  */
 
 /** Pointer to log callback function. */
-static flashrom_log_callback *global_log_callback = NULL;
+static flashprog_log_callback *global_log_callback = NULL;
 
 /**
- * @brief Initialize libflashrom.
+ * @brief Initialize libflashprog.
  *
  * @param perform_selfcheck If not zero, perform a self check.
  * @return 0 on success
  */
-int flashrom_init(const int perform_selfcheck)
+int flashprog_init(const int perform_selfcheck)
 {
 	if (perform_selfcheck && selfcheck())
 		return 1;
@@ -56,33 +56,33 @@
 }
 
 /**
- * @brief Shut down libflashrom.
+ * @brief Shut down libflashprog.
  * @return 0 on success
  */
-int flashrom_shutdown(void)
+int flashprog_shutdown(void)
 {
 	return 0; /* TODO: nothing to do? */
 }
 
-/* TODO: flashrom_set_loglevel()? do we need it?
+/* TODO: flashprog_set_loglevel()? do we need it?
          For now, let the user decide in their callback. */
 
 /**
  * @brief Set the log callback function.
  *
- * Set a callback function which will be invoked whenever libflashrom wants
+ * Set a callback function which will be invoked whenever libflashprog wants
  * to output messages. This allows frontends to do whatever they see fit with
  * such messages, e.g. write them to syslog, or to file, or print them in a
  * GUI window, etc.
  *
  * @param log_callback Pointer to the new log callback function.
  */
-void flashrom_set_log_callback(flashrom_log_callback *const log_callback)
+void flashprog_set_log_callback(flashprog_log_callback *const log_callback)
 {
 	global_log_callback = log_callback;
 }
 /** @private */
-int print(const enum flashrom_log_level level, const char *const fmt, ...)
+int print(const enum flashprog_log_level level, const char *const fmt, ...)
 {
 	if (global_log_callback) {
 		int ret;
@@ -95,23 +95,23 @@
 	return 0;
 }
 
-/** @} */ /* end flashrom-general */
+/** @} */ /* end flashprog-general */
 
 
 
 /**
- * @defgroup flashrom-query Querying
+ * @defgroup flashprog-query Querying
  * @{
  */
 
 /* TBD */
 
-/** @} */ /* end flashrom-query */
+/** @} */ /* end flashprog-query */
 
 
 
 /**
- * @defgroup flashrom-prog Programmers
+ * @defgroup flashprog-prog Programmers
  * @{
  */
 
@@ -120,15 +120,15 @@
  *
  * Currently, only one programmer may be initialized at a time.
  *
- * @param[out] flashprog Points to a pointer of type struct flashrom_programmer
+ * @param[out] flashprog Points to a pointer of type struct flashprog_programmer
  *                       that will be set if programmer initialization succeeds.
  *                       *flashprog has to be shutdown by the caller with @ref
- *                       flashrom_programmer_shutdown.
+ *                       flashprog_programmer_shutdown.
  * @param[in] prog_name Name of the programmer to initialize.
  * @param[in] prog_param Pointer to programmer specific parameters.
  * @return 0 on success
  */
-int flashrom_programmer_init(struct flashrom_programmer **const flashprog,
+int flashprog_programmer_init(struct flashprog_programmer **const flashprog,
 			     const char *const prog_name, const char *const prog_param)
 {
 	unsigned prog;
@@ -152,19 +152,19 @@
  * @param flashprog The programmer to shut down.
  * @return 0 on success
  */
-int flashrom_programmer_shutdown(struct flashrom_programmer *const flashprog)
+int flashprog_programmer_shutdown(struct flashprog_programmer *const flashprog)
 {
 	return programmer_shutdown();
 }
 
-/* TODO: flashrom_programmer_capabilities()? */
+/* TODO: flashprog_programmer_capabilities()? */
 
-/** @} */ /* end flashrom-prog */
+/** @} */ /* end flashprog-prog */
 
 
 
 /**
- * @defgroup flashrom-flash Flash chips
+ * @defgroup flashprog-flash Flash chips
  * @{
  */
 
@@ -172,12 +172,12 @@
  * @brief Probe for a flash chip.
  *
  * Probes for a flash chip and returns a flash context, that can be used
- * later with flash chip and @ref flashrom-ops "image operations", if
+ * later with flash chip and @ref flashprog-ops "image operations", if
  * exactly one matching chip is found.
  *
- * @param[out] flashctx Points to a pointer of type struct flashrom_flashctx
+ * @param[out] flashctx Points to a pointer of type struct flashprog_flashctx
  *                      that will be set if exactly one chip is found. *flashctx
- *                      has to be freed by the caller with @ref flashrom_flash_release.
+ *                      has to be freed by the caller with @ref flashprog_flash_release.
  * @param[in] flashprog The flash programmer used to access the chip.
  * @param[in] chip_name Name of a chip to probe for, or NULL to probe for
  *                      all known chips.
@@ -186,14 +186,14 @@
  *         2 if no chip was found,
  *         or 1 on any other error.
  */
-int flashrom_flash_probe(struct flashrom_flashctx **const flashctx,
-			 const struct flashrom_programmer *const flashprog,
+int flashprog_flash_probe(struct flashprog_flashctx **const flashctx,
+			 const struct flashprog_programmer *const flashprog,
 			 const char *const chip_name)
 {
 	int i, ret = 2;
-	struct flashrom_flashctx second_flashctx = { 0, };
+	struct flashprog_flashctx second_flashctx = { 0, };
 
-	chip_to_probe = chip_name; /* chip_to_probe is global in flashrom.c */
+	chip_to_probe = chip_name; /* chip_to_probe is global in flashprog.c */
 
 	*flashctx = malloc(sizeof(**flashctx));
 	if (!*flashctx)
@@ -206,7 +206,7 @@
 			ret = 0;
 			/* We found one chip, now check that there is no second match. */
 			if (probe_flash(&registered_masters[i], flash_idx + 1, &second_flashctx, 0) != -1) {
-				flashrom_layout_release(second_flashctx.default_layout);
+				flashprog_layout_release(second_flashctx.default_layout);
 				free(second_flashctx.chip);
 				ret = 3;
 				break;
@@ -214,7 +214,7 @@
 		}
 	}
 	if (ret) {
-		flashrom_flash_release(*flashctx);
+		flashprog_flash_release(*flashctx);
 		*flashctx = NULL;
 	}
 	return ret;
@@ -226,7 +226,7 @@
  * @param flashctx The queried flash context.
  * @return Size of flash chip in bytes.
  */
-size_t flashrom_flash_getsize(const struct flashrom_flashctx *const flashctx)
+size_t flashprog_flash_getsize(const struct flashprog_flashctx *const flashctx)
 {
 	return flashctx->chip->total_size * 1024;
 }
@@ -236,12 +236,12 @@
  *
  * @param flashctx Flash context to free.
  */
-void flashrom_flash_release(struct flashrom_flashctx *const flashctx)
+void flashprog_flash_release(struct flashprog_flashctx *const flashctx)
 {
 	if (!flashctx)
 		return;
 
-	flashrom_layout_release(flashctx->default_layout);
+	flashprog_layout_release(flashctx->default_layout);
 	free(flashctx->chip);
 	free(flashctx);
 }
@@ -253,14 +253,14 @@
  * @param flag	   Flag that is to be set / cleared.
  * @param value	   Value to set.
  */
-void flashrom_flag_set(struct flashrom_flashctx *const flashctx,
-		       const enum flashrom_flag flag, const bool value)
+void flashprog_flag_set(struct flashprog_flashctx *const flashctx,
+		       const enum flashprog_flag flag, const bool value)
 {
 	switch (flag) {
-		case FLASHROM_FLAG_FORCE:		flashctx->flags.force = value; break;
-		case FLASHROM_FLAG_FORCE_BOARDMISMATCH:	flashctx->flags.force_boardmismatch = value; break;
-		case FLASHROM_FLAG_VERIFY_AFTER_WRITE:	flashctx->flags.verify_after_write = value; break;
-		case FLASHROM_FLAG_VERIFY_WHOLE_CHIP:	flashctx->flags.verify_whole_chip = value; break;
+		case FLASHPROG_FLAG_FORCE:		 flashctx->flags.force = value; break;
+		case FLASHPROG_FLAG_FORCE_BOARDMISMATCH: flashctx->flags.force_boardmismatch = value; break;
+		case FLASHPROG_FLAG_VERIFY_AFTER_WRITE:	 flashctx->flags.verify_after_write = value; break;
+		case FLASHPROG_FLAG_VERIFY_WHOLE_CHIP:	 flashctx->flags.verify_whole_chip = value; break;
 	}
 }
 
@@ -271,23 +271,23 @@
  * @param flag	   Flag to be read.
  * @return Current value of the flag.
  */
-bool flashrom_flag_get(const struct flashrom_flashctx *const flashctx, const enum flashrom_flag flag)
+bool flashprog_flag_get(const struct flashprog_flashctx *const flashctx, const enum flashprog_flag flag)
 {
 	switch (flag) {
-		case FLASHROM_FLAG_FORCE:		return flashctx->flags.force;
-		case FLASHROM_FLAG_FORCE_BOARDMISMATCH:	return flashctx->flags.force_boardmismatch;
-		case FLASHROM_FLAG_VERIFY_AFTER_WRITE:	return flashctx->flags.verify_after_write;
-		case FLASHROM_FLAG_VERIFY_WHOLE_CHIP:	return flashctx->flags.verify_whole_chip;
-		default:				return false;
+		case FLASHPROG_FLAG_FORCE:		 return flashctx->flags.force;
+		case FLASHPROG_FLAG_FORCE_BOARDMISMATCH: return flashctx->flags.force_boardmismatch;
+		case FLASHPROG_FLAG_VERIFY_AFTER_WRITE:	 return flashctx->flags.verify_after_write;
+		case FLASHPROG_FLAG_VERIFY_WHOLE_CHIP:	 return flashctx->flags.verify_whole_chip;
+		default:				 return false;
 	}
 }
 
-/** @} */ /* end flashrom-flash */
+/** @} */ /* end flashprog-flash */
 
 
 
 /**
- * @defgroup flashrom-layout Layout handling
+ * @defgroup flashprog-layout Layout handling
  * @{
  */
 
@@ -297,7 +297,7 @@
  * Optionally verify that the layout matches the one in the given
  * descriptor dump.
  *
- * @param[out] layout Points to a struct flashrom_layout pointer that
+ * @param[out] layout Points to a struct flashprog_layout pointer that
  *                    gets set if the descriptor is read and parsed
  *                    successfully.
  * @param[in] flashctx Flash context to read the descriptor from flash.
@@ -312,13 +312,13 @@
  *         2 if the descriptor on flash couldn't be read,
  *         1 on any other error.
  */
-int flashrom_layout_read_from_ifd(struct flashrom_layout **const layout, struct flashctx *const flashctx,
+int flashprog_layout_read_from_ifd(struct flashprog_layout **const layout, struct flashctx *const flashctx,
 				  const void *const dump, const size_t len)
 {
-#ifndef __FLASHROM_LITTLE_ENDIAN__
+#ifndef __FLASHPROG_LITTLE_ENDIAN__
 	return 6;
 #else
-	struct flashrom_layout *dump_layout = NULL, *chip_layout = NULL;
+	struct flashprog_layout *dump_layout = NULL, *chip_layout = NULL;
 	int ret = 1;
 
 	void *const desc = malloc(0x1000);
@@ -353,7 +353,7 @@
 			chip_entry = layout_next(chip_layout, chip_entry);
 			dump_entry = layout_next(dump_layout, dump_entry);
 		}
-		flashrom_layout_release(dump_layout);
+		flashprog_layout_release(dump_layout);
 		if (chip_entry || dump_entry) {
 			msg_cerr("Descriptors don't match!\n");
 			ret = 5;
@@ -361,35 +361,35 @@
 		}
 	}
 
-	*layout = (struct flashrom_layout *)chip_layout;
+	*layout = (struct flashprog_layout *)chip_layout;
 	ret = 0;
 
 _finalize_ret:
 	finalize_flash_access(flashctx);
 _free_ret:
 	if (ret)
-		flashrom_layout_release(chip_layout);
+		flashprog_layout_release(chip_layout);
 	free(desc);
 	return ret;
 #endif
 }
 
-#ifdef __FLASHROM_LITTLE_ENDIAN__
-static int flashrom_layout_parse_fmap(struct flashrom_layout **layout,
+#ifdef __FLASHPROG_LITTLE_ENDIAN__
+static int flashprog_layout_parse_fmap(struct flashprog_layout **layout,
 		struct flashctx *const flashctx, const struct fmap *const fmap)
 {
 	int i;
 	char name[FMAP_STRLEN + 1];
 	const struct fmap_area *area;
-	struct flashrom_layout *l;
+	struct flashprog_layout *l;
 
-	if (!fmap || flashrom_layout_new(&l))
+	if (!fmap || flashprog_layout_new(&l))
 		return 1;
 
 	for (i = 0, area = fmap->areas; i < fmap->nareas; i++, area++) {
 		snprintf(name, sizeof(name), "%s", area->name);
-		if (flashrom_layout_add_region(l, area->offset, area->offset + area->size - 1, name)) {
-			flashrom_layout_release(l);
+		if (flashprog_layout_add_region(l, area->offset, area->offset + area->size - 1, name)) {
+			flashprog_layout_release(l);
 			return 1;
 		}
 	}
@@ -397,12 +397,12 @@
 	*layout = l;
 	return 0;
 }
-#endif /* __FLASHROM_LITTLE_ENDIAN__ */
+#endif /* __FLASHPROG_LITTLE_ENDIAN__ */
 
 /**
  * @brief Read a layout by searching the flash chip for fmap.
  *
- * @param[out] layout Points to a struct flashrom_layout pointer that
+ * @param[out] layout Points to a struct flashprog_layout pointer that
  *                    gets set if the fmap is read and parsed successfully.
  * @param[in] flashctx Flash context
  * @param[in] offset Offset to begin searching for fmap.
@@ -413,10 +413,10 @@
  *         2 if the fmap couldn't be read,
  *         1 on any other error.
  */
-int flashrom_layout_read_fmap_from_rom(struct flashrom_layout **const layout,
+int flashprog_layout_read_fmap_from_rom(struct flashprog_layout **const layout,
 		struct flashctx *const flashctx, size_t offset, size_t len)
 {
-#ifndef __FLASHROM_LITTLE_ENDIAN__
+#ifndef __FLASHPROG_LITTLE_ENDIAN__
 	return 3;
 #else
 	struct fmap *fmap = NULL;
@@ -429,7 +429,7 @@
 	}
 
 	msg_gdbg("Adding fmap layout to global layout.\n");
-	if (flashrom_layout_parse_fmap(layout, flashctx, fmap)) {
+	if (flashprog_layout_parse_fmap(layout, flashctx, fmap)) {
 		msg_gerr("Failed to add fmap regions to layout.\n");
 		ret = 1;
 	}
@@ -442,7 +442,7 @@
 /**
  * @brief Read a layout by searching buffer for fmap.
  *
- * @param[out] layout Points to a struct flashrom_layout pointer that
+ * @param[out] layout Points to a struct flashprog_layout pointer that
  *                    gets set if the fmap is read and parsed successfully.
  * @param[in] flashctx Flash context
  * @param[in] buffer Buffer to search in
@@ -453,10 +453,10 @@
  *         2 if the fmap couldn't be read,
  *         1 on any other error.
  */
-int flashrom_layout_read_fmap_from_buffer(struct flashrom_layout **const layout,
+int flashprog_layout_read_fmap_from_buffer(struct flashprog_layout **const layout,
 		struct flashctx *const flashctx, const uint8_t *const buf, size_t size)
 {
-#ifndef __FLASHROM_LITTLE_ENDIAN__
+#ifndef __FLASHPROG_LITTLE_ENDIAN__
 	return 3;
 #else
 	struct fmap *fmap = NULL;
@@ -472,7 +472,7 @@
 	}
 
 	msg_gdbg("Adding fmap layout to global layout.\n");
-	if (flashrom_layout_parse_fmap(layout, flashctx, fmap)) {
+	if (flashprog_layout_parse_fmap(layout, flashctx, fmap)) {
 		msg_gerr("Failed to add fmap regions to layout.\n");
 		goto _free_ret;
 	}
@@ -494,40 +494,40 @@
  * @param flashctx Flash context whose layout will be set.
  * @param layout   Layout to bet set.
  */
-void flashrom_layout_set(struct flashrom_flashctx *const flashctx, const struct flashrom_layout *const layout)
+void flashprog_layout_set(struct flashprog_flashctx *const flashctx, const struct flashprog_layout *const layout)
 {
 	flashctx->layout = layout;
 }
 
-/** @} */ /* end flashrom-layout */
+/** @} */ /* end flashprog-layout */
 
 
 /**
- * @defgroup flashrom-wp
+ * @defgroup flashprog-wp
  * @{
  */
 
 /**
  * @brief Create a new empty WP configuration.
  *
- * @param[out] cfg Points to a pointer of type struct flashrom_wp_cfg that will
+ * @param[out] cfg Points to a pointer of type struct flashprog_wp_cfg that will
  *                 be set if creation succeeds. *cfg has to be freed by the
- *                 caller with @ref flashrom_wp_cfg_release.
+ *                 caller with @ref flashprog_wp_cfg_release.
  * @return  0 on success
  *         >0 on failure
  */
-enum flashrom_wp_result flashrom_wp_cfg_new(struct flashrom_wp_cfg **cfg)
+enum flashprog_wp_result flashprog_wp_cfg_new(struct flashprog_wp_cfg **cfg)
 {
 	*cfg = calloc(1, sizeof(**cfg));
-	return *cfg ? 0 : FLASHROM_WP_ERR_OTHER;
+	return *cfg ? 0 : FLASHPROG_WP_ERR_OTHER;
 }
 
 /**
  * @brief Free a WP configuration.
  *
- * @param[out] cfg Pointer to the flashrom_wp_cfg to free.
+ * @param[out] cfg Pointer to the flashprog_wp_cfg to free.
  */
-void flashrom_wp_cfg_release(struct flashrom_wp_cfg *cfg)
+void flashprog_wp_cfg_release(struct flashprog_wp_cfg *cfg)
 {
 	free(cfg);
 }
@@ -536,9 +536,9 @@
  * @brief Set the protection mode for a WP configuration.
  *
  * @param[in]  mode The protection mode to set.
- * @param[out] cfg  Pointer to the flashrom_wp_cfg structure to modify.
+ * @param[out] cfg  Pointer to the flashprog_wp_cfg structure to modify.
  */
-void flashrom_wp_set_mode(struct flashrom_wp_cfg *cfg, enum flashrom_wp_mode mode)
+void flashprog_wp_set_mode(struct flashprog_wp_cfg *cfg, enum flashprog_wp_mode mode)
 {
 	cfg->mode = mode;
 }
@@ -549,7 +549,7 @@
  * @param[in] cfg The WP configuration to get the protection mode from.
  * @return        The configuration's protection mode.
  */
-enum flashrom_wp_mode flashrom_wp_get_mode(const struct flashrom_wp_cfg *cfg)
+enum flashprog_wp_mode flashprog_wp_get_mode(const struct flashprog_wp_cfg *cfg)
 {
 	return cfg->mode;
 }
@@ -557,11 +557,11 @@
 /**
  * @brief Set the protection range for a WP configuration.
  *
- * @param[out] cfg   Pointer to the flashrom_wp_cfg structure to modify.
+ * @param[out] cfg   Pointer to the flashprog_wp_cfg structure to modify.
  * @param[in]  start The range's start address.
  * @param[in]  len   The range's length.
  */
-void flashrom_wp_set_range(struct flashrom_wp_cfg *cfg, size_t start, size_t len)
+void flashprog_wp_set_range(struct flashprog_wp_cfg *cfg, size_t start, size_t len)
 {
 	cfg->range.start = start;
 	cfg->range.len = len;
@@ -574,7 +574,7 @@
  * @param[out] len   Points to a size_t to write the range length to.
  * @param[in]  cfg   The WP configuration to get the range from.
  */
-void flashrom_wp_get_range(size_t *start, size_t *len, const struct flashrom_wp_cfg *cfg)
+void flashprog_wp_get_range(size_t *start, size_t *len, const struct flashprog_wp_cfg *cfg)
 {
 	*start = cfg->range.start;
 	*len = cfg->range.len;
@@ -588,7 +588,7 @@
  * @return  0 on success
  *         >0 on failure
  */
-enum flashrom_wp_result flashrom_wp_write_cfg(struct flashctx *flash, const struct flashrom_wp_cfg *cfg)
+enum flashprog_wp_result flashprog_wp_write_cfg(struct flashctx *flash, const struct flashprog_wp_cfg *cfg)
 {
 	/*
 	 * TODO: Call custom implementation if the programmer is opaque, as
@@ -598,19 +598,19 @@
 	if (flash->mst->buses_supported & BUS_SPI)
 		return wp_write_cfg(flash, cfg);
 
-	return FLASHROM_WP_ERR_OTHER;
+	return FLASHPROG_WP_ERR_OTHER;
 }
 
 /**
  * @brief Read the current WP configuration from a flash chip.
  *
- * @param[out] cfg   Pointer to a struct flashrom_wp_cfg to store the chip's
+ * @param[out] cfg   Pointer to a struct flashprog_wp_cfg to store the chip's
  *                   configuration in.
  * @param[in]  flash The flash context used to access the chip.
  * @return  0 on success
  *         >0 on failure
  */
-enum flashrom_wp_result flashrom_wp_read_cfg(struct flashrom_wp_cfg *cfg, struct flashctx *flash)
+enum flashprog_wp_result flashprog_wp_read_cfg(struct flashprog_wp_cfg *cfg, struct flashctx *flash)
 {
 	/*
 	 * TODO: Call custom implementation if the programmer is opaque, as
@@ -620,22 +620,22 @@
 	if (flash->mst->buses_supported & BUS_SPI)
 		return wp_read_cfg(cfg, flash);
 
-	return FLASHROM_WP_ERR_OTHER;
+	return FLASHPROG_WP_ERR_OTHER;
 }
 
 /**
  * @brief Get a list of protection ranges supported by the flash chip.
  *
- * @param[out] ranges Points to a pointer of type struct flashrom_wp_ranges
+ * @param[out] ranges Points to a pointer of type struct flashprog_wp_ranges
  *                    that will be set if available ranges are found. Finding
  *                    available ranges may not always be possible, even if the
  *                    chip's protection range can be read or modified. *ranges
- *                    must be freed using @ref flashrom_wp_ranges_free.
+ *                    must be freed using @ref flashprog_wp_ranges_free.
  * @param[in] flash   The flash context used to access the chip.
  * @return  0 on success
  *         >0 on failure
  */
-enum flashrom_wp_result flashrom_wp_get_available_ranges(struct flashrom_wp_ranges **list, struct flashrom_flashctx *flash)
+enum flashprog_wp_result flashprog_wp_get_available_ranges(struct flashprog_wp_ranges **list, struct flashprog_flashctx *flash)
 {
 	/*
 	 * TODO: Call custom implementation if the programmer is opaque, as
@@ -646,7 +646,7 @@
 	if (flash->mst->buses_supported & BUS_SPI)
 		return wp_get_available_ranges(list, flash);
 
-	return FLASHROM_WP_ERR_OTHER;
+	return FLASHPROG_WP_ERR_OTHER;
 }
 
 /**
@@ -655,7 +655,7 @@
  * @param[in]  ranges The range list to get the count from.
  * @return Number of ranges in the list.
  */
-size_t flashrom_wp_ranges_get_count(const struct flashrom_wp_ranges *list)
+size_t flashprog_wp_ranges_get_count(const struct flashprog_wp_ranges *list)
 {
 	return list->count;
 }
@@ -670,10 +670,10 @@
  * @return  0 on success
  *         >0 on failure
  */
-enum flashrom_wp_result flashrom_wp_ranges_get_range(size_t *start, size_t *len, const struct flashrom_wp_ranges *list, unsigned int index)
+enum flashprog_wp_result flashprog_wp_ranges_get_range(size_t *start, size_t *len, const struct flashprog_wp_ranges *list, unsigned int index)
 {
 	if (index >= list->count)
-		return FLASHROM_WP_ERR_OTHER;
+		return FLASHPROG_WP_ERR_OTHER;
 
 	*start = list->ranges[index].start;
 	*len = list->ranges[index].len;
@@ -684,9 +684,9 @@
 /**
  * @brief Free a WP range list.
  *
- * @param[out] cfg Pointer to the flashrom_wp_ranges to free.
+ * @param[out] cfg Pointer to the flashprog_wp_ranges to free.
  */
-void flashrom_wp_ranges_release(struct flashrom_wp_ranges *list)
+void flashprog_wp_ranges_release(struct flashprog_wp_ranges *list)
 {
 	if (!list)
 		return;
@@ -696,4 +696,4 @@
 }
 
 
-/** @} */ /* end flashrom-wp */
+/** @} */ /* end flashprog-wp */
diff --git a/libflashprog.map b/libflashprog.map
new file mode 100644
index 0000000..5294d96
--- /dev/null
+++ b/libflashprog.map
@@ -0,0 +1,38 @@
+LIBFLASHPROG_1.0 {
+  global:
+    flashprog_flag_get;
+    flashprog_flag_set;
+    flashprog_flash_erase;
+    flashprog_flash_getsize;
+    flashprog_flash_probe;
+    flashprog_flash_release;
+    flashprog_image_read;
+    flashprog_image_verify;
+    flashprog_image_write;
+    flashprog_init;
+    flashprog_layout_add_region;
+    flashprog_layout_include_region;
+    flashprog_layout_new;
+    flashprog_layout_read_fmap_from_buffer;
+    flashprog_layout_read_fmap_from_rom;
+    flashprog_layout_read_from_ifd;
+    flashprog_layout_release;
+    flashprog_layout_set;
+    flashprog_programmer_init;
+    flashprog_programmer_shutdown;
+    flashprog_set_log_callback;
+    flashprog_shutdown;
+    flashprog_wp_cfg_new;
+    flashprog_wp_cfg_release;
+    flashprog_wp_get_available_ranges;
+    flashprog_wp_get_mode;
+    flashprog_wp_get_range;
+    flashprog_wp_ranges_get_count;
+    flashprog_wp_ranges_get_range;
+    flashprog_wp_ranges_release;
+    flashprog_wp_read_cfg;
+    flashprog_wp_set_mode;
+    flashprog_wp_set_range;
+    flashprog_wp_write_cfg;
+  local: *;
+};
diff --git a/libflashrom.map b/libflashrom.map
deleted file mode 100644
index ba4b39c..0000000
--- a/libflashrom.map
+++ /dev/null
@@ -1,38 +0,0 @@
-LIBFLASHROM_1.0 {
-  global:
-    flashrom_flag_get;
-    flashrom_flag_set;
-    flashrom_flash_erase;
-    flashrom_flash_getsize;
-    flashrom_flash_probe;
-    flashrom_flash_release;
-    flashrom_image_read;
-    flashrom_image_verify;
-    flashrom_image_write;
-    flashrom_init;
-    flashrom_layout_add_region;
-    flashrom_layout_include_region;
-    flashrom_layout_new;
-    flashrom_layout_read_fmap_from_buffer;
-    flashrom_layout_read_fmap_from_rom;
-    flashrom_layout_read_from_ifd;
-    flashrom_layout_release;
-    flashrom_layout_set;
-    flashrom_programmer_init;
-    flashrom_programmer_shutdown;
-    flashrom_set_log_callback;
-    flashrom_shutdown;
-    flashrom_wp_cfg_new;
-    flashrom_wp_cfg_release;
-    flashrom_wp_get_available_ranges;
-    flashrom_wp_get_mode;
-    flashrom_wp_get_range;
-    flashrom_wp_ranges_get_count;
-    flashrom_wp_ranges_get_range;
-    flashrom_wp_ranges_release;
-    flashrom_wp_read_cfg;
-    flashrom_wp_set_mode;
-    flashrom_wp_set_range;
-    flashrom_wp_write_cfg;
-  local: *;
-};
diff --git a/linux_gpio_spi.c b/linux_gpio_spi.c
index 0103d19..1e95c16 100644
--- a/linux_gpio_spi.c
+++ b/linux_gpio_spi.c
@@ -23,7 +23,7 @@
 #include "spi.h"
 #include "flash.h"
 
-#define CONSUMER "flashrom"
+#define CONSUMER "flashprog"
 
 struct linux_gpio_spi {
 	struct gpiod_chip *chip;
diff --git a/linux_mtd.c b/linux_mtd.c
index f7cd82b..0960025 100644
--- a/linux_mtd.c
+++ b/linux_mtd.c
@@ -270,7 +270,7 @@
 
 	if (data->no_erase) {
 		msg_perr("%s: device does not support erasing.\n"
-			 "Please file a bug report at flashrom-stable@flashrom.org\n",
+			 "Please file a bug report at flashprog@flashprog.org\n",
 			 __func__);
 		return 1;
 	}
@@ -387,7 +387,7 @@
 
 		dev_num = strtol(param, &endptr, 0);
 		if ((*endptr != '\0') || (dev_num < 0)) {
-			msg_perr("Invalid device number %s. Use flashrom -p "
+			msg_perr("Invalid device number %s. Use flashprog -p "
 				"linux_mtd:dev=N where N is a valid MTD\n"
 				"device number.\n", param);
 			goto linux_mtd_init_exit;
diff --git a/linux_spi.c b/linux_spi.c
index 4be6eaa..e8353d5 100644
--- a/linux_spi.c
+++ b/linux_spi.c
@@ -141,7 +141,7 @@
 
 	dev = extract_programmer_param("dev");
 	if (!dev || !strlen(dev)) {
-		msg_perr("No SPI device given. Use flashrom -p "
+		msg_perr("No SPI device given. Use flashprog -p "
 			 "linux_spi:dev=/dev/spidevX.Y\n");
 		free(dev);
 		return 1;
diff --git a/meson.build b/meson.build
index 1be1d60..c14ab4b 100644
--- a/meson.build
+++ b/meson.build
@@ -1,4 +1,4 @@
-project('flashromutils', 'c',
+project('flashprogutils', 'c',
   version : run_command('util/getversion.sh', '--version', check : true).stdout().strip(),
   license : 'GPL-2.0',
   meson_version : '>=0.53.0',
@@ -37,7 +37,7 @@
 add_project_arguments('-D__XSI_VISIBLE', language : 'c') # required for gettimeofday() on FreeBSD
 add_project_arguments('-D_NETBSD_SOURCE', language : 'c') # required for indirect include of strings.h on NetBSD
 add_project_arguments('-D_DARWIN_C_SOURCE', language : 'c') # required for indirect include of strings.h on MacOS
-add_project_arguments('-DFLASHROM_VERSION="' + meson.project_version() + '"', language : 'c')
+add_project_arguments('-DFLASHPROG_VERSION="' + meson.project_version() + '"', language : 'c')
 
 # get defaults from configure
 config_print_wiki = get_option('classic_cli_print_wiki')
@@ -53,14 +53,14 @@
   'edi.c',
   'en29lv640b.c',
   'flashchips.c',
-  'flashrom.c',
+  'flashprog.c',
   'fmap.c',
   'helpers.c',
   'helpers_fileio.c',
   'ich_descriptors.c',
   'jedec.c',
   'layout.c',
-  'libflashrom.c',
+  'libflashprog.c',
   'opaque.c',
   'parallel.c',
   'print.c',
@@ -522,20 +522,20 @@
 cargs += '-DCONFIG_DEFAULT_PROGRAMMER_ARGS="' + config_default_programmer_args + '"'
 
 install_headers([
-    'include/libflashrom.h',
+    'include/libflashprog.h',
   ],
 )
 
 include_dir = include_directories('include')
 
-mapfile = 'libflashrom.map'
+mapfile = 'libflashprog.map'
 if host_machine.system() == 'darwin'
   vflag = ''
 else
   vflag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), mapfile)
 endif
-libflashrom = both_libraries(
-  'flashrom',
+libflashprog = both_libraries(
+  'flashprog',
   sources : [
     srcs,
   ],
@@ -564,19 +564,19 @@
 
 pkgg = import('pkgconfig')
 pkgg.generate(
-  libraries : libflashrom,
+  libraries : libflashprog,
   version : version,
-  name : 'flashrom',
-  filebase : 'flashrom',
-  description : 'library to interact with flashrom',
+  name : 'flashprog',
+  filebase : 'flashprog',
+  description : 'library to interact with flashprog',
 )
 
 config_manfile = configuration_data()
 config_manfile.set('VERSION', version)
 config_manfile.set('MAN_DATE', run_command('util/getversion.sh', '--man-date', check : true).stdout().strip())
 configure_file(
-  input : 'flashrom.8.tmpl',
-  output : 'flashrom.8',
+  input : 'flashprog.8.tmpl',
+  output : 'flashprog.8',
   configuration : config_manfile,
   install: true,
   install_dir: join_paths(get_option('mandir'), 'man8'),
@@ -584,7 +584,7 @@
 
 if get_option('classic_cli').auto() or get_option('classic_cli').enabled()
   executable(
-    'flashrom',
+    'flashprog',
     files(
       'cli_classic.c',
       'cli_common.c',
@@ -594,7 +594,7 @@
     include_directories : include_dir,
     install : true,
     install_dir : get_option('sbindir'),
-    link_with : libflashrom.get_static_lib(), # flashrom needs internal symbols of libflashrom
+    link_with : libflashprog.get_static_lib(), # flashprog needs internal symbols of libflashprog
   )
 endif
 
diff --git a/meson_options.txt b/meson_options.txt
index 616a9f4..2143705 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,4 +1,4 @@
-option('classic_cli', type : 'feature', value : 'enabled', description : 'classic flashrom cli binary')
+option('classic_cli', type : 'feature', value : 'enabled', description : 'classic flashprog cli binary')
 option('classic_cli_print_wiki', type : 'feature', value : 'disabled',  description : 'Print Wiki')
 option('default_programmer_name', type : 'string', description : 'default programmer')
 option('default_programmer_args', type : 'string', description : 'default programmer arguments')
diff --git a/mstarddc_spi.c b/mstarddc_spi.c
index 4de3c04..911c450 100644
--- a/mstarddc_spi.c
+++ b/mstarddc_spi.c
@@ -80,14 +80,14 @@
 		}
 		if (i2c_address == NULL || strlen(i2c_address) == 0) {
 			msg_perr("Error: no address specified.\n"
-				 "Use flashrom -p mstarddc_spi:dev=/dev/device:address.\n");
+				 "Use flashprog -p mstarddc_spi:dev=/dev/device:address.\n");
 			ret = -1;
 			goto out;
 		}
 		mstarddc_addr = strtol(i2c_address, NULL, 16); // FIXME: error handling
 	} else {
 		msg_perr("Error: no device specified.\n"
-			 "Use flashrom -p mstarddc_spi:dev=/dev/device:address.\n");
+			 "Use flashprog -p mstarddc_spi:dev=/dev/device:address.\n");
 		ret = -1;
 		goto out;
 	}
diff --git a/ni845x_spi.c b/ni845x_spi.c
index 699c087..0e71e21 100644
--- a/ni845x_spi.c
+++ b/ni845x_spi.c
@@ -163,7 +163,7 @@
 			// malformed resource string detected
 			msg_pwarn("Warning: Unable to parse the %s NI-845x resource string.\n",
 				  resource_name);
-			msg_pwarn("Please report a bug at flashrom-stable@flashrom.org\n");
+			msg_pwarn("Please report a bug at flashprog@flashprog.org\n");
 			continue;
 		}
 
diff --git a/ogp_spi.c b/ogp_spi.c
index aa4f422..5a1b969 100644
--- a/ogp_spi.c
+++ b/ogp_spi.c
@@ -101,7 +101,7 @@
 	type = extract_programmer_param("rom");
 
 	if (!type) {
-		msg_perr("Please use flashrom -p ogp_spi:rom=... to specify "
+		msg_perr("Please use flashprog -p ogp_spi:rom=... to specify "
 			 "which flashchip you want to access.\n");
 		return 1;
 	} else if (!strcasecmp(type, "bprom") || !strcasecmp(type, "bios")) {
diff --git a/opaque.c b/opaque.c
index d83e3bc..f12c7d9 100644
--- a/opaque.c
+++ b/opaque.c
@@ -59,9 +59,9 @@
 
 	if (!mst->probe || !mst->read || !mst->write || !mst->erase) {
 		msg_perr("%s called with incomplete master definition.\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
-		return ERROR_FLASHROM_BUG;
+		return ERROR_FLASHPROG_BUG;
 	}
 	rmst.buses_supported = BUS_PROG;
 	rmst.opaque = *mst;
diff --git a/parallel.c b/parallel.c
index 84692fd..3fb25b4 100644
--- a/parallel.c
+++ b/parallel.c
@@ -80,9 +80,9 @@
 	    !mst->chip_writen || !mst->chip_readb || !mst->chip_readw ||
 	    !mst->chip_readl || !mst->chip_readn) {
 		msg_perr("%s called with incomplete master definition.\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
-		return ERROR_FLASHROM_BUG;
+		return ERROR_FLASHPROG_BUG;
 	}
 
 	rmst.buses_supported = buses;
diff --git a/pcidev.c b/pcidev.c
index 4425c80..e2dceb4 100644
--- a/pcidev.c
+++ b/pcidev.c
@@ -121,13 +121,13 @@
 		break;
 	case TYPE_IOBAR:
 		msg_pdbg("I/O\n");
-#if __FLASHROM_HAVE_OUTB__
+#if __FLASHPROG_HAVE_OUTB__
 		if (!(supported_cycles & PCI_COMMAND_IO)) {
 			msg_perr("I/O BAR access requested, but device has I/O space accesses disabled.\n");
 			/* TODO: Abort here? */
 		}
 #else
-		msg_perr("I/O BAR access requested, but flashrom does not support I/O BAR access on this "
+		msg_perr("I/O BAR access requested, but flashprog does not support I/O BAR access on this "
 			 "platform (yet).\n");
 #endif
 		addr &= PCI_BASE_ADDRESS_IO_MASK;
@@ -142,7 +142,7 @@
 		addr &= PCI_ROM_ADDRESS_MASK;
 		break;
 	case TYPE_UNKNOWN:
-		msg_perr("BAR type unknown, please report a bug at flashrom-stable@flashrom.org\n");
+		msg_perr("BAR type unknown, please report a bug at flashprog@flashprog.org\n");
 	}
 
 	return (uintptr_t)addr;
@@ -213,7 +213,7 @@
 {
 	if (pacc == NULL) {
 		msg_perr("%s: Tried to cleanup an invalid PCI context!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
 		return 1;
 	}
@@ -226,7 +226,7 @@
 {
 	if (pacc != NULL) {
 		msg_perr("%s: Tried to allocate a new PCI context, but there is still an old one!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n", __func__);
+			 "Please report a bug at flashprog@flashprog.org\n", __func__);
 		return 1;
 	}
 	pacc = pci_alloc();     /* Get the pci_access structure */
@@ -282,9 +282,9 @@
 				 devs[i].device_name, dev->vendor_id, dev->device_id, dev->bus, dev->dev,
 				 dev->func);
 			if (devs[i].status == NT)
-				msg_pinfo("===\nThis PCI device is UNTESTED. Please report the 'flashrom -p "
+				msg_pinfo("===\nThis PCI device is UNTESTED. Please report the 'flashprog -p "
 					  "xxxx' output\n"
-					  "to flashrom-stable@flashrom.org if it works for you. Please add "
+					  "to flashprog@flashprog.org if it works for you. Please add "
 					  "the name of your\n"
 					  "PCI device to the subject. Thank you for your help!\n===\n");
 
@@ -303,7 +303,7 @@
 		msg_perr("Error: No supported PCI device found.\n");
 		return NULL;
 	} else if (found > 1) {
-		msg_perr("Error: Multiple supported PCI devices found. Use 'flashrom -p xxxx:pci=bb:dd.f'\n"
+		msg_perr("Error: Multiple supported PCI devices found. Use 'flashprog -p xxxx:pci=bb:dd.f'\n"
 			 "to explicitly select the card with the given BDF (PCI bus, device, function).\n");
 		return NULL;
 	}
@@ -333,7 +333,7 @@
 	struct undo_pci_write_data *data = p;
 	if (pacc == NULL || data->dev == NULL) {
 		msg_perr("%s: Tried to undo PCI writes without a valid PCI %s!\n"
-			"Please report a bug at flashrom-stable@flashrom.org\n",
+			"Please report a bug at flashprog@flashprog.org\n",
 			__func__, data->dev == NULL ? "device" : "context");
 		return 1;
 	}
diff --git a/platform/meson.build b/platform/meson.build
index 42e85ee..fcd32f8 100644
--- a/platform/meson.build
+++ b/platform/meson.build
@@ -4,10 +4,10 @@
 )
 
 if host_machine.endian() == 'little'
-  add_project_arguments('-D__FLASHROM_LITTLE_ENDIAN__=1', language : 'c')
+  add_project_arguments('-D__FLASHPROG_LITTLE_ENDIAN__=1', language : 'c')
 endif
 if host_machine.endian() == 'big'
-  add_project_arguments('-D__FLASHROM_BIG_ENDIAN__=1', language : 'c')
+  add_project_arguments('-D__FLASHPROG_BIG_ENDIAN__=1', language : 'c')
 endif
 
 # OpenBSD requires libi386 or libamd64 for I/O port handling
diff --git a/pony_spi.c b/pony_spi.c
index 9096201..2d423ef 100644
--- a/pony_spi.c
+++ b/pony_spi.c
@@ -138,7 +138,7 @@
 
 	if (!have_device) {
 		msg_perr("Error: No valid device specified.\n"
-			 "Use flashrom -p pony_spi:dev=/dev/device[,type=name]\n");
+			 "Use flashprog -p pony_spi:dev=/dev/device[,type=name]\n");
 		return 1;
 	}
 
diff --git a/print.c b/print.c
index b8d62a6..79d585b 100644
--- a/print.c
+++ b/print.c
@@ -71,7 +71,7 @@
 
 void print_buildinfo(void)
 {
-	msg_gdbg("flashrom was built with");
+	msg_gdbg("flashprog was built with");
 #ifdef __clang__
 	msg_gdbg(" LLVM Clang");
 #ifdef __clang_version__
@@ -89,9 +89,9 @@
 #else
 	msg_gdbg(" unknown compiler,");
 #endif
-#if defined (__FLASHROM_LITTLE_ENDIAN__)
+#if defined (__FLASHPROG_LITTLE_ENDIAN__)
 	msg_gdbg(" little endian");
-#elif defined (__FLASHROM_BIG_ENDIAN__)
+#elif defined (__FLASHPROG_BIG_ENDIAN__)
 	msg_gdbg(" big endian");
 #else
 #error Endianness could not be determined
@@ -101,15 +101,15 @@
 
 void print_version(void)
 {
-	msg_ginfo("flashrom-stable %s", flashrom_version);
+	msg_ginfo("flashprog %s", flashprog_version);
 	print_sysinfo();
 	msg_ginfo("\n");
 }
 
 void print_banner(void)
 {
-	msg_ginfo("flashrom is free software, get the source code at "
-		  "https://flashrom.org\n");
+	msg_ginfo("flashprog is free software, get the source code at "
+		  "https://flashprog.org\n");
 	msg_ginfo("\n");
 }
 
@@ -588,7 +588,7 @@
 			break;
 		default:
 			msg_gerr("\n%s: %s: Uninitialized programmer type!\n"
-				 "Please report a bug at flashrom-stable@flashrom.org\n",
+				 "Please report a bug at flashprog@flashprog.org\n",
 				 __func__, prog->name);
 			break;
 		}
diff --git a/print_wiki.c b/print_wiki.c
index 2c8c109..5c36588 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -27,20 +27,20 @@
 <div style=\"margin-top:0.5em; padding:0.5em 0.5em 0.5em 0.5em; \
 background-color:#eeeeee; text-align:left; border:1px solid #aabbcc;\">\
 <small>\n\
-'''Last update:''' %s (generated by flashrom %s)<br />\n\
-The tables below are generated from flashrom's source by copying the output of '''flashrom -z'''.<br /><br />\n\
+'''Last update:''' %s (generated by flashprog %s)<br />\n\
+The tables below are generated from flashprog's source by copying the output of '''flashprog -z'''.<br /><br />\n\
 A short explanation of the cells representing the support state follows:<br />\n\
 {| border=\"0\" valign=\"top\"\n\
 ! style=\"text-align:left;\" |\n\
 ! style=\"text-align:left;\" |\n\
 |-\n\
 |{{OK}}\n\
-| The feature was '''tested and should work''' in general unless there is a bug in flashrom or another component in \
+| The feature was '''tested and should work''' in general unless there is a bug in flashprog or another component in \
 the system prohibits some functionality.\n\
 |-\n\
 |{{Dep}}\n\
 | '''Configuration-dependent'''. The feature was tested and should work in general but there are common \
-configurations that drastically limit flashrom's capabilities or make it completely stop working.\n\
+configurations that drastically limit flashprog's capabilities or make it completely stop working.\n\
 |-\n\
 |{{?3}}\n\
 | The feature is '''untested''' but believed to be working.\n\
@@ -72,10 +72,10 @@
 
 static const char board_intro[] = "\
 \n== Supported mainboards ==\n\n\
-In general, it is very likely that flashrom works out of the box even if your \
+In general, it is very likely that flashprog works out of the box even if your \
 mainboard is not listed below.\n\nThis is a list of mainboards where we have \
 verified that they either do or do not need any special initialization to \
-make flashrom work (given flashrom supports the respective chipset and flash \
+make flashprog work (given flashprog supports the respective chipset and flash \
 chip), or that they do not yet work at all. If they do not work, support may \
 or may not be added later.\n\n\
 Mainboards (or individual revisions) which don't appear in the list may or may \
@@ -96,13 +96,13 @@
 
 static const char chip_intro[] = "\
 \n== Supported flash chips ==\n\n\
-The list below contains all chips that have some kind of explicit support added to flashrom and their last \
+The list below contains all chips that have some kind of explicit support added to flashprog and their last \
 known test status. Newer SPI flash chips might work even without explicit support if they implement SFDP ([\
 http://www.jedec.org/standards-documents/docs/jesd216 Serial Flash Discoverable Parameters - JESD216]). \
-Flashrom will detect this automatically and inform you about it.\n\n\
+Flashprog will detect this automatically and inform you about it.\n\n\
 The names used below are designed to be as concise as possible and hence contain only the characters \
-describing properties that are relevant to flashrom. Irrelevant characters specify attributes flashrom can not \
-use or even detect by itself (e.g. the physical package) and have no effect on flashrom's operation. They are \
+describing properties that are relevant to flashprog. Irrelevant characters specify attributes flashprog can not \
+use or even detect by itself (e.g. the physical package) and have no effect on flashprog's operation. They are \
 replaced by dots ('.') functioning as wildcards (like in Regular Expressions) or are completely omitted at the \
 end of a name.\n";
 
@@ -132,11 +132,11 @@
 static const char laptop_intro[] = "\n== Supported mobile devices (laptops, tablets etc.) ==\n\n\
 In general, flashing mobile devices is more difficult because they\n\n\
 * often use the flash chip for stuff besides the BIOS,\n\
-* often have special protection stuff which has to be handled by flashrom,\n\
-* often use flash translation circuits which need drivers in flashrom.\n\n\
+* often have special protection stuff which has to be handled by flashprog,\n\
+* often use flash translation circuits which need drivers in flashprog.\n\n\
 <div style=\"margin-top:0.5em; padding:0.5em 0.5em 0.5em 0.5em; \
 background-color:#ff6666; align:right; border:1px solid #000000;\">\n\
-'''IMPORTANT:''' At this point we recommend to '''not''' use flashrom on \
+'''IMPORTANT:''' At this point we recommend to '''not''' use flashprog on \
 untested mobile devices unless you have a means to recover from a flashing that goes \
 wrong (a working backup flash chip and/or good soldering skills).\n</div>\n";
 
@@ -396,7 +396,7 @@
 	}
 
 	printf("\n== PCI Devices ==\n\n"
-	       "Total amount of supported PCI devices flashrom can use as a programmer: '''%d'''\n\n"
+	       "Total amount of supported PCI devices flashprog can use as a programmer: '''%d'''\n\n"
 	       "{%s%s", pci_count, th_start, programmer_th);
 
 	for (i = 0; i < programmer_table_size; i++) {
@@ -408,7 +408,7 @@
 	printf("\n|}\n\n|}\n");
 
 	printf("\n== USB Devices ==\n\n"
-	       "Total amount of supported USB devices flashrom can use as a programmer: '''%d'''\n\n"
+	       "Total amount of supported USB devices flashprog can use as a programmer: '''%d'''\n\n"
 	       "{%s%s", usb_count, th_start, programmer_th);
 
 	for (i = 0; i < programmer_table_size; i++) {
@@ -442,7 +442,7 @@
 	char buf[sizeof("1986-02-28T12:37:42Z")];
 	strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&t));
 
-	printf(wiki_header, buf, flashrom_version);
+	printf(wiki_header, buf, flashprog_version);
 	print_supported_chips_wiki(2);
 #if CONFIG_INTERNAL == 1
 	print_supported_chipsets_wiki(3);
diff --git a/programmer.c b/programmer.c
index 2b960e6..e72eaf1 100644
--- a/programmer.c
+++ b/programmer.c
@@ -91,7 +91,7 @@
 	if (registered_master_count >= MASTERS_MAX) {
 		msg_perr("Tried to register more than %i master "
 			 "interfaces.\n", MASTERS_MAX);
-		return ERROR_FLASHROM_LIMIT;
+		return ERROR_FLASHPROG_LIMIT;
 	}
 	registered_masters[registered_master_count] = *mst;
 	registered_master_count++;
diff --git a/sb600spi.c b/sb600spi.c
index 8d071be..ba7bd3e 100644
--- a/sb600spi.c
+++ b/sb600spi.c
@@ -113,7 +113,7 @@
 		} else {
 			msg_pwarn("SB device found but SMBus revision 0x%02x does not match known values.\n"
 				  "Assuming SB8xx/SB9xx/Hudson-1.\n"
-				  "Please send a log to flashrom-stable@flashrom.org\n",
+				  "Please send a log to flashprog@flashprog.org\n",
 				  rev);
 			amd_gen = CHIPSET_SB89XX;
 		}
@@ -134,7 +134,7 @@
 			msg_pdbg("Yangtze detected.\n");
 		} else {
 			msg_pwarn("FCH device found but SMBus revision 0x%02x does not match known values.\n"
-				  "Please report this to flashrom-stable@flashrom.org and include this\n"
+				  "Please report this to flashprog@flashprog.org and include this\n"
 				  "log and the output of lspci -nnvx, thanks!.\n", rev);
 		}
 	} else if (dev->device_id == 0x790e) {
@@ -149,14 +149,14 @@
 			msg_pdbg("Promontory detected.\n");
 		} else {
 			msg_pwarn("FCH device found but SMBus revision 0x%02x does not match known values.\n"
-				  "Please report this to flashrom-stable@flashrom.org and include this\n"
+				  "Please report this to flashprog@flashprog.org and include this\n"
 				  "log and the output of lspci -nnvx, thanks!.\n", rev);
 		}
 
 
 	} else
 		msg_pwarn("%s: Unknown LPC device %" PRIx16 ":%" PRIx16 ".\n"
-			  "Please report this to flashrom-stable@flashrom.org and include this\n"
+			  "Please report this to flashprog@flashprog.org and include this\n"
 			  "log and the output of lspci -nnvx, thanks!\n",
 			  __func__, dev->vendor_id, dev->device_id);
 	if (amd_gen == CHIPSET_AMD_UNKNOWN) {
diff --git a/serprog.c b/serprog.c
index e047d6d..0416570 100644
--- a/serprog.c
+++ b/serprog.c
@@ -395,7 +395,7 @@
 #if !IS_WINDOWS
 	if (device && !strlen(device)) {
 		msg_perr("Error: No device specified.\n"
-			 "Use flashrom -p serprog:dev=/dev/device[:baud]\n");
+			 "Use flashprog -p serprog:dev=/dev/device[:baud]\n");
 		free(device);
 		return 1;
 	}
@@ -417,7 +417,7 @@
 		}
 		if (!port || !strlen(port)) {
 			msg_perr("Error: No port specified.\n"
-				 "Use flashrom -p serprog:ip=ipaddr:port\n");
+				 "Use flashprog -p serprog:ip=ipaddr:port\n");
 			free(device);
 			return 1;
 		}
@@ -432,7 +432,7 @@
 	}
 	if (device && !strlen(device)) {
 		msg_perr("Error: No host specified.\n"
-			 "Use flashrom -p serprog:ip=ipaddr:port\n");
+			 "Use flashprog -p serprog:ip=ipaddr:port\n");
 		free(device);
 		return 1;
 	}
@@ -442,11 +442,11 @@
 	if (!have_device) {
 #if IS_WINDOWS
 		msg_perr("Error: No device specified.\n"
-			 "Use flashrom -p serprog:dev=comN[:baud]\n");
+			 "Use flashprog -p serprog:dev=comN[:baud]\n");
 #else
 		msg_perr("Error: Neither host nor device specified.\n"
-			 "Use flashrom -p serprog:dev=/dev/device:baud or "
-			 "flashrom -p serprog:ip=ipaddr:port\n");
+			 "Use flashprog -p serprog:dev=/dev/device:baud or "
+			 "flashprog -p serprog:ip=ipaddr:port\n");
 #endif
 		return 1;
 	}
@@ -480,7 +480,7 @@
 	sp_check_avail_automatic = 1;
 
 	/* FIXME: This assumes that serprog device bustypes are always
-	 * identical with flashrom bustype enums and that they all fit
+	 * identical with flashprog bustype enums and that they all fit
 	 * in a single byte.
 	 */
 	if (sp_docommand(S_CMD_Q_BUSTYPE, 0, NULL, 1, &c)) {
@@ -712,7 +712,7 @@
 	return 1;
 }
 
-/* Move an in flashrom buffer existing write-n operation to the on-device operation buffer. */
+/* Move an in flashprog buffer existing write-n operation to the on-device operation buffer. */
 static int sp_pass_writen(void)
 {
 	unsigned char header[7];
@@ -965,7 +965,7 @@
 	/* Serprog transmits 24 bits only and assumes the underlying implementation handles any remaining bits
 	 * correctly (usually setting them to one either in software (for FWH/LPC) or relying on the fact that
 	 * the hardware observes a subset of the address bits only). Combined with the standard mapping of
-	 * flashrom this creates a 16 MB-wide window just below the 4 GB boundary where serprog can operate (as
+	 * flashprog this creates a 16 MB-wide window just below the 4 GB boundary where serprog can operate (as
 	 * needed for non-SPI chips). Below we make sure that the requested range is within this window. */
 	if ((phys_addr & 0xFF000000) == 0xFF000000) {
 		return (void*)phys_addr;
diff --git a/sfdp.c b/sfdp.c
index 6867185..e33f7fe 100644
--- a/sfdp.c
+++ b/sfdp.c
@@ -86,7 +86,7 @@
 	if (erasefn == NULL || total_size == 0 || block_size == 0 ||
 	    total_size % block_size != 0) {
 		msg_cdbg("%s: invalid input, please report to "
-			 "flashrom-stable@flashrom.org\n", __func__);
+			 "flashprog@flashprog.org\n", __func__);
 		return 1;
 	}
 
@@ -116,7 +116,7 @@
 		return 0;
 	}
 	msg_cinfo("%s: Not enough space to store another eraser (i=%d).\n"
-		  "Please report this at flashrom-stable@flashrom.org\n",
+		  "Please report this at flashprog@flashprog.org\n",
 		  __func__, i);
 	return 1;
 }
@@ -149,7 +149,7 @@
 		break;
 	case 0x2:
 		msg_cdbg("  4-Byte only addressing (not supported by "
-			 "flashrom).\n");
+			 "flashprog).\n");
 		return 1;
 	default:
 		msg_cdbg("  Required addressing mode (0x%x) not supported.\n",
@@ -236,7 +236,7 @@
 		}
 		if (tmp8 >= 31) {
 			msg_cdbg2("  Block size of erase Sector Type %d (2^%d) "
-				 "is too big for flashrom.\n", j, tmp8);
+				 "is too big for flashprog.\n", j, tmp8);
 			continue;
 		}
 		block_size = 1 << (tmp8); /* block_size = 2 ^ field */
diff --git a/spi.c b/spi.c
index bb6f976..6e61f53 100644
--- a/spi.c
+++ b/spi.c
@@ -77,7 +77,7 @@
 	unsigned int max_data = flash->mst->spi.max_data_read;
 	if (max_data == MAX_DATA_UNSPECIFIED) {
 		msg_perr("%s called, but SPI read chunk size not defined on this hardware.\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n", __func__);
+			 "Please report a bug at flashprog@flashprog.org\n", __func__);
 		return 1;
 	}
 	return spi_read_chunked(flash, buf, start, len, max_data);
@@ -88,7 +88,7 @@
 	unsigned int max_data = flash->mst->spi.max_data_write;
 	if (max_data == MAX_DATA_UNSPECIFIED) {
 		msg_perr("%s called, but SPI write chunk size not defined on this hardware.\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n", __func__);
+			 "Please report a bug at flashprog@flashprog.org\n", __func__);
 		return 1;
 	}
 	return spi_write_chunked(flash, buf, start, len, max_data);
@@ -152,9 +152,9 @@
 	    ((mst->command == default_spi_send_command) &&
 	     (mst->multicommand == default_spi_send_multicommand))) {
 		msg_perr("%s called with incomplete master definition.\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
-		return ERROR_FLASHROM_BUG;
+		return ERROR_FLASHPROG_BUG;
 	}
 
 
@@ -206,6 +206,6 @@
 			return function_opcode_list[i].opcode;
 	}
 	msg_cinfo("%s: unknown erase function (0x%p). Please report "
-			"this at flashrom-stable@flashrom.org\n", __func__, func);
+			"this at flashprog@flashprog.org\n", __func__, func);
 	return NULL;
 }
diff --git a/spi25.c b/spi25.c
index 6f17481..e4efd1c 100644
--- a/spi25.c
+++ b/spi25.c
@@ -629,7 +629,7 @@
 			return spi25_function_opcode_list[i].func;
 	}
 	msg_cinfo("%s: unknown erase opcode (0x%02x). Please report "
-			  "this at flashrom-stable@flashrom.org\n", __func__, opcode);
+			  "this at flashprog@flashprog.org\n", __func__, opcode);
 	return NULL;
 }
 
@@ -750,7 +750,7 @@
 	/* The data sheet requires a start address with the low bit cleared. */
 	if (start % 2) {
 		msg_cerr("%s: start address not even!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
 		if (spi_chip_write_1(flash, buf, start, start % 2))
 			return SPI_GENERIC_ERROR;
@@ -761,7 +761,7 @@
 	/* The data sheet requires total AAI write length to be even. */
 	if (len % 2) {
 		msg_cerr("%s: total write length not even!\n"
-			 "Please report a bug at flashrom-stable@flashrom.org\n",
+			 "Please report a bug at flashprog@flashprog.org\n",
 			 __func__);
 		/* Do not return an error for now. */
 		//return SPI_GENERIC_ERROR;
diff --git a/stm50.c b/stm50.c
index 37e560c..d03d6dc 100644
--- a/stm50.c
+++ b/stm50.c
@@ -45,7 +45,7 @@
 /* Some ST M50* chips do support erasing of sectors. This function will derive the erase function to use from
  * the length of the of the block. For calls that apparently do not address a sector (but a block) we just call
  * the block erase function instead. FIXME: This duplicates the behavior of the remaining erasers for blocks and
- * might be fixed when flashrom supports multiple functions per eraser or erasers that do erase parts of the
+ * might be fixed when flashprog supports multiple functions per eraser or erasers that do erase parts of the
  * chip only. */
 int erase_sector_stm50(struct flashctx *flash, unsigned int addr, unsigned int len)
 {
diff --git a/test_build.sh b/test_build.sh
index 9852952..7fabe6b 100755
--- a/test_build.sh
+++ b/test_build.sh
@@ -7,22 +7,22 @@
 if command -v meson >/dev/null 2>&1; then
 	meson setup --buildtype release ${TEMP_DIR}/build
 	ninja ${CPUS:+-j${CPUS}} -C ${TEMP_DIR}/build
-	FLASHROM=${TEMP_DIR}/build/flashrom
+	FLASHPROG=${TEMP_DIR}/build/flashprog
 else
 	${MAKECMD:-make} clean
 	${MAKECMD:-make} -j${CPUS:-$(nproc)} CC="${CC:-ccache cc}" CONFIG_EVERYTHING=yes
-	FLASHROM=./flashrom
+	FLASHPROG=./flashprog
 fi
 
 dd bs=128K count=1 </dev/urandom >${TEMP_DIR}/rand
-${FLASHROM} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -w ${TEMP_DIR}/rand
-${FLASHROM} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -r ${TEMP_DIR}/bak
+${FLASHPROG} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -w ${TEMP_DIR}/rand
+${FLASHPROG} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -r ${TEMP_DIR}/bak
 cmp ${TEMP_DIR}/rand ${TEMP_DIR}/bak
 
 dd bs=128K count=1 </dev/urandom >${TEMP_DIR}/rand
-${FLASHROM} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -w ${TEMP_DIR}/rand
-${FLASHROM} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -v ${TEMP_DIR}/rand
+${FLASHPROG} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -w ${TEMP_DIR}/rand
+${FLASHPROG} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -v ${TEMP_DIR}/rand
 
 dd bs=128K count=1 </dev/zero | tr '\000' '\377' >${TEMP_DIR}/empty
-${FLASHROM} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -E
-${FLASHROM} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -v ${TEMP_DIR}/empty
+${FLASHPROG} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -E
+${FLASHPROG} -p dummy:emulate=M25P10.RES,image=${TEMP_DIR}/image -c M25P10 -v ${TEMP_DIR}/empty
diff --git a/util/flashrom_partial_write_test.sh b/util/flashprog_partial_write_test.sh
similarity index 81%
rename from util/flashrom_partial_write_test.sh
rename to util/flashprog_partial_write_test.sh
index 8e30fc6..ea1f35f 100755
--- a/util/flashrom_partial_write_test.sh
+++ b/util/flashprog_partial_write_test.sh
@@ -13,7 +13,7 @@
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
-# This script attempts to test Flashrom partial write capability by writing
+# This script attempts to test Flashprog partial write capability by writing
 # patterns of 0xff and 0x00 bytes to the lowest 128kB of flash. 128kB is chosen
 # since 64kB is usually the largest possible block size, so we will try to
 # cover at least two blocks with this test.
@@ -21,18 +21,18 @@
 EXIT_SUCCESS=0
 EXIT_FAILURE=1
 
-# The copy of flashrom to test. If unset, we'll assume the user wants to test
-# a newly built flashrom binary in the parent directory (this script should
-# reside in flashrom/util).
-if [ -z "$FLASHROM" ] ; then
-	FLASHROM="../flashrom"
+# The copy of flashprog to test. If unset, we'll assume the user wants to test
+# a newly built flashprog binary in the parent directory (this script should
+# reside in flashprog/util).
+if [ -z "$FLASHPROG" ] ; then
+	FLASHPROG="../flashprog"
 fi
-echo "testing flashrom binary: ${FLASHROM}"
+echo "testing flashprog binary: ${FLASHPROG}"
 
 OLDDIR=$(pwd)
 
 # test data location
-TMPDIR=$(mktemp -d -t flashrom_test.XXXXXXXXXX)
+TMPDIR=$(mktemp -d -t flashprog_test.XXXXXXXXXX)
 if [ "$?" != "0" ] ; then
 	echo "Could not create temporary directory"
 	exit $EXIT_FAILURE
@@ -50,16 +50,16 @@
 	exit $EXIT_FAILURE
 fi
 
-which flashrom > /dev/null
+which flashprog > /dev/null
 if [ "$?" != "0" ] ; then
-	echo "Please install a stable version of flashrom in your path."
-	echo "This will be used to compare the test flashrom binary and "
+	echo "Please install a stable version of flashprog in your path."
+	echo "This will be used to compare the test flashprog binary and "
 	echo "restore your firmware image at the end of the test."
 	exit $EXIT_FAILURE
 fi
 
-# Keep a copy of flashrom with the test data
-cp "$FLASHROM" "${TMPDIR}/"
+# Keep a copy of flashprog with the test data
+cp "$FLASHPROG" "${TMPDIR}/"
 cd "$TMPDIR"
 echo "Running test in ${TMPDIR}"
 
@@ -83,7 +83,7 @@
 
 echo "Reading BIOS image"
 BIOS="bios.bin"
-flashrom ${FLASHROM_PARAM} -r "$BIOS" > /dev/null
+flashprog ${FLASHPROG_PARAM} -r "$BIOS" > /dev/null
 echo "Original image saved as ${BIOS}"
 
 # $1: exit code
@@ -94,8 +94,8 @@
 		echo "Result: PASSED"
 	fi
 
-	echo "restoring original bios image using system's flashrom"
-	flashrom ${FLASHROM_PARAM} -w "$BIOS"
+	echo "restoring original bios image using system's flashprog"
+	flashprog ${FLASHPROG_PARAM} -w "$BIOS"
 	echo "test files remain in ${TMPDIR}"
 	cd "$OLDDIR"
 	exit "$1"
@@ -166,15 +166,15 @@
 	dd if=${ZERO_4K} of=${TESTFILE} bs=1 conv=notrunc seek=${offset} 2> /dev/null
 	dd if=${FF_4K} of=${TESTFILE} bs=1 conv=notrunc seek=$((${offset} + 4096)) 2> /dev/null
 
-	./flashrom ${FLASHROM_PARAM} -l layout_4k_aligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null
+	./flashprog ${FLASHPROG_PARAM} -l layout_4k_aligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null
 	if [ "$?" != "0" ] ; then
 		echo "failed to flash region"
 		do_exit "$EXIT_FAILURE"
 	fi
 
 	# download the entire ROM image and use diff to compare to ensure
-	# flashrom logic does not violate user-specified regions
-	flashrom ${FLASHROM_PARAM} -r difftest.bin > /dev/null
+	# flashprog logic does not violate user-specified regions
+	flashprog ${FLASHPROG_PARAM} -r difftest.bin > /dev/null
 	diff -q difftest.bin "$TESTFILE"
 	if [ "$?" != "0" ] ; then
 		echo "failed diff test"
@@ -247,7 +247,7 @@
 " > layout_unaligned.txt
 
 # reset the test file and ROM to the original state
-flashrom ${FLASHROM_PARAM} -w "$BIOS" > /dev/null
+flashprog ${FLASHPROG_PARAM} -w "$BIOS" > /dev/null
 cp "$BIOS" "$TESTFILE"
 
 i=0
@@ -266,15 +266,15 @@
 	dd if=${ZERO_4K} of=${TESTFILE} bs=1 conv=notrunc seek=${offset} 2> /dev/null
 	dd if=${FF_4K} of=${TESTFILE} bs=1 conv=notrunc seek=$((${offset} + 4096)) count=writelen 2> /dev/null
 
-	./flashrom ${FLASHROM_PARAM} -l layout_unaligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null
+	./flashprog ${FLASHPROG_PARAM} -l layout_unaligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null
 	if [ "$?" != "0" ] ; then
 		echo "failed to flash region"
 		do_exit "$EXIT_FAILURE"
 	fi
 
 	# download the entire ROM image and use diff to compare to ensure
-	# flashrom logic does not violate user-specified regions
-	flashrom ${FLASHROM_PARAM} -r difftest.bin > /dev/null
+	# flashprog logic does not violate user-specified regions
+	flashprog ${FLASHPROG_PARAM} -r difftest.bin > /dev/null
 	diff -q difftest.bin "$TESTFILE"
 	if [ "$?" != "0" ] ; then
 		echo "failed diff test"
diff --git a/util/getversion.sh b/util/getversion.sh
index 6733af0..038adcd 100755
--- a/util/getversion.sh
+++ b/util/getversion.sh
@@ -33,8 +33,8 @@
 
 mandate() {
 	d='unknown'
-	if ${GETREVISION} -c flashrom.8.tmpl; then
-		tmp=$(${GETREVISION} --date flashrom.8.tmpl)
+	if ${GETREVISION} -c flashprog.8.tmpl; then
+		tmp=$(${GETREVISION} --date flashprog.8.tmpl)
 		if [ $? -eq 0 ]; then
 			d="${tmp}"
 		fi
@@ -55,7 +55,7 @@
     -h or --help
         this message
     -v or --version
-        return current/release flashrom version
+        return current/release flashprog version
     -m or --man-date
         return current/release date of the manual page
 "
diff --git a/util/git-hooks/commit-msg b/util/git-hooks/commit-msg
index d43eb45..fa250f3 100755
--- a/util/git-hooks/commit-msg
+++ b/util/git-hooks/commit-msg
@@ -28,7 +28,7 @@
 CHANGE_ID_AFTER="Bug|Depends-On|Issue|Test|Feature|Fixes|Fixed|Staging-ID"
 MSG="$1"
 
-DEV_GUIDELINES_URL="https://www.flashrom.org/Development_Guidelines"
+DEV_GUIDELINES_URL="https://www.flashprog.org/Development_Guidelines"
 
 # Check for, and add if missing, a unique Change-Id
 #
diff --git a/util/git-hooks/pre-push b/util/git-hooks/pre-push
index b5f4620..f6e04ec 100755
--- a/util/git-hooks/pre-push
+++ b/util/git-hooks/pre-push
@@ -21,7 +21,7 @@
 
 zero=0000000000000000000000000000000000000000
 
-upstream_pattern="github\.com.flashrom/flashrom(\.git)?|flashrom\.org.git/flashrom(\.git)?"
+upstream_pattern="github\.com.flashprog/flashprog(\.git)?|flashprog\.org.git/flashprog(\.git)?"
 
 # Only care about the upstream repositories
 if echo "$url" | grep -q -v -E "$upstream_pattern" ; then
diff --git a/util/ich_descriptors_tool/Makefile b/util/ich_descriptors_tool/Makefile
index 0891599..14e6d2f 100644
--- a/util/ich_descriptors_tool/Makefile
+++ b/util/ich_descriptors_tool/Makefile
@@ -2,7 +2,7 @@
 # This file is part of the flashrom project.
 #
 # This Makefile works standalone, but it is usually called from the main
-# Makefile in the flashrom directory.
+# Makefile in the flashprog directory.
 
 include ../../Makefile.include
 
@@ -35,14 +35,14 @@
 ifeq ($(TARGET_OS), DOS)
 EXEC_SUFFIX := .exe
 # DJGPP has odd uint*_t definitions which cause lots of format string warnings.
-FLASHROM_CFLAGS += -Wno-format
+FLASHPROG_CFLAGS += -Wno-format
 endif
 
 ifeq ($(TARGET_OS), MinGW)
 EXEC_SUFFIX := .exe
 # Some functions provided by Microsoft do not work as described in C99 specifications. This macro fixes that
 # for MinGW. See http://sourceforge.net/p/mingw-w64/wiki2/printf%20and%20scanf%20family/
-FLASHROM_CFLAGS += -D__USE_MINGW_ANSI_STDIO=1
+FLASHPROG_CFLAGS += -D__USE_MINGW_ANSI_STDIO=1
 endif
 
 ifeq ($(WARNERROR), yes)
@@ -50,10 +50,10 @@
 endif
 
 
-FLASHROM_CFLAGS += -MMD -MP -MF $(DEPPATH)/$(@F).d
+FLASHPROG_CFLAGS += -MMD -MP -MF $(DEPPATH)/$(@F).d
 # enables functions that populate the descriptor structs from plain binary dumps
-FLASHROM_CFLAGS += -D ICH_DESCRIPTORS_FROM_DUMP_ONLY
-FLASHROM_CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+FLASHPROG_CFLAGS += -D ICH_DESCRIPTORS_FROM_DUMP_ONLY
+FLASHPROG_CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 
 OBJ = $(OBJATH)/$(SRC:%.c=%.o)
 
@@ -62,12 +62,12 @@
 all:$(PROGRAM)$(EXEC_SUFFIX)
 
 $(OBJ): $(OBJATH)/%.o : %.c
-	$(CC) $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) -o $@ -c $<
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(FLASHPROG_CFLAGS) -o $@ -c $<
 
 # this enables us to share source files without simultaneously sharing .o files
-# with flashrom, which would lead to unexpected results (w/o running make clean)
+# with flashprog, which would lead to unexpected results (w/o running make clean)
 $(SHAREDOBJ): $(OBJATH)/%.o : $(SHAREDSRCDIR)/%.c
-	$(CC) $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) -o $@ -c $<
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(FLASHPROG_CFLAGS) -o $@ -c $<
 
 $(PROGRAM)$(EXEC_SUFFIX): $(OBJ) $(SHAREDOBJ)
 	$(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJ) $(SHAREDOBJ)
diff --git a/util/manibuilder/Dockerfile.almalinux b/util/manibuilder/Dockerfile.almalinux
index 5904f45..8f3502d 100644
--- a/util/manibuilder/Dockerfile.almalinux
+++ b/util/manibuilder/Dockerfile.almalinux
@@ -19,10 +19,10 @@
 ENV GIT_SSL_NO_VERIFY=1
 USER mani
 
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 RUN \
 	cd && \
-	git clone ${ORIGIN} flashrom
+	git clone ${ORIGIN} flashprog
 
 ENV DEVSHELL /bin/bash
 COPY mani-wrapper.sh /home/mani/
diff --git a/util/manibuilder/Dockerfile.alpine b/util/manibuilder/Dockerfile.alpine
index 227eb91..585275b 100644
--- a/util/manibuilder/Dockerfile.alpine
+++ b/util/manibuilder/Dockerfile.alpine
@@ -23,11 +23,11 @@
 ENV GIT_SSL_NO_VERIFY=1
 USER mani
 
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 RUN \
 	cd && \
 	mkdir .ccache && chown mani:mani .ccache && \
-	git clone ${ORIGIN} flashrom
+	git clone ${ORIGIN} flashprog
 
 ARG IDENT=mani
 ARG CCACHE_MAX=32M
diff --git a/util/manibuilder/Dockerfile.anita b/util/manibuilder/Dockerfile.anita
index b90311f..c8dfae8 100644
--- a/util/manibuilder/Dockerfile.anita
+++ b/util/manibuilder/Dockerfile.anita
@@ -25,7 +25,7 @@
 
 ARG EXTRA_PKG=""
 ARG RUNTIME_MEM=128M
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 ARG PKG_PATH=http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/7.1/All
 RUN cd && anita --persist --memory-size=${RUNTIME_MEM} --run \
 "echo 'dhcpcd'                                   >init && \
@@ -35,7 +35,7 @@
          pciutils libusb1 libusb-compat libftdi \
          ${EXTRA_PKG} && \
  git config --global --add http.sslVerify false && \
- git clone ${ORIGIN} flashrom" \
+ git clone ${ORIGIN} flashprog" \
 		boot ${INST_IMG}
 
 RUN cd && dd if=/dev/zero bs=1M count=64 of=cache.img && \
@@ -56,7 +56,7 @@
  echo 'manitest() {'                            >>init && \
  echo '    fsck -y -t ffs /dev/'\${bdev}        >>init && \
  echo '    mount /dev/'\${bdev}' ~/.ccache'     >>init && \
- echo '    (cd ~/flashrom && eval \" \$*\")'    >>init && \
+ echo '    (cd ~/flashprog && eval \" \$*\")'    >>init && \
  echo '    ret=\$?'                             >>init && \
  echo '    umount ~/.ccache'                    >>init && \
  echo '    return \$ret'                        >>init && \
diff --git a/util/manibuilder/Dockerfile.centos b/util/manibuilder/Dockerfile.centos
index 6ca5214..72c7472 100644
--- a/util/manibuilder/Dockerfile.centos
+++ b/util/manibuilder/Dockerfile.centos
@@ -11,11 +11,11 @@
 ENV GIT_SSL_NO_VERIFY=1
 USER mani
 
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 RUN \
 	cd && \
 	mkdir .ccache && chown mani:mani .ccache && \
-	git clone ${ORIGIN} flashrom
+	git clone ${ORIGIN} flashprog
 
 ENV DEVSHELL /bin/bash
 COPY mani-wrapper.sh /home/mani/
diff --git a/util/manibuilder/Dockerfile.debian b/util/manibuilder/Dockerfile.debian
index 8eeb4ea..ada61d4 100644
--- a/util/manibuilder/Dockerfile.debian
+++ b/util/manibuilder/Dockerfile.debian
@@ -14,11 +14,11 @@
 ENV GIT_SSL_NO_VERIFY=1
 USER mani
 
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 RUN \
 	cd && \
 	mkdir .ccache && chown mani:mani .ccache && \
-	git clone ${ORIGIN} flashrom
+	git clone ${ORIGIN} flashprog
 
 ARG IDENT=mani
 ARG CCACHE_MAX=32M
diff --git a/util/manibuilder/Dockerfile.djgpp b/util/manibuilder/Dockerfile.djgpp
index 36cabfe..7547798 100644
--- a/util/manibuilder/Dockerfile.djgpp
+++ b/util/manibuilder/Dockerfile.djgpp
@@ -11,21 +11,21 @@
 ENV GIT_SSL_NO_VERIFY=1
 USER mani
 
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 RUN cd && \
 	mkdir .ccache && chown mani:users .ccache && \
-	git clone ${ORIGIN} flashrom && \
+	git clone ${ORIGIN} flashprog && \
 	git clone https://git.kernel.org/pub/scm/utils/pciutils/pciutils.git && \
 	cd pciutils && \
 		git checkout v3.5.6 && \
-		curl --insecure https://flashrom.org/images/6/6a/Pciutils-3.5.6.patch.gz | zcat | git apply && \
+		curl --insecure https://flashprog.org/images/6/6a/Pciutils-3.5.6.patch.gz | zcat | git apply && \
 		make ZLIB=no DNS=no HOST=i386-djgpp-djgpp \
 			CROSS_COMPILE=i586-pc-msdosdjgpp- \
 			PREFIX=/ DESTDIR=$PWD/../ \
 			STRIP="--strip-program=i586-pc-msdosdjgpp-strip -s" \
 			install install-lib && \
 		cd ../ && \
-	curl --insecure https://flashrom.org/images/3/3d/Libgetopt.tar.gz | zcat | tar x && \
+	curl --insecure https://flashprog.org/images/3/3d/Libgetopt.tar.gz | zcat | tar x && \
 	cd libgetopt && \
 		make && cp libgetopt.a ../lib/ && cp getopt.h ../include/
 
diff --git a/util/manibuilder/Dockerfile.fedora b/util/manibuilder/Dockerfile.fedora
index 82a1e21..ccce010 100644
--- a/util/manibuilder/Dockerfile.fedora
+++ b/util/manibuilder/Dockerfile.fedora
@@ -12,11 +12,11 @@
 ENV GIT_SSL_NO_VERIFY=1
 USER mani
 
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 RUN \
 	cd && \
 	mkdir .ccache && chown mani:mani .ccache && \
-	git clone ${ORIGIN} flashrom
+	git clone ${ORIGIN} flashprog
 
 ARG IDENT=mani
 ARG CCACHE_MAX=32M
diff --git a/util/manibuilder/Dockerfile.git b/util/manibuilder/Dockerfile.git
index 92549a3..10d7aa6 100644
--- a/util/manibuilder/Dockerfile.git
+++ b/util/manibuilder/Dockerfile.git
@@ -2,5 +2,5 @@
 
 RUN	apk add git-daemon
 EXPOSE	9418
-VOLUME	["/git/flashrom.git"]
-CMD	["daemon", "--reuseaddr", "--export-all", "--base-path=/git", "/git/flashrom.git"]
+VOLUME	["/git/flashprog.git"]
+CMD	["daemon", "--reuseaddr", "--export-all", "--base-path=/git", "/git/flashprog.git"]
diff --git a/util/manibuilder/Dockerfile.ubuntu b/util/manibuilder/Dockerfile.ubuntu
index 1762506..b9b818f 100644
--- a/util/manibuilder/Dockerfile.ubuntu
+++ b/util/manibuilder/Dockerfile.ubuntu
@@ -27,11 +27,11 @@
 ENV GIT_SSL_NO_VERIFY=1
 USER mani
 
-ARG ORIGIN=https://review.coreboot.org/flashrom-stable.git
+ARG ORIGIN=https://review.sourcearcade.org/flashprog.git
 RUN \
 	cd && \
 	mkdir .ccache && chown mani:mani .ccache && \
-	git clone ${ORIGIN} flashrom
+	git clone ${ORIGIN} flashprog
 
 ARG IDENT=mani
 ARG CCACHE_MAX=32M
diff --git a/util/manibuilder/Makefile b/util/manibuilder/Makefile
index 3ae1e15..47e3415 100644
--- a/util/manibuilder/Makefile
+++ b/util/manibuilder/Makefile
@@ -48,7 +48,7 @@
 
 $(ALL_TAGS): export QUIET_SETUP=$(QUIET_TEST)
 $(ALL_TAGS): export TEST_REMOTE?=$(if $(TEST_LOCAL),\
-					git://mani-git/flashrom.git,\
+					git://mani-git/flashprog.git,\
 					origin)
 $(ALL_TAGS): export TEST_REVISION?=$(if $(TEST_LOCAL),HEAD,main)
 $(ALL_TAGS): %: %-check-build mani-net $(if $(TEST_LOCAL),local-git)
@@ -127,7 +127,7 @@
 	fi; \
 	docker run --rm --detach \
 		--name mani-git \
-		--volume=$(TEST_LOCAL_GIT):/git/flashrom.git:ro \
+		--volume=$(TEST_LOCAL_GIT):/git/flashprog.git:ro \
 		--network=manibuilder \
 		mani/git $(if $(QUIET_SETUP),>/dev/null)
 
diff --git a/util/manibuilder/README.md b/util/manibuilder/README.md
index ece2317..adbdfe7 100644
--- a/util/manibuilder/README.md
+++ b/util/manibuilder/README.md
@@ -15,7 +15,7 @@
 target, for instance `alpine:amd64-v3.7`. These targets will
 automatically check for existence of their respective *Docker*
 images (sub target <tag>-check-build), and build them if necessary
-(<tag>-build). Finally, flashrom revision `$(TEST_REVISION)` is
+(<tag>-build). Finally, flashprog revision `$(TEST_REVISION)` is
 fetched and build tested.
 
 The results will be kept by *Docker* as stopped containers and
@@ -62,12 +62,12 @@
 
     $ make debian-debootstrap:mips-sid-shell
     [...]
-    mani@63536fc102a5:~/flashrom$ make
+    mani@63536fc102a5:~/flashprog$ make
     [...]
-    cc -MMD -Os -Wall -Wshadow -Werror -I/usr/include/libusb-1.0  -D'CONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_INVALID' -D'CONFIG_DEFAULT_PROGRAMMER_ARGS="''"' -D'CONFIG_SERPROG=1' -D'CONFIG_PONY_SPI=1' -D'CONFIG_BITBANG_SPI=1' -D'CONFIG_GFXNVIDIA=1' -D'CONFIG_SATASII=1' -D'CONFIG_ATAVIA=1' -D'CONFIG_IT8212=1' -D'CONFIG_FT2232_SPI=1' -D'CONFIG_USBBLASTER_SPI=1' -D'CONFIG_PICKIT2_SPI=1' -D'HAVE_FT232H=1'  -D'CONFIG_DUMMY=1' -D'CONFIG_DRKAISER=1' -D'CONFIG_NICINTEL=1' -D'CONFIG_NICINTEL_SPI=1' -D'CONFIG_NICINTEL_EEPROM=1' -D'CONFIG_OGP_SPI=1' -D'CONFIG_BUSPIRATE_SPI=1' -D'CONFIG_DEDIPROG=1' -D'CONFIG_DEVELOPERBOX_SPI=1' -D'CONFIG_LINUX_MTD=1' -D'CONFIG_LINUX_SPI=1' -D'CONFIG_CH341A_SPI=1' -D'CONFIG_DIGILENT_SPI=1' -D'NEED_PCI=1'  -D'NEED_RAW_ACCESS=1' -D'NEED_LIBUSB0=1' -D'NEED_LIBUSB1=1' -D'HAVE_UTSNAME=1' -D'HAVE_CLOCK_GETTIME=1' -D'FLASHROM_VERSION="p1.0-141-g9cecc7e"' -o libflashrom.o -c libflashrom.c
-    libflashrom.c:386:12: error: 'flashrom_layout_parse_fmap' defined but not used [-Werror=unused-function]
-     static int flashrom_layout_parse_fmap(struct flashrom_layout **layout,
+    cc -MMD -Os -Wall -Wshadow -Werror -I/usr/include/libusb-1.0  -D'CONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_INVALID' -D'CONFIG_DEFAULT_PROGRAMMER_ARGS="''"' -D'CONFIG_SERPROG=1' -D'CONFIG_PONY_SPI=1' -D'CONFIG_BITBANG_SPI=1' -D'CONFIG_GFXNVIDIA=1' -D'CONFIG_SATASII=1' -D'CONFIG_ATAVIA=1' -D'CONFIG_IT8212=1' -D'CONFIG_FT2232_SPI=1' -D'CONFIG_USBBLASTER_SPI=1' -D'CONFIG_PICKIT2_SPI=1' -D'HAVE_FT232H=1'  -D'CONFIG_DUMMY=1' -D'CONFIG_DRKAISER=1' -D'CONFIG_NICINTEL=1' -D'CONFIG_NICINTEL_SPI=1' -D'CONFIG_NICINTEL_EEPROM=1' -D'CONFIG_OGP_SPI=1' -D'CONFIG_BUSPIRATE_SPI=1' -D'CONFIG_DEDIPROG=1' -D'CONFIG_DEVELOPERBOX_SPI=1' -D'CONFIG_LINUX_MTD=1' -D'CONFIG_LINUX_SPI=1' -D'CONFIG_CH341A_SPI=1' -D'CONFIG_DIGILENT_SPI=1' -D'NEED_PCI=1'  -D'NEED_RAW_ACCESS=1' -D'NEED_LIBUSB0=1' -D'NEED_LIBUSB1=1' -D'HAVE_UTSNAME=1' -D'HAVE_CLOCK_GETTIME=1' -D'FLASHPROG_VERSION="p1.0-141-g9cecc7e"' -o libflashprog.o -c libflashprog.c
+    libflashprog.c:386:12: error: 'flashprog_layout_parse_fmap' defined but not used [-Werror=unused-function]
+     static int flashprog_layout_parse_fmap(struct flashprog_layout **layout,
             ^~~~~~~~~~~~~~~~~~~~~~~~~~
     cc1: all warnings being treated as errors
-    make: *** [Makefile:1075: libflashrom.o] Error 1
+    make: *** [Makefile:1075: libflashprog.o] Error 1
     $ # uh-huh, might be a problem with big-endian #if foo
diff --git a/util/manibuilder/mani-wrapper.sh b/util/manibuilder/mani-wrapper.sh
index c3f5834..b2de31f 100644
--- a/util/manibuilder/mani-wrapper.sh
+++ b/util/manibuilder/mani-wrapper.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-cd /home/mani/flashrom/
+cd /home/mani/flashprog/
 
 if [ $# -eq 0 ]; then
 	exec "${DEVSHELL}"
diff --git a/util/shell.nix b/util/shell.nix
index 3c983fe..0389a5f 100644
--- a/util/shell.nix
+++ b/util/shell.nix
@@ -1,7 +1,7 @@
 with import <nixpkgs> {};
 
 stdenv.mkDerivation {
-	name = "flashrom";
+	name = "flashprog";
 
 	buildInputs = [
 		gcc
diff --git a/util/z60_flashrom.rules b/util/z60_flashprog.rules
similarity index 96%
rename from util/z60_flashrom.rules
rename to util/z60_flashprog.rules
index 9fd3330..4651e1e 100644
--- a/util/z60_flashrom.rules
+++ b/util/z60_flashprog.rules
@@ -25,8 +25,8 @@
 ## suitable for your respective distribution.
 ##
 
-ACTION!="add|change", GOTO="flashrom_rules_end"
-SUBSYSTEM!="usb|usb_device", GOTO="flashrom_rules_end"
+ACTION!="add|change", GOTO="flashprog_rules_end"
+SUBSYSTEM!="usb|usb_device", GOTO="flashprog_rules_end"
 
 # Amontec JTAGkey(2)
 # http://www.amontec.com/jtagkey.shtml
@@ -93,4 +93,4 @@
 # Winchiphead (WCH) CH341a based programmer
 ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5512", MODE="664", GROUP="plugdev"
 
-LABEL="flashrom_rules_end"
+LABEL="flashprog_rules_end"
diff --git a/w29ee011.c b/w29ee011.c
index a570bd6..e6e25f2 100644
--- a/w29ee011.c
+++ b/w29ee011.c
@@ -29,7 +29,7 @@
 	if (!chip_to_probe || strcmp(chip_to_probe, flash->chip->name)) {
 		msg_cdbg("Old Winbond W29* probe method disabled because "
 			 "the probing sequence puts the AMIC A49LF040A in "
-			 "a funky state. Use 'flashrom -c %s' if you "
+			 "a funky state. Use 'flashprog -c %s' if you "
 			 "have a board with such a chip.\n", flash->chip->name);
 		return 0;
 	}
diff --git a/wbsio_spi.c b/wbsio_spi.c
index d0029ec..02c4a04 100644
--- a/wbsio_spi.c
+++ b/wbsio_spi.c
@@ -157,9 +157,9 @@
 		}
 		mode = 0x60 | (writearr[1] & 0x0f);
 	} else if (5 == writecnt && 4 == readcnt) {
-		/* XXX: TODO not supported by flashrom infrastructure!
+		/* XXX: TODO not supported by flashprog infrastructure!
 		 * This mode, 7, discards the fifth byte in writecnt,
-		 * but since we can not express that in flashrom, fail
+		 * but since we can not express that in flashprog, fail
 		 * the operation for now.
 		 */
 		;
diff --git a/writeprotect.c b/writeprotect.c
index a3c9ce2..b91f3e8 100644
--- a/writeprotect.c
+++ b/writeprotect.c
@@ -20,28 +20,28 @@
 #include <string.h>
 
 #include "flash.h"
-#include "libflashrom.h"
+#include "libflashprog.h"
 #include "chipdrivers.h"
 #include "writeprotect.h"
 
 /** Read and extract a single bit from the chip's registers */
-static enum flashrom_wp_result read_bit(uint8_t *value, bool *present, struct flashctx *flash, struct reg_bit_info bit)
+static enum flashprog_wp_result read_bit(uint8_t *value, bool *present, struct flashctx *flash, struct reg_bit_info bit)
 {
 	*present = bit.reg != INVALID_REG;
 	if (*present) {
 		if (spi_read_register(flash, bit.reg, value))
-			return FLASHROM_WP_ERR_READ_FAILED;
+			return FLASHPROG_WP_ERR_READ_FAILED;
 		*value = (*value >> bit.bit_index) & 1;
 	} else {
 		/* Zero bit, it may be used by compare_ranges(). */
 		*value = 0;
 	}
 
-	return FLASHROM_WP_OK;
+	return FLASHPROG_WP_OK;
 }
 
 /** Read all WP configuration bits from the chip's registers. */
-static enum flashrom_wp_result read_wp_bits(struct wp_bits *bits, struct flashctx *flash)
+static enum flashprog_wp_result read_wp_bits(struct wp_bits *bits, struct flashctx *flash)
 {
 	/*
 	 * For each WP bit that is included in the chip's register layout, read
@@ -51,7 +51,7 @@
 	const struct reg_bit_map *bit_map = &flash->chip->reg_bits;
 	bool ignored;
 	size_t i;
-	enum flashrom_wp_result ret;
+	enum flashprog_wp_result ret;
 
 	/*
 	 * Write protection select bit (WPS) controls kind of write protection
@@ -65,31 +65,31 @@
 		uint8_t wps;
 
 		ret = read_bit(&wps, &wps_bit_present, flash, bit_map->wps);
-		if (ret != FLASHROM_WP_OK)
+		if (ret != FLASHPROG_WP_OK)
 			return ret;
 
 		if (wps_bit_present && wps)
-			return FLASHROM_WP_ERR_UNSUPPORTED_STATE;
+			return FLASHPROG_WP_ERR_UNSUPPORTED_STATE;
 	}
 
 	ret = read_bit(&bits->tb,  &bits->tb_bit_present,  flash, bit_map->tb);
-	if (ret != FLASHROM_WP_OK)
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
 	ret = read_bit(&bits->sec, &bits->sec_bit_present, flash, bit_map->sec);
-	if (ret != FLASHROM_WP_OK)
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
 	ret = read_bit(&bits->cmp, &bits->cmp_bit_present, flash, bit_map->cmp);
-	if (ret != FLASHROM_WP_OK)
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
 	ret = read_bit(&bits->srp, &bits->srp_bit_present, flash, bit_map->srp);
-	if (ret != FLASHROM_WP_OK)
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
 	ret = read_bit(&bits->srl, &bits->srl_bit_present, flash, bit_map->srl);
-	if (ret != FLASHROM_WP_OK)
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
 	for (i = 0; i < ARRAY_SIZE(bits->bp); i++) {
@@ -98,7 +98,7 @@
 
 		bits->bp_bit_count = i + 1;
 		ret = read_bit(&bits->bp[i], &ignored, flash, bit_map->bp[i]);
-		if (ret != FLASHROM_WP_OK)
+		if (ret != FLASHPROG_WP_OK)
 			return ret;
 	}
 
@@ -144,7 +144,7 @@
 }
 
 /** Write WP configuration bits to the flash's registers. */
-static enum flashrom_wp_result write_wp_bits(struct flashctx *flash, struct wp_bits bits)
+static enum flashprog_wp_result write_wp_bits(struct flashctx *flash, struct wp_bits bits)
 {
 	enum flash_reg reg;
 	uint8_t reg_values[MAX_REGISTERS];
@@ -159,7 +159,7 @@
 
 		uint8_t value;
 		if (spi_read_register(flash, reg, &value))
-			return FLASHROM_WP_ERR_READ_FAILED;
+			return FLASHPROG_WP_ERR_READ_FAILED;
 
 		/* Skip unnecessary register writes */
 		uint8_t actual = value & write_masks[reg];
@@ -170,10 +170,10 @@
 		value = (value & ~write_masks[reg]) | expected;
 
 		if (spi_write_register(flash, reg, value))
-			return FLASHROM_WP_ERR_WRITE_FAILED;
+			return FLASHPROG_WP_ERR_WRITE_FAILED;
 	}
 
-	enum flashrom_wp_result ret = FLASHROM_WP_OK;
+	enum flashprog_wp_result ret = FLASHPROG_WP_OK;
 	/* Verify each register even if write to it was skipped */
 	for (reg = STATUS1; reg < MAX_REGISTERS; reg++) {
 		if (!bit_masks[reg])
@@ -181,7 +181,7 @@
 
 		uint8_t value;
 		if (spi_read_register(flash, reg, &value))
-			return FLASHROM_WP_ERR_READ_FAILED;
+			return FLASHPROG_WP_ERR_READ_FAILED;
 
 		msg_cdbg2("%s: wp_verify reg:%u value:0x%x\n", __func__, reg, value);
 		uint8_t actual = value & bit_masks[reg];
@@ -190,7 +190,7 @@
 		if (actual != expected) {
 			msg_cdbg("%s: wp_verify failed: reg:%u actual:0x%x expected:0x%x\n",
 				 __func__, reg, actual, expected);
-			ret = FLASHROM_WP_ERR_VERIFY_FAILED;
+			ret = FLASHPROG_WP_ERR_VERIFY_FAILED;
 		}
 	}
 
@@ -198,11 +198,11 @@
 }
 
 /** Get the range selected by a WP configuration. */
-static enum flashrom_wp_result get_wp_range(struct wp_range *range, struct flashctx *flash, const struct wp_bits *bits)
+static enum flashprog_wp_result get_wp_range(struct wp_range *range, struct flashctx *flash, const struct wp_bits *bits)
 {
-	flash->chip->decode_range(&range->start, &range->len, bits, flashrom_flash_getsize(flash));
+	flash->chip->decode_range(&range->start, &range->len, bits, flashprog_flash_getsize(flash));
 
-	return FLASHROM_WP_OK;
+	return FLASHPROG_WP_OK;
 }
 
 /** Write protect bit values and the range they will activate. */
@@ -267,7 +267,7 @@
  *
  * Allocates a buffer that must be freed by the caller with free().
  */
-static enum flashrom_wp_result get_ranges_and_wp_bits(struct flashctx *flash, struct wp_bits bits, struct wp_range_and_bits **ranges, size_t *count)
+static enum flashprog_wp_result get_ranges_and_wp_bits(struct flashctx *flash, struct wp_bits bits, struct wp_range_and_bits **ranges, size_t *count)
 {
 	const struct reg_bit_map *reg_bits = &flash->chip->reg_bits;
 	size_t i;
@@ -317,8 +317,8 @@
 		struct wp_range_and_bits *output = &(*ranges)[range_index];
 
 		output->bits = bits;
-		enum flashrom_wp_result ret = get_wp_range(&output->range, flash, &bits);
-		if (ret != FLASHROM_WP_OK) {
+		enum flashprog_wp_result ret = get_wp_range(&output->range, flash, &bits);
+		if (ret != FLASHPROG_WP_OK) {
 			free(*ranges);
 			return ret;
 		}
@@ -363,7 +363,7 @@
 	/* Reduce count to only include non-duplicate ranges */
 	*count = output_index;
 
-	return FLASHROM_WP_OK;
+	return FLASHPROG_WP_OK;
 }
 
 static bool ranges_equal(struct wp_range a, struct wp_range b)
@@ -381,12 +381,12 @@
 	size_t count;
 	size_t i;
 
-	enum flashrom_wp_result ret = get_ranges_and_wp_bits(flash, *bits, &ranges, &count);
-	if (ret != FLASHROM_WP_OK)
+	enum flashprog_wp_result ret = get_ranges_and_wp_bits(flash, *bits, &ranges, &count);
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
 	/* Search for matching range */
-	ret = FLASHROM_WP_ERR_RANGE_UNSUPPORTED;
+	ret = FLASHPROG_WP_ERR_RANGE_UNSUPPORTED;
 	for (i = 0; i < count; i++) {
 
 		if (ranges_equal(ranges[i].range, range)) {
@@ -402,42 +402,42 @@
 }
 
 /** Get the mode selected by a WP configuration. */
-static int get_wp_mode(enum flashrom_wp_mode *mode, const struct wp_bits *bits)
+static int get_wp_mode(enum flashprog_wp_mode *mode, const struct wp_bits *bits)
 {
-	const enum flashrom_wp_mode wp_modes[2][2] = {
+	const enum flashprog_wp_mode wp_modes[2][2] = {
 		{
-			FLASHROM_WP_MODE_DISABLED,	/* srl=0, srp=0 */
-			FLASHROM_WP_MODE_HARDWARE,	/* srl=0, srp=1 */
+			FLASHPROG_WP_MODE_DISABLED,	/* srl=0, srp=0 */
+			FLASHPROG_WP_MODE_HARDWARE,	/* srl=0, srp=1 */
 		}, {
-			FLASHROM_WP_MODE_POWER_CYCLE,	/* srl=1, srp=0 */
-			FLASHROM_WP_MODE_PERMANENT,	/* srl=1, srp=1 */
+			FLASHPROG_WP_MODE_POWER_CYCLE,	/* srl=1, srp=0 */
+			FLASHPROG_WP_MODE_PERMANENT,	/* srl=1, srp=1 */
 		},
 	};
 
 	*mode = wp_modes[bits->srl][bits->srp];
 
-	return FLASHROM_WP_OK;
+	return FLASHPROG_WP_OK;
 }
 
 /** Modify a wp_bits structure such that it will select a specified protection mode. */
-static int set_wp_mode(struct wp_bits *bits, const enum flashrom_wp_mode mode)
+static int set_wp_mode(struct wp_bits *bits, const enum flashprog_wp_mode mode)
 {
 	switch (mode) {
-	case FLASHROM_WP_MODE_DISABLED:
+	case FLASHPROG_WP_MODE_DISABLED:
 		bits->srl = 0;
 		bits->srp = 0;
-		return FLASHROM_WP_OK;
+		return FLASHPROG_WP_OK;
 
-	case FLASHROM_WP_MODE_HARDWARE:
+	case FLASHPROG_WP_MODE_HARDWARE:
 		if (!bits->srp_bit_present)
-			return FLASHROM_WP_ERR_CHIP_UNSUPPORTED;
+			return FLASHPROG_WP_ERR_CHIP_UNSUPPORTED;
 
 		bits->srl = 0;
 		bits->srp = 1;
-		return FLASHROM_WP_OK;
+		return FLASHPROG_WP_OK;
 
-	case FLASHROM_WP_MODE_POWER_CYCLE:
-	case FLASHROM_WP_MODE_PERMANENT:
+	case FLASHPROG_WP_MODE_POWER_CYCLE:
+	case FLASHPROG_WP_MODE_PERMANENT:
 	default:
 		/*
 		 * Don't try to enable power cycle or permanent protection for
@@ -445,7 +445,7 @@
 		 * but they are usually unavailable by default or require special
 		 * commands to activate.
 		 */
-		return FLASHROM_WP_ERR_MODE_UNSUPPORTED;
+		return FLASHPROG_WP_ERR_MODE_UNSUPPORTED;
 	}
 }
 
@@ -454,53 +454,53 @@
 	return (flash->chip != NULL) && (flash->chip->decode_range != NULL);
 }
 
-enum flashrom_wp_result wp_read_cfg(struct flashrom_wp_cfg *cfg, struct flashctx *flash)
+enum flashprog_wp_result wp_read_cfg(struct flashprog_wp_cfg *cfg, struct flashctx *flash)
 {
 	struct wp_bits bits;
-	enum flashrom_wp_result ret = FLASHROM_WP_OK;
+	enum flashprog_wp_result ret = FLASHPROG_WP_OK;
 
 	if (!chip_supported(flash))
-		ret = FLASHROM_WP_ERR_CHIP_UNSUPPORTED;
+		ret = FLASHPROG_WP_ERR_CHIP_UNSUPPORTED;
 
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = read_wp_bits(&bits, flash);
 
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = get_wp_range(&cfg->range, flash, &bits);
 
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = get_wp_mode(&cfg->mode, &bits);
 
 	return ret;
 }
 
-enum flashrom_wp_result wp_write_cfg(struct flashctx *flash, const struct flashrom_wp_cfg *cfg)
+enum flashprog_wp_result wp_write_cfg(struct flashctx *flash, const struct flashprog_wp_cfg *cfg)
 {
 	struct wp_bits bits;
-	enum flashrom_wp_result ret = FLASHROM_WP_OK;
+	enum flashprog_wp_result ret = FLASHPROG_WP_OK;
 
 	if (!chip_supported(flash))
-		ret = FLASHROM_WP_ERR_CHIP_UNSUPPORTED;
+		ret = FLASHPROG_WP_ERR_CHIP_UNSUPPORTED;
 
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = read_wp_bits(&bits, flash);
 
 	/* Set protection range */
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = set_wp_range(&bits, flash, cfg->range);
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = write_wp_bits(flash, bits);
 
 	/* Set protection mode */
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = set_wp_mode(&bits, cfg->mode);
-	if (ret == FLASHROM_WP_OK)
+	if (ret == FLASHPROG_WP_OK)
 		ret = write_wp_bits(flash, bits);
 
 	return ret;
 }
 
-enum flashrom_wp_result wp_get_available_ranges(struct flashrom_wp_ranges **list, struct flashrom_flashctx *flash)
+enum flashprog_wp_result wp_get_available_ranges(struct flashprog_wp_ranges **list, struct flashprog_flashctx *flash)
 {
 	struct wp_bits bits;
 	struct wp_range_and_bits *range_pairs = NULL;
@@ -508,23 +508,23 @@
 	size_t i;
 
 	if (!chip_supported(flash))
-		return FLASHROM_WP_ERR_CHIP_UNSUPPORTED;
+		return FLASHPROG_WP_ERR_CHIP_UNSUPPORTED;
 
-	enum flashrom_wp_result ret = read_wp_bits(&bits, flash);
-	if (ret != FLASHROM_WP_OK)
+	enum flashprog_wp_result ret = read_wp_bits(&bits, flash);
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
 	ret = get_ranges_and_wp_bits(flash, bits, &range_pairs, &count);
-	if (ret != FLASHROM_WP_OK)
+	if (ret != FLASHPROG_WP_OK)
 		return ret;
 
-	*list = calloc(1, sizeof(struct flashrom_wp_ranges));
+	*list = calloc(1, sizeof(struct flashprog_wp_ranges));
 	struct wp_range *ranges = calloc(count, sizeof(struct wp_range));
 
 	if (!(*list) || !ranges) {
 		free(*list);
 		free(ranges);
-		ret = FLASHROM_WP_ERR_OTHER;
+		ret = FLASHPROG_WP_ERR_OTHER;
 		goto out;
 	}
 	(*list)->count = count;
@@ -538,4 +538,4 @@
 	return ret;
 }
 
-/** @} */ /* end flashrom-wp */
+/** @} */ /* end flashprog-wp */
