diff --git a/desktop_version/src/Map.cpp b/desktop_version/src/Map.cpp
index 623b6b0a..fe040275 100644
--- a/desktop_version/src/Map.cpp
+++ b/desktop_version/src/Map.cpp
@@ -1728,10 +1728,27 @@ void mapclass::loadlevel(int rx, int ry)
 				break;
 				}
 				case 18: //Terminals
+				{
 				obj.customscript=edentity[edi].scriptname;
-				obj.createentity((edentity[edi].x*8)- ((rx-100)*40*8),(edentity[edi].y*8)- ((ry-100)*30*8)+8, 20, 1);
-				obj.createblock(5, (edentity[edi].x*8)- ((rx-100)*40*8)-8, (edentity[edi].y*8)- ((ry-100)*30*8)+8, 20, 16, 35);
+
+				int usethistile = edentity[edi].p1;
+				int usethisy = (edentity[edi].y*8)- ((ry-100)*30*8);
+
+				// This isn't a boolean: we just swap 0 and 1 around and leave the rest alone
+				if (usethistile == 0)
+				{
+					usethistile = 1; // Unflipped
+				}
+				else if (usethistile == 1)
+				{
+					usethistile = 0; // Flipped;
+					usethisy -= 8;
+				}
+
+				obj.createentity((edentity[edi].x*8)- ((rx-100)*40*8), usethisy+8, 20, usethistile);
+				obj.createblock(5, (edentity[edi].x*8)- ((rx-100)*40*8)-8, usethisy+8, 20, 16, 35);
 				break;
+				}
 				case 19: //Script Box
 				game.customscript[tempscriptbox]=edentity[edi].scriptname;
 				obj.createblock(1, (edentity[edi].x*8)- ((rx-100)*40*8), (edentity[edi].y*8)- ((ry-100)*30*8),