diff --git a/contrib/single_file_transcoder/README.md b/contrib/single_file_transcoder/README.md
index 9923dd6..8f7e1a8 100644
--- a/contrib/single_file_transcoder/README.md
+++ b/contrib/single_file_transcoder/README.md
@@ -22,4 +22,4 @@
 
 Because all it now takes to support Basis Universal is the addition of a single file, two if using the header, with no configuration or further build steps (the out-of-the-box defaults tailor the included formats for various platforms). 
 
-The library is small, adding, for example, around 250kB to an Emscripten compiled WebAssembly project (with transcoding disabled for BC7 and ATC; disabling ASTC will remove a further 64kB, and `gzip` will approximately half the `wasm` file).
+The library is small, adding, for example, 249kB to an Emscripten compiled WebAssembly project (with transcoding disabled for BC7 and ATC; disabling ASTC will remove a further 64kB, and `gzip` will approximately half the `wasm` file).
diff --git a/contrib/single_file_transcoder/basisutranslib-in.cpp b/contrib/single_file_transcoder/basisutranslib-in.cpp
index 43fe0fd..783df8c 100644
--- a/contrib/single_file_transcoder/basisutranslib-in.cpp
+++ b/contrib/single_file_transcoder/basisutranslib-in.cpp
@@ -10,28 +10,24 @@
 
 /*
  * Transcoder build options for known platforms (iOS has ETC, ASTC and PVRTC;
- * Emscripten adds DXT to iOS's options; Android adds PVRTC2 to Emscripten's
- * options; other platforms build all except BC7 mode 6 and FXT1).
+ * Emscripten and Android are the same as iOS plus DXT; other platforms build
+ * all except BC7 mode 6).
  * 
  * See https://github.com/BinomialLLC/basis_universal#shrinking-the-transcoders-compiled-size
  */
 #ifdef __APPLE__
-	#include <TargetConditionals.h>
+#include <TargetConditionals.h>
 #endif
 #if TARGET_OS_IPHONE
-	#define BASISD_SUPPORT_DXT1  0
-	#define BASISD_SUPPORT_DXT5A 0
+#define BASISD_SUPPORT_DXT1  0
+#define BASISD_SUPPORT_DXT5A 0
 #endif
 #if TARGET_OS_IPHONE || defined(__EMSCRIPTEN__) || defined(__ANDROID__)
-	#define BASISD_SUPPORT_BC7 0
-	#define BASISD_SUPPORT_ATC 0
-	#ifndef __ANDROID__
-		#define BASISD_SUPPORT_PVRTC2 0
-	#endif
+#define BASISD_SUPPORT_BC7 0
+#define BASISD_SUPPORT_ATC 0
 #else
-	#define BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY 0
+#define BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY 0
 #endif
-#define BASISD_SUPPORT_FXT1 0
 
 #include "basisu_transcoder.cpp"
 
@@ -60,7 +56,7 @@
 	BASISU_NOTE_UNUSED(basist::MAX_SELECTOR_HISTORY_BUF_SIZE);
 #if BASISD_SUPPORT_ETC2_EAC_A8
 	// Unused but only when building with EAC
-	BASISU_NOTE_UNUSED(basist::g_eac_modifier_table);
+	BASISU_NOTE_UNUSED(basist::g_eac_a8_modifier_table);
 #endif
 #if BASISD_SUPPORT_PVRTC1
 	// Unused but only when building with PVRTC
diff --git a/contrib/single_file_transcoder/examples/emscripten.cpp b/contrib/single_file_transcoder/examples/emscripten.cpp
index eaf519c..c04dd3a 100644
--- a/contrib/single_file_transcoder/examples/emscripten.cpp
+++ b/contrib/single_file_transcoder/examples/emscripten.cpp
@@ -5,7 +5,7 @@
  * \n
  * Compile using:
  * \code
- *	export CC_FLAGS="-std=c++11 -Wall -Wextra -Werror -Os -g0 -flto --llvm-lto 3 -fno-exceptions -fno-rtti -lGL -DNDEBUG=1"
+ *	export CC_FLAGS="-Wall -Wextra -Werror -Os -g0 -flto --llvm-lto 3 -fno-exceptions -fno-rtti -lGL -DNDEBUG=1"
  *	export EM_FLAGS="-s ENVIRONMENT=web -s WASM=1 --shell-file shell.html --closure 1"
  *	emcc $CC_FLAGS $EM_FLAGS -o out.html emscripten.cpp
  * \endcode
@@ -1993,8 +1993,8 @@
 						 || GL_HAS_EXT(ctx,        "WEBGL_compressed_texture_pvrtc");
 	if (pvr) {
 		return (alpha)
-			? transcoder_texture_format::cTFPVRTC1_4_RGBA
-			: transcoder_texture_format::cTFPVRTC1_4_RGB;
+			? cTFPVRTC1_4_RGBA // 9
+			: cTFPVRTC1_4_RGB; // 8
 	}
 #endif
 #if BASISD_SUPPORT_ASTC || !defined(BASISD_SUPPORT_ASTC)
