diff --git a/Storage/Tape/Formats/TZX.cpp b/Storage/Tape/Formats/TZX.cpp
index 6814b8bcd..44596f16f 100644
--- a/Storage/Tape/Formats/TZX.cpp
+++ b/Storage/Tape/Formats/TZX.cpp
@@ -56,12 +56,14 @@ void TZX::get_next_pulses() {
 			return;
 		}
 
+//		printf("TZX %ld\n", ftell(file_));
 		switch(chunk_id) {
 			case 0x10:	get_standard_speed_data_block();	break;
 			case 0x11:	get_turbo_speed_data_block();		break;
 			case 0x12:	get_pure_tone_data_block();			break;
 			case 0x13:	get_pulse_sequence();				break;
 			case 0x19:	get_generalised_data_block();		break;
+			case 0x20:	get_pause();						break;
 
 			case 0x30: {
 				// Text description. Ripe for ignoring.
@@ -183,7 +185,10 @@ void TZX::get_turbo_speed_data_block() {
 	__unused uint16_t length_of_pilot_tone = fgetc16le();
 	__unused uint8_t number_of_bits_in_final_byte = (uint8_t)fgetc(file_);
 	__unused uint16_t pause_after_block = fgetc16le();
-	uint16_t data_length = fgetc16le();
+	long data_length = fgetc16le();
+	data_length |= (long)(fgetc(file_) << 16);
+
+	printf("Skipping %lu bytes of turbo speed data\n", data_length);
 
 	// TODO output as described
 	fseek(file_, data_length, SEEK_CUR);
@@ -203,6 +208,15 @@ void TZX::get_pulse_sequence() {
 	}
 }
 
+void TZX::get_pause() {
+	uint16_t duration = fgetc16le();
+	if(!duration) {
+		// TODO (maybe): post a 'pause the tape' suggestion
+	} else {
+		post_gap(duration);
+	}
+}
+
 #pragma mark - Output
 
 void TZX::post_pulse(unsigned int length) {
diff --git a/Storage/Tape/Formats/TZX.hpp b/Storage/Tape/Formats/TZX.hpp
index d0a3eedfd..97c5916b4 100644
--- a/Storage/Tape/Formats/TZX.hpp
+++ b/Storage/Tape/Formats/TZX.hpp
@@ -42,6 +42,7 @@ class TZX: public PulseQueuedTape, public Storage::FileHolder {
 		void get_pure_tone_data_block();
 		void get_pulse_sequence();
 		void get_generalised_data_block();
+		void get_pause();
 
 		void get_generalised_segment(uint32_t output_symbols, uint8_t max_pulses_per_symbol, uint8_t number_of_symbols, bool is_data);