diff --git a/css/art/art.css b/css/art/art.css
index 823dc50712358a9214b83de33ac234987354ec0a..68db87b3b08c1080dc3ecc5dc54c9c9ff14efd3c 100644
--- a/css/art/art.css
+++ b/css/art/art.css
@@ -13,13 +13,13 @@ img {
 }
 
 .imageRef {
+	align-items: flex-start;
+	background-color: rgba(80, 80, 80, 0.5);
+	border: 1px solid #333333;
 	display: flex;
 	flex-direction: column;
 	flex-wrap: wrap;
-	align-items: flex-start;
 	position: relative;
-	background-color: rgba(80, 80, 80, 0.5);
-	margin: 2px;
 }
 
 .tinyImg {
diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index f3e77d404fa6f40eb30debc11a0ee1f07c1f1731..2977f3da51072e7e1b4e87e3882b2b56c94703d3 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -121,15 +121,16 @@ App.Data.defaultGameStateVariables = {
 	seeArcology: 1,
 	seeAvatar: 1,
 	seeBestiality: 0,
+	seeCats: 0,
 	seeCircumcision: 1,
+	seeCustomImagesOnly: 0,
 	seeDesk: 1,
 	seeDetails: 1,
 	seeDicks: 25,
 	seeDicksAffectsPregnancy: 1,
 	seeExtreme: 0,
-	seeCats: 0,
-	seeFCNN: 1,
 	seeFaces: 1,
+	seeFCNN: 1,
 	seeHeight: 0,
 	seeHyperPreg: 0,
 	seeIllness: 1,
@@ -139,9 +140,9 @@ App.Data.defaultGameStateVariables = {
 	seeNationality: 1,
 	seePee: 1,
 	seePreg: 1,
-	seeStretching: 1,
 	seeRace: 1,
 	seeReportImages: 1,
+	seeStretching: 1,
 	seeSummaryImages: 1,
 	seeVectorArtHighlights: 1,
 	setSuperSampling: 2,
diff --git a/src/art/artJS.js b/src/art/artJS.js
index 593fd0d4991fd0738c38fd70f8103582289892c3..64ebc0a0bb7c10546e668ca8a7448e51fb84a533 100644
--- a/src/art/artJS.js
+++ b/src/art/artJS.js
@@ -79,29 +79,34 @@ App.Art.SlaveArtBatch = class {
 			return App.Art.customArtElement(artSlave.custom.image, this._artSize);
 		}
 
-		const slaveData = this._slaveArtBatch.get(artSlave.ID);
-		if (slaveData) {
-			// perform "one of batch" rendering for supported formats
-			if (V.imageChoice === 1) { /* VECTOR ART BY NOX/DEEPMURK */
-				if (slaveData.displayClass) {
-					return App.Art.vectorArtElement(artSlave, this._artSize, slaveData.displayClass);
-				} else {
-					console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`);
-				}
-			} else if (V.imageChoice === 3) { /* VECTOR ART REVAMP*/
-				if (slaveData.displayClass) {
-					return App.Art.revampedVectorArtElement(artSlave, slaveData.displayClass);
-				} else {
-					console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`);
+		if (!V.seeCustomImagesOnly) {
+			const slaveData = this._slaveArtBatch.get(artSlave.ID);
+
+			if (slaveData) {
+				// perform "one of batch" rendering for supported formats
+				if (V.imageChoice === 1) { /* VECTOR ART BY NOX/DEEPMURK */
+					if (slaveData.displayClass) {
+						return App.Art.vectorArtElement(artSlave, this._artSize, slaveData.displayClass);
+					} else {
+						console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`);
+					}
+				} else if (V.imageChoice === 3) { /* VECTOR ART REVAMP*/
+					if (slaveData.displayClass) {
+						return App.Art.revampedVectorArtElement(artSlave, slaveData.displayClass);
+					} else {
+						console.error(`Batch data unavailable for slave ID ${artSlave.ID}; ensure the slave ID is valid and preamble was written. Falling back to single-slave renderer.`);
+					}
 				}
-			}
 
-			// or render directly for unsupported formats
+				// or render directly for unsupported formats
+				return App.Art.SlaveArtElement(artSlave, this._artSize, this._UIDisplay);
+			}
+			// definitely an error, but we can handle this...just redirect to the standard single-slave renderer
+			console.error(`Requested batch render of slave ID ${artSlave.ID} which was not present in the initialization vector. Falling back to single-slave renderer.`);
 			return App.Art.SlaveArtElement(artSlave, this._artSize, this._UIDisplay);
 		}
-		// definitely an error, but we can handle this...just redirect to the standard single-slave renderer
-		console.error(`Requested batch render of slave ID ${artSlave.ID} which was not present in the initialization vector. Falling back to single-slave renderer.`);
-		return App.Art.SlaveArtElement(artSlave, this._artSize, this._UIDisplay);
+
+		return new DocumentFragment();
 	}
 };
 
@@ -119,8 +124,6 @@ App.Art.SlaveArtElement = function(artSlave, artSize, UIDisplay) {
 	const imageChoice = V.imageChoice;
 	if (artSlave.custom.image !== null && artSlave.custom.image.filename !== "") {
 		return App.Art.customArtElement(artSlave.custom.image, artSize);
-	} else if (imageChoice === 0) { /* Custom art only */
-		return new DocumentFragment();
 	} else if (imageChoice === 1) { /* VECTOR ART BY NOX/DEEPMURK */
 		return App.Art.vectorArtElement(artSlave, artSize);
 	} else if (imageChoice === 2) { /* VECTOR ART BY NOX - Pregmod Legacy Version */
diff --git a/src/endWeek/events/death.js b/src/endWeek/events/death.js
index af9ed44407ac26922287ba547ee413ace92d2c6b..e557bec98652a081c8b73c433bb2bc314074f21c 100644
--- a/src/endWeek/events/death.js
+++ b/src/endWeek/events/death.js
@@ -18,7 +18,7 @@ App.Events.SEDeath = class SEDeath extends App.Events.BaseEvent {
 	}
 
 	execute(node) {
-		const artRenderer = V.seeImages && V.seeReportImages ? new App.Art.SlaveArtBatch(V.slaveDeath.keys(), 0, 0) : null;
+		const artRenderer = V.seeImages && V.seeReportImages && (!V.seeCustomImagesOnly) ? new App.Art.SlaveArtBatch(V.slaveDeath.keys(), 0, 0) : null;
 		if (artRenderer) {
 			node.append(artRenderer.writePreamble());
 		}
diff --git a/src/gui/options/options.js b/src/gui/options/options.js
index 9799214164ceac3a100d78d10b6ce9987f8f663b..38f0c8a7d5a50de9e5d74ac9342735b9b0ae3b34 100644
--- a/src/gui/options/options.js
+++ b/src/gui/options/options.js
@@ -1116,7 +1116,7 @@ App.UI.artOptions = function() {
 	const el = new DocumentFragment();
 	let options = new App.UI.OptionsGroup();
 
-	if (V.seeImages) {
+	if (V.seeImages && !V.seeCustomImagesOnly) {
 		const art = App.UI.DOM.appendNewElement("div", el, App.Art.SlaveArtElement(BaseSlave(), 2, 0), ["imageRef", "medImg"]);
 		art.style.float = "none";
 		art.style.display = "block";
@@ -1127,97 +1127,102 @@ App.UI.artOptions = function() {
 	options.addOption("Images are", "seeImages")
 		.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
 
-	/* REMOVE THIS WARNING ONCE ART DEVELOPMENT RESUMES */
-	options.addComment('<span class="warning">All image packs are currently incomplete; some outfits will not be displayed.</span>');
-
 	if (V.seeImages > 0) {
-		const option = options.addOption("Image style is", "imageChoice")
-			.addValueList([ // Keeping the most up to date options as the first in line
-				["Elohiem's interactive WebGL", 4],
-				["Custom images only", 0],
-				["NoX/Deepmurk's vector art", 1],
-				["Revamped embedded vector art", 3],
-				["Non-embedded vector art", 2],
-				["Shokushu's rendered image pack", 5],
-			]);
-		if (V.imageChoice === 1) {
-			options.addComment("The only 2D art in somewhat recent development. Contains many outfits.");
-			options.addOption("Face artwork is", "seeFaces")
-				.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
-
-			options.addOption("Highlights on shiny clothing are", "seeVectorArtHighlights")
-				.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
+		options.addOption("Show custom images only", "seeCustomImagesOnly")
+			.addValue("Enabled", 1).addValue("Disabled", 0);
+
+		if (!V.seeCustomImagesOnly) {
+			/* REMOVE THIS WARNING ONCE ART DEVELOPMENT RESUMES */
+			options.addComment('<span class="warning">All image packs are currently incomplete; some outfits will not be displayed.</span>');
+			const option = options.addOption("Image style is", "imageChoice")
+				.addValueList([ // Keeping the most up to date options as the first in line
+					["Elohiem's interactive WebGL", 4],
+					["NoX/Deepmurk's vector art", 1],
+					["Revamped embedded vector art", 3],
+					["Non-embedded vector art", 2],
+					["Shokushu's rendered image pack", 5],
+				]);
+			if (V.imageChoice === 1) {
+				options.addComment("The only 2D art in somewhat recent development. Contains many outfits.");
+				options.addOption("Face artwork is", "seeFaces")
+					.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
+
+				options.addOption("Highlights on shiny clothing are", "seeVectorArtHighlights")
+					.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
+
+				options.addOption("Height scaling", "seeHeight")
+					.addValue("All images", 2).on().addValue("Small images", 1).addValue("Disabled", 0).off();
+
+				options.addOption("Clothing erection bulges are", "showClothingErection")
+					.addValue("Enabled", true).on().addValue("Disabled", false).off();
+			} else if (V.imageChoice === 5) {
+				options.addComment("Dead since long before the end of vanilla. You need to" +
+					" <a href='https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0' target='_blank'>download the image" +
+					" pack</a> and put the 'renders' folder into the resources/ folder where this html file is.");
+
+				options.addOption("Slave summary fetish images are", "seeMainFetishes")
+					.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
+			} else if (V.imageChoice === 3) {
+				options.addComment("This art development is dead.");
+				options.addOption("Clothing erection bulges are", "showClothingErection")
+					.addValue("Enabled", true).on().addValue("Disabled", false).off();
+			} else if (V.imageChoice === 4) {
+				options.addComment(`This art is currently (12/12/21) the most actively developed. Real time 3D models. <a href='https://mega.nz/folder/m1JQ3JAQ#2GJsM7csBBvBu0DX8SB2kA' target='_blank'> Download the WebGL art assets</a> and place the 'webgl' folder into the resources/ folder where this HTML file is.
+				Then <b>refresh</b> the page.
+				Create the resources folder if it does not exist. <span class="warning">(Android/MacOS not supported)</span>`);
+
+				let option = options.addOption("Supersampling (SSAA)", "setSuperSampling");
+				for (const value of [0.25, 0.5, 1, 2, 4]) {
+					option.addValue(`${value}`, value);
+				}
+				option.addComment("Multiplies the resolution of the render. Use a smaller factor for low-end GPU's.");
 
-			options.addOption("Height scaling", "seeHeight")
-				.addValue("All images", 2).on().addValue("Small images", 1).addValue("Disabled", 0).off();
+				option = options.addOption("Texture resolution", "setTextureResolution");
+				for (const value of [512, 1024, 2048, 4096]) {
+					option.addValue(`${value}`, value);
+				}
+				option.addComment("Refresh the page to take affect.");
+
+				options.addOption("Face culling", "setFaceCulling")
+					.addValue("Enabled", true).off().addValue("Disabled", false).on()
+					.addComment("Whether to draw the backside of the model, affects transparent surfaces such as hair. Enabling is recommended for low-end GPU's.");
+				options.addOption("Pan speed", "setPanSpeed")
+					.addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off();
+				options.addOption("Rotation speed", "setRotationSpeed")
+					.addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off();
+				options.addOption("Zoom speed", "setZoomSpeed")
+					.addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off();
+
+				options.addOption("Auto-frame", "setAutoFrame")
+					.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
+				if (V.setAutoFrame === 1) {
+					options.addOption("Default view", "setDefaultView").showTextBox()
+						.addComment("Choose a value between 0 and 1.");
+				}
+				options.addOption("Large Image size", "setImageSize").showTextBox()
+					.addComment("Recommended to be between 0.5 and 1.5.");
+				options.addOption("Ambient Occlusion", "setSSAO")
+					.addValue("Enabled", true).on().addValue("Disabled", false).off();
+				options.addOption("Shadowmapping", "setShadowMapping")
+					.addValue("Enabled", true).on().addValue("Disabled", false).off();
+				options.addOption("Tonemapping", "setTonemapping")
+					.addValue("Enabled", true).on().addValue("Disabled", false).off();
+			} else if (V.imageChoice === 2) {
+				option.addComment("This art development is dead since vanilla. Since it is not embedded, requires a separate art pack to be downloaded.");
+			}
 
-			options.addOption("Clothing erection bulges are", "showClothingErection")
-				.addValue("Enabled", true).on().addValue("Disabled", false).off();
-		} else if (V.imageChoice === 5) {
-			options.addComment("Dead since long before the end of vanilla. You need to" +
-				" <a href='https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0' target='_blank'>download the image" +
-				" pack</a> and put the 'renders' folder into the resources/ folder where this html file is.");
+			options.addOption("PA avatar art is", "seeAvatar")
+				.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
 
-			options.addOption("Slave summary fetish images are", "seeMainFetishes")
+			options.addOption("Slave images in lists are", "seeSummaryImages")
 				.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
-		} else if (V.imageChoice === 3) {
-			options.addComment("This art development is dead.");
-			options.addOption("Clothing erection bulges are", "showClothingErection")
-				.addValue("Enabled", true).on().addValue("Disabled", false).off();
-		} else if (V.imageChoice === 4) {
-			options.addComment(`This art is currently (12/12/21) the most actively developed. Real time 3D models. <a href='https://mega.nz/folder/m1JQ3JAQ#2GJsM7csBBvBu0DX8SB2kA' target='_blank'> Download the WebGL art assets</a> and place the 'webgl' folder into the resources/ folder where this HTML file is.
-			Then <b>refresh</b> the page.
-			Create the resources folder if it does not exist. <span class="warning">(Android/MacOS not supported)</span>`);
-
-			let option = options.addOption("Supersampling (SSAA)", "setSuperSampling");
-			for (const value of [0.25, 0.5, 1, 2, 4]) {
-				option.addValue(`${value}`, value);
-			}
-			option.addComment("Multiplies the resolution of the render. Use a smaller factor for low-end GPU's.");
 
-			option = options.addOption("Texture resolution", "setTextureResolution");
-			for (const value of [512, 1024, 2048, 4096]) {
-				option.addValue(`${value}`, value);
-			}
-			option.addComment("Refresh the page to take affect.");
-
-			options.addOption("Face culling", "setFaceCulling")
-				.addValue("Enabled", true).off().addValue("Disabled", false).on()
-				.addComment("Whether to draw the backside of the model, affects transparent surfaces such as hair. Enabling is recommended for low-end GPU's.");
-			options.addOption("Pan speed", "setPanSpeed")
-				.addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off();
-			options.addOption("Rotation speed", "setRotationSpeed")
-				.addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off();
-			options.addOption("Zoom speed", "setZoomSpeed")
-				.addValue("0.25", 0.25).off().addValue("0.5", 0.5).off().addValue("1", 1).on().addValue("2", 2).off().addValue("4", 4).off();
-
-			options.addOption("Auto-frame", "setAutoFrame")
+			options.addOption("Slave images in the weekly report are", "seeReportImages")
 				.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
-			if (V.setAutoFrame === 1) {
-				options.addOption("Default view", "setDefaultView").showTextBox()
-					.addComment("Choose a value between 0 and 1.");
-			}
-			options.addOption("Large Image size", "setImageSize").showTextBox()
-				.addComment("Recommended to be between 0.5 and 1.5.");
-			options.addOption("Ambient Occlusion", "setSSAO")
-				.addValue("Enabled", true).on().addValue("Disabled", false).off();
-			options.addOption("Shadowmapping", "setShadowMapping")
-				.addValue("Enabled", true).on().addValue("Disabled", false).off();
-			options.addOption("Tonemapping", "setTonemapping")
-				.addValue("Enabled", true).on().addValue("Disabled", false).off();
-		} else if (V.imageChoice === 2) {
-			option.addComment("This art development is dead since vanilla. Since it is not embedded, requires a separate art pack to be downloaded.");
 		}
+	}
 
-		options.addOption("PA avatar art is", "seeAvatar")
-			.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
-
-		options.addOption("Slave images in lists are", "seeSummaryImages")
-			.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
 
-		options.addOption("Slave images in the weekly report are", "seeReportImages")
-			.addValue("Enabled", 1).on().addValue("Disabled", 0).off();
-	}
 	el.append(options.render());
 	return el;
 };
diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js
index 6cc2e4c4a2d85d79bc0b06a5858e585044ecafc7..935ad0682be9fbd760154bf8867eb6ab1c82d285 100644
--- a/src/js/slaveListing.js
+++ b/src/js/slaveListing.js
@@ -132,10 +132,9 @@ App.UI.SlaveList.render = function() {
 		}
 		const slave = slaveStateById(id);
 
-		if (batchRenderer) {
+		if (batchRenderer && (!V.seeCustomImagesOnly || (V.seeCustomImagesOnly && slave.custom.image))) {
 			let imgDiv = document.createElement("div");
-			imgDiv.classList.add("imageRef");
-			imgDiv.classList.add("smlImg");
+			imgDiv.classList.add("imageRef", "smlImg", "margin-right");
 			imgDiv.appendChild(batchRenderer.render(slave));
 			res.appendChild(imgDiv);
 		}