@@ -2004,7 +2004,7 @@
 	 */
 	static bool const astc = GL_HAS_EXT(ctx, "WEBGL_compressed_texture_astc");
 	if (astc) {
-		return transcoder_texture_format::cTFASTC_4x4_RGBA;
+		return cTFASTC_4x4; // 10
 	}
 #endif
 #if BASISD_SUPPORT_DXT1 || !defined(BASISD_SUPPORT_DXT1)
@@ -2017,8 +2017,8 @@
 						 || GL_HAS_EXT(ctx, "WEBKIT_WEBGL_compressed_texture_s3tc");
 	if (dxt) {
 		return (alpha)
-			? transcoder_texture_format::cTFBC3_RGBA
-			: transcoder_texture_format::cTFBC1_RGB;
+			? cTFBC3  // 3
+			: cTFBC1; // 2
 	}
 #endif
 #if BASISD_SUPPORT_ETC2_EAC_A8 || !defined(BASISD_SUPPORT_ETC2_EAC_A8)
@@ -2028,8 +2028,8 @@
 	static bool const etc2 = GL_HAS_EXT(ctx, "WEBGL_compressed_texture_etc");
 	if (etc2) {
 		return (alpha)
-			? transcoder_texture_format::cTFETC2_RGBA
-			: transcoder_texture_format::cTFETC1_RGB;
+			? cTFETC2  // 1
+			: cTFETC1; // 0
 	}
 #endif
 	/*
@@ -2039,12 +2039,12 @@
 	 */
 	static bool const etc1 = GL_HAS_EXT(ctx, "WEBGL_compressed_texture_etc1");
 	if (etc1 && !alpha) {
-		return transcoder_texture_format::cTFETC1_RGB;
+		return cTFETC1; // 0
 	}
 	/*
 	 * We choose 8888 over 4444 and 565 (in the hope that is is never chosen).
 	 */
-	return transcoder_texture_format::cTFRGBA32;
+	return cTFRGBA32; // 13
 }
 
 /**
@@ -2058,23 +2058,23 @@
  */
 static GLenum toGlType(transcoder_texture_format const type) {
 	switch (type) {
-	case transcoder_texture_format::cTFETC1_RGB:
+	case cTFETC1:
 		return GL_ETC1_RGB8_OES;
-	case transcoder_texture_format::cTFETC2_RGBA:
+	case cTFETC2:
 		return GL_COMPRESSED_RGBA8_ETC2_EAC;
-	case transcoder_texture_format::cTFBC1_RGB:
+	case cTFBC1:
 		return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
-	case transcoder_texture_format::cTFBC3_RGBA:
+	case cTFBC3:
 		return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
-	case transcoder_texture_format::cTFPVRTC1_4_RGB:
+	case cTFPVRTC1_4_RGB:
 		return GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
-	case transcoder_texture_format::cTFPVRTC1_4_RGBA:
+	case cTFPVRTC1_4_RGBA:
 		return GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
-	case transcoder_texture_format::cTFASTC_4x4_RGBA:
+	case cTFASTC_4x4:
 		return GL_COMPRESSED_RGBA_ASTC_4x4_KHR;
-	case transcoder_texture_format::cTFRGBA32:
+	case cTFRGBA32:
 		return GL_UNSIGNED_BYTE;
-	case transcoder_texture_format::cTFRGB565:
+	case cTFRGB565:
 		return GL_UNSIGNED_SHORT_5_6_5;
 	default:
 		return GL_UNSIGNED_SHORT_4_4_4_4;
@@ -2116,21 +2116,20 @@
 						success = false;
 						if (transcoder.get_image_level_desc(data, size, 0, level, descW, descH, blocks)) {
 							uint32_t decSize;
-							if (type == transcoder_texture_format::cTFPVRTC1_4_RGB ||
-								type == transcoder_texture_format::cTFPVRTC1_4_RGBA)
-							{
+							if (type == cTFPVRTC1_4_RGB || type == cTFPVRTC1_4_RGBA) {
 								decSize = (std::max(8U, (descW + 3) & ~3) *
 										   std::max(8U, (descH + 3) & ~3) * 4 + 7) / 8;
 							} else {
 								decSize = basis_get_bytes_per_block(type) * blocks;
 							}
+							
 							if (void* decBuf = malloc(decSize)) {
-								if (type >= transcoder_texture_format::cTFTotalTextureFormats) {
+								if (type >= cTFTotalBlockTextureFormats) {
 									// note that blocks becomes total number of pixels for RGB/RGBA
 									blocks = descW * descH;
 								}
 								if (transcoder.transcode_image_level(data, size, 0, level, decBuf, blocks, type)) {
-									if (type < transcoder_texture_format::cTFTotalTextureFormats) {
+									if (type < cTFTotalBlockTextureFormats) {
 										glCompressedTexImage2D(GL_TEXTURE_2D, level,
 											toGlType(type), descW, descH, 0, decSize, decBuf);
 									} else {
