diff --git a/Outputs/ScanTarget.hpp b/Outputs/ScanTarget.hpp
index 63be212d1..0765eef46 100644
--- a/Outputs/ScanTarget.hpp
+++ b/Outputs/ScanTarget.hpp
@@ -210,9 +210,11 @@ struct ScanTarget {
 
 		/*!
 			Defines a scan in terms of its two endpoints.
+
+			Is guaranteed to be a multiple of four bytes in size.
 		*/
-		struct Scan {
-			struct EndPoint {
+		struct alignas(4) Scan {
+			struct alignas(4) EndPoint {
 				/// Provide the coordinate of this endpoint. These are fixed point, purely fractional
 				/// numbers, relative to the scale provided in the Modals.
 				uint16_t x, y;
diff --git a/Outputs/ScanTargets/BufferingScanTarget.hpp b/Outputs/ScanTargets/BufferingScanTarget.hpp
index 1f6b40ae0..503681aa3 100644
--- a/Outputs/ScanTargets/BufferingScanTarget.hpp
+++ b/Outputs/ScanTargets/BufferingScanTarget.hpp
@@ -51,7 +51,7 @@ class BufferingScanTarget: public Outputs::Display::ScanTarget {
 
 		// Extends the definition of a Scan to include two extra fields,
 		// completing this scan's source data and destination locations.
-		struct Scan {
+		struct alignas(4) Scan {
 			Outputs::Display::ScanTarget::Scan scan;
 
 			/// Stores the y coordinate for this scan's data within the write area texture.
@@ -66,12 +66,13 @@ class BufferingScanTarget: public Outputs::Display::ScanTarget {
 		/// Defines the boundaries of a complete line of video — a 2d start and end location,
 		/// composite phase and amplitude (if relevant), the source line in the intermediate buffer
 		/// plus the start and end offsets of the area that is visible from the intermediate buffer.
-		struct Line {
-			struct EndPoint {
+		struct alignas(4) Line {
+			struct alignas(4) EndPoint {
 				uint16_t x, y;
 				uint16_t cycles_since_end_of_horizontal_retrace;
 				int16_t composite_angle;
 			} end_points[2];
+
 			uint16_t line;
 			uint8_t composite_amplitude;
 		};