diff --git a/firmware/application/apps/pocsag_app.cpp b/firmware/application/apps/pocsag_app.cpp
index f0385d2ddde2a505c3021efde3ca6cef753dcd07..bf9d88d83acd1ab7c07f9bed4cb7431a11cfaf92 100644
--- a/firmware/application/apps/pocsag_app.cpp
+++ b/firmware/application/apps/pocsag_app.cpp
@@ -69,6 +69,7 @@ POCSAGAppView::POCSAGAppView(NavigationView& nav) {
 		&field_vga,
 		&field_frequency,
 		&options_bitrate,
+		&options_phase,
 		&check_log,
 		&check_ignore,
 		&sym_ignore,
@@ -99,10 +100,13 @@ POCSAGAppView::POCSAGAppView(NavigationView& nav) {
 	};
 	
 	options_bitrate.on_change = [this](size_t, OptionsField::value_t v) {
-		on_bitrate_changed(v);
+		on_config_changed(v, options_phase.selected_index_value());
 	};
 	options_bitrate.set_selected_index(1);	// 1200bps
 	
+	options_phase.on_change = [this](size_t, OptionsField::value_t v) {
+		on_config_changed(options_bitrate.selected_index_value(),v);
+	};
 	check_ignore.set_value(ignore);
 	check_ignore.on_select = [this](Checkbox&, bool v) {
 		ignore = v;
@@ -197,8 +201,8 @@ void POCSAGAppView::on_packet(const POCSAGPacketMessage * message) {
 		logger->log_raw_data(message->packet, target_frequency());
 }
 
-void POCSAGAppView::on_bitrate_changed(const uint32_t new_bitrate) {
-	baseband::set_pocsag(pocsag_bitrates[new_bitrate]);
+void POCSAGAppView::on_config_changed(const uint32_t new_bitrate, bool new_phase) {
+	baseband::set_pocsag(pocsag_bitrates[new_bitrate], new_phase);
 }
 
 void POCSAGAppView::set_target_frequency(const uint32_t new_value) {
diff --git a/firmware/application/apps/pocsag_app.hpp b/firmware/application/apps/pocsag_app.hpp
index ace892d02a0e1af8e4ff6c980cba0ccd28ada9b9..58fef2429744c3d7a26cacb5858e2173b6141107 100644
--- a/firmware/application/apps/pocsag_app.hpp
+++ b/firmware/application/apps/pocsag_app.hpp
@@ -93,6 +93,14 @@ private:
 			{ "2400bps", 2 }
 		}
 	};
+	OptionsField options_phase {
+		{ 6 * 8, 21 },
+		1,
+		{
+			{ "P", 0 },
+			{ "N", 1 },
+		}
+	};
 	Checkbox check_log {
 		{ 22 * 8, 21 },
 		3,
@@ -124,7 +132,7 @@ private:
 
 	void on_packet(const POCSAGPacketMessage * message);
 
-	void on_bitrate_changed(const uint32_t new_bitrate);
+	void on_config_changed(const uint32_t new_bitrate, const bool phase);
 
 	uint32_t target_frequency() const;
 	void set_target_frequency(const uint32_t new_value);
diff --git a/firmware/application/apps/ui_pocsag_tx.cpp b/firmware/application/apps/ui_pocsag_tx.cpp
index 316cf17d360606bd17d6bcd9d4ad742010ab73d3..56ced719c2cec915e99161f2dcafd248ccb76730 100644
--- a/firmware/application/apps/ui_pocsag_tx.cpp
+++ b/firmware/application/apps/ui_pocsag_tx.cpp
@@ -71,6 +71,7 @@ bool POCSAGTXView::start_tx() {
 			return false;
 		}
 	}
+	MessageType phase = (MessageType)options_phase.selected_index_value();
 	
 	pocsag_encode(type, BCH_code, options_function.selected_index_value(), message, address, codewords);
 	
@@ -79,6 +80,9 @@ bool POCSAGTXView::start_tx() {
 	progressbar.set_max(total_frames);
 	
 	transmitter_model.set_sampling_rate(2280000);
+	transmitter_model.set_rf_amp(true);
+	transmitter_model.set_lna(40);
+	transmitter_model.set_vga(40);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 	
@@ -86,7 +90,11 @@ bool POCSAGTXView::start_tx() {
 	
 	bi = 0;
 	for (i = 0; i < codewords.size(); i++) {
+		if (phase == 0)
+			codeword = ~(codewords[i]);
+		else
 		codeword = codewords[i];
+		
 		data_ptr[bi++] = (codeword >> 24) & 0xFF;
 		data_ptr[bi++] = (codeword >> 16) & 0xFF;
 		data_ptr[bi++] = (codeword >> 8) & 0xFF;
@@ -126,6 +134,7 @@ POCSAGTXView::POCSAGTXView(
 		&field_address,
 		&options_type,
 		&options_function,
+		&options_phase,
 		&text_message,
 		&button_message,
 		&progressbar,
diff --git a/firmware/application/apps/ui_pocsag_tx.hpp b/firmware/application/apps/ui_pocsag_tx.hpp
index 60c3aeb9a321d391cdf9eeb5d5ba5defccf75369..0dfbc30ac8bfa4a662cb208e81a1805948d7f05c 100644
--- a/firmware/application/apps/ui_pocsag_tx.hpp
+++ b/firmware/application/apps/ui_pocsag_tx.hpp
@@ -71,6 +71,7 @@ private:
 		{ { 3 * 8, 6 * 8 }, "Address:", Color::light_grey() },
 		{ { 6 * 8, 8 * 8 }, "Type:", Color::light_grey() },
 		{ { 2 * 8, 10 * 8 }, "Function:", Color::light_grey() },
+		{ { 5 * 8, 12 * 8 }, "Phase:", Color::light_grey() },
 		{ { 0 * 8, 14 * 8 }, "Message:", Color::light_grey() }
 	};
 	
@@ -110,6 +111,15 @@ private:
 			{ "D", 3 }
 		}
 	};
+
+	OptionsField options_phase {
+		{ 11 * 8, 12 * 8 },
+		1,
+		{
+			{ "P", 0 },
+			{ "N", 1 },
+		}
+	};
 	
 	Text text_message {
 		{ 0 * 8, 16 * 8, 16 * 8, 16 },
diff --git a/firmware/application/baseband_api.cpp b/firmware/application/baseband_api.cpp
index 502047d2374993fd41cada71c15a426932dec93e..3cad982556f9600a60a7a7d745eb9ad79dc2864d 100644
--- a/firmware/application/baseband_api.cpp
+++ b/firmware/application/baseband_api.cpp
@@ -224,9 +224,10 @@ void set_fsk_data(const uint32_t stream_length, const uint32_t samples_per_bit,
 	send_message(&message);
 }
 
-void set_pocsag(const pocsag::BitRate bitrate) {
+void set_pocsag(const pocsag::BitRate bitrate, bool phase) {
 	const POCSAGConfigureMessage message {
-		bitrate
+		bitrate,
+		phase
 	};
 	send_message(&message);
 }
diff --git a/firmware/application/baseband_api.hpp b/firmware/application/baseband_api.hpp
index 9592f8ca84b2aea8d462836f22b5d091462582b6..43d0eebe58a3f8b8f653fdd4a74d2e31878d2e04 100644
--- a/firmware/application/baseband_api.hpp
+++ b/firmware/application/baseband_api.hpp
@@ -77,7 +77,7 @@ void set_ook_data(const uint32_t stream_length, const uint32_t samples_per_bit,
 					const uint32_t pause_symbols);
 void set_fsk_data(const uint32_t stream_length, const uint32_t samples_per_bit, const uint32_t shift,
 					const uint32_t progress_notice);
-void set_pocsag(const pocsag::BitRate bitrate);
+void set_pocsag(const pocsag::BitRate bitrate, bool phase);
 void set_adsb();
 void set_jammer(const bool run, const jammer::JammerType type, const uint32_t speed);
 void set_rds_data(const uint16_t message_length);
diff --git a/firmware/baseband/proc_pocsag.cpp b/firmware/baseband/proc_pocsag.cpp
index 4b5ee69b166ecca4167a5595afc02f7d1a120986..a1854286dfcab8dc9c234cfafcdd6c04ba5ee859 100644
--- a/firmware/baseband/proc_pocsag.cpp
+++ b/firmware/baseband/proc_pocsag.cpp
@@ -47,8 +47,11 @@ void POCSAGProcessor::execute(const buffer_c8_t& buffer) {
 		const int32_t audio_sample = __SSAT(sample_int, 16);
 		
 		slicer_sr <<= 1;
-		slicer_sr |= (audio_sample < 0);		// Do we need hysteresis ?
-
+		if (phase == 0)
+			slicer_sr |= (audio_sample < 0);		// Do we need hysteresis ?
+		else
+			slicer_sr |= !(audio_sample < 0);
+			
 		// Detect transitions to adjust clock
 		if ((slicer_sr ^ (slicer_sr >> 1)) & 1) {
 			if (sphase < (0x8000u - sphase_delta_half))
@@ -162,6 +165,7 @@ void POCSAGProcessor::configure(const POCSAGConfigureMessage& message) {
 	//audio_output.configure(false);
 
 	bitrate = message.bitrate;
+	phase = message.phase;
 	sphase_delta = 0x10000u * bitrate / POCSAG_AUDIO_RATE;
 	sphase_delta_half = sphase_delta / 2;			// Just for speed
 	sphase_delta_eighth = sphase_delta / 8;
diff --git a/firmware/baseband/proc_pocsag.hpp b/firmware/baseband/proc_pocsag.hpp
index 79218daf7c3ddfafdbad1e343c431951f5b67285..2f907b5e4acad89d664e5db3bdfabd3f76495abe 100644
--- a/firmware/baseband/proc_pocsag.hpp
+++ b/firmware/baseband/proc_pocsag.hpp
@@ -95,6 +95,7 @@ private:
 	bool configured = false;
 	rx_states rx_state { WAITING };
 	pocsag::BitRate bitrate { pocsag::BitRate::FSK1200 };
+	bool phase;
 	uint32_t codeword_count { 0 };
 	pocsag::POCSAGPacket packet { };
 	
diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp
index 4ca93da9fa3a8b942f3dc7aebf34ce0cb5efc678..eeecc9d09bad70541b23ad8600426bf5ff95915a 100644
--- a/firmware/common/message.hpp
+++ b/firmware/common/message.hpp
@@ -989,13 +989,16 @@ public:
 class POCSAGConfigureMessage : public Message {
 public:
 	constexpr POCSAGConfigureMessage(
-		const pocsag::BitRate bitrate
+		const pocsag::BitRate bitrate,
+		const bool phase
 	) : Message { ID::POCSAGConfigure },
-		bitrate(bitrate)
+		bitrate(bitrate),
+		phase(phase)
 	{
 	}
 
 	const pocsag::BitRate bitrate;
+	const bool phase;
 };
 
 class ADSBConfigureMessage : public Message {