diff --git a/firmware/application/apps/lge_app.cpp b/firmware/application/apps/lge_app.cpp
index 265a20e5d4dfd16eaacd4b4b4cf4c5731a3b6dc7..c1f4ea0f809e55306874e0476109990e962d632d 100644
--- a/firmware/application/apps/lge_app.cpp
+++ b/firmware/application/apps/lge_app.cpp
@@ -240,7 +240,6 @@ void LGEView::start_tx() {
 		tx_view.set_dirty();
 	}
 	transmitter_model.set_sampling_rate(2280000);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 
diff --git a/firmware/application/apps/ui_adsb_tx.cpp b/firmware/application/apps/ui_adsb_tx.cpp
index 5054f258d265c8ef925c5ac9a6e33532bcf6611d..198d229590b31806dae3b7a1e873f48c328107f3 100644
--- a/firmware/application/apps/ui_adsb_tx.cpp
+++ b/firmware/application/apps/ui_adsb_tx.cpp
@@ -310,7 +310,6 @@ void ADSBTxView::start_tx() {
 	generate_frames();
 	
 	transmitter_model.set_sampling_rate(4000000U);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(10000000);
 	transmitter_model.enable();
 	
diff --git a/firmware/application/apps/ui_aprs_tx.cpp b/firmware/application/apps/ui_aprs_tx.cpp
index efdb916de20b37fa1d01c83451370b9db064da18..87ff69278565047e391dad2919455579e6dc63ea 100644
--- a/firmware/application/apps/ui_aprs_tx.cpp
+++ b/firmware/application/apps/ui_aprs_tx.cpp
@@ -58,7 +58,6 @@ void APRSTXView::start_tx() {
 	
 	transmitter_model.set_tuning_frequency(persistent_memory::tuned_frequency());
 	transmitter_model.set_sampling_rate(AFSK_TX_SAMPLERATE);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 	
@@ -108,7 +107,10 @@ APRSTXView::APRSTXView(NavigationView& nav) {
 	};
 	
 	tx_view.on_edit_frequency = [this, &nav]() {
-		return;
+		auto new_view = nav.push<FrequencyKeypadView>(receiver_model.tuning_frequency());
+		new_view->on_changed = [this](rf::Frequency f) {
+			receiver_model.set_tuning_frequency(f);
+		};
 	};
 	
 	tx_view.on_start = [this]() {
diff --git a/firmware/application/apps/ui_bht_tx.cpp b/firmware/application/apps/ui_bht_tx.cpp
index acc75f8fe8d2e2872294568002e30d75163cc754..6021a240e7c22674644682357d48a1326b7be9e3 100644
--- a/firmware/application/apps/ui_bht_tx.cpp
+++ b/firmware/application/apps/ui_bht_tx.cpp
@@ -37,7 +37,6 @@ void BHTView::focus() {
 void BHTView::start_tx() {
 	baseband::shutdown();
 	
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	
 	if (target_system == XYLOS) {
diff --git a/firmware/application/apps/ui_coasterp.cpp b/firmware/application/apps/ui_coasterp.cpp
index 0d5668e3eb44b02459da091d969c4f75b9885f41..cd918dda5a2b99498f5152a0ad349f5cdd835fcf 100644
--- a/firmware/application/apps/ui_coasterp.cpp
+++ b/firmware/application/apps/ui_coasterp.cpp
@@ -68,7 +68,6 @@ void CoasterPagerView::start_tx() {
 	generate_frame();
 	
 	transmitter_model.set_sampling_rate(2280000);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 
diff --git a/firmware/application/apps/ui_keyfob.cpp b/firmware/application/apps/ui_keyfob.cpp
index f6e6fdb29eadd490389ecf3f58b2cd2374486a4d..6492cd6be368aa91160d662244225c9fe2a4801b 100644
--- a/firmware/application/apps/ui_keyfob.cpp
+++ b/firmware/application/apps/ui_keyfob.cpp
@@ -186,7 +186,6 @@ void KeyfobView::start_tx() {
 	size_t bitstream_length = generate_frame();
 
 	transmitter_model.set_sampling_rate(OOK_SAMPLERATE);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 	
diff --git a/firmware/application/apps/ui_lcr.cpp b/firmware/application/apps/ui_lcr.cpp
index 0944fbe65caa58fa19b316e41fe6ffe135cddf79..e664f82ee9dbb316af207f9515282971fe265e29 100644
--- a/firmware/application/apps/ui_lcr.cpp
+++ b/firmware/application/apps/ui_lcr.cpp
@@ -130,7 +130,6 @@ void LCRView::start_tx(const bool scan) {
 
 	transmitter_model.set_tuning_frequency(persistent_memory::tuned_frequency());
 	transmitter_model.set_sampling_rate(AFSK_TX_SAMPLERATE);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 
diff --git a/firmware/application/apps/ui_mictx.cpp b/firmware/application/apps/ui_mictx.cpp
index fba9d5e7ea1e21c9ea86038c5f18fb3ab293abdd..8145b28eca4b82c81cf0095b8017ecb5e872aa0d 100644
--- a/firmware/application/apps/ui_mictx.cpp
+++ b/firmware/application/apps/ui_mictx.cpp
@@ -63,7 +63,6 @@ void MicTXView::set_tx(bool enable) {
 	if (enable) {
 		transmitting = true;
 		configure_baseband();
-		transmitter_model.set_rf_amp(true);
 		transmitter_model.enable();
 		portapack::pin_i2s0_rx_sda.mode(3);		// This is already done in audio::init but gets changed by the CPLD overlay reprogramming
 		//gpio_tx.write(1);
@@ -75,7 +74,6 @@ void MicTXView::set_tx(bool enable) {
 		} else {
 			transmitting = false;
 			configure_baseband();
-			transmitter_model.set_rf_amp(false);
 			transmitter_model.disable();
 			//gpio_tx.write(0);
 			//led_tx.off();
@@ -207,7 +205,6 @@ MicTXView::MicTXView(
 	field_va_decay.set_value(1000);
 	
 	transmitter_model.set_sampling_rate(sampling_rate);
-	transmitter_model.set_rf_amp(false);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	
 	set_tx(false);
diff --git a/firmware/application/apps/ui_morse.cpp b/firmware/application/apps/ui_morse.cpp
index 1ccb24bb4d4c6f651010e3683ee60f3abfbe1b8b..a9b997b375001adb378f0c04e7d90443ffb6a109 100644
--- a/firmware/application/apps/ui_morse.cpp
+++ b/firmware/application/apps/ui_morse.cpp
@@ -100,7 +100,6 @@ bool MorseView::start_tx() {
 	progressbar.set_max(symbol_count);
 	
 	transmitter_model.set_sampling_rate(1536000U);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 	
diff --git a/firmware/application/apps/ui_pocsag_tx.cpp b/firmware/application/apps/ui_pocsag_tx.cpp
index ae57acad4765e47ea6f2ad125872a17bb5dcb266..316cf17d360606bd17d6bcd9d4ad742010ab73d3 100644
--- a/firmware/application/apps/ui_pocsag_tx.cpp
+++ b/firmware/application/apps/ui_pocsag_tx.cpp
@@ -79,9 +79,6 @@ 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();
 	
diff --git a/firmware/application/apps/ui_rds.cpp b/firmware/application/apps/ui_rds.cpp
index e62e15294251b93b9e474d9bfd72fdcc0563f8d5..db9e2d2a417857d279349433ba009c39d7be8646 100644
--- a/firmware/application/apps/ui_rds.cpp
+++ b/firmware/application/apps/ui_rds.cpp
@@ -204,7 +204,6 @@ void RDSView::start_tx() {
 		frame_datetime.clear();
 	
 	transmitter_model.set_sampling_rate(2280000U);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 	
diff --git a/firmware/application/apps/ui_sstvtx.cpp b/firmware/application/apps/ui_sstvtx.cpp
index 01bdb3c7a80c9e06890022f35d519a59a726fe46..4943315d2388fae91c985ae35488ddbc0c0d27e7 100644
--- a/firmware/application/apps/ui_sstvtx.cpp
+++ b/firmware/application/apps/ui_sstvtx.cpp
@@ -166,7 +166,6 @@ void SSTVTXView::start_tx() {
 	prepare_scanline();		// Preload one scanline
 	
 	transmitter_model.set_sampling_rate(3072000U);
-	transmitter_model.set_rf_amp(true);
 	transmitter_model.set_baseband_bandwidth(1750000);
 	transmitter_model.enable();
 	
diff --git a/firmware/application/transmitter_model.hpp b/firmware/application/transmitter_model.hpp
index ef343218f82990bfcd285b6584ef049260bead46..d6715068820bda2364404e0569fc6baf508e68ac 100644
--- a/firmware/application/transmitter_model.hpp
+++ b/firmware/application/transmitter_model.hpp
@@ -66,7 +66,7 @@ public:
 
 private:
 	bool enabled_ { false };
-	bool rf_amp_ { true };
+	bool rf_amp_ { false };
 	int32_t lna_gain_db_ { 0 };
 	uint32_t channel_bandwidth_ { 1 };
 	uint32_t baseband_bandwidth_ { max2837::filter::bandwidth_minimum };
diff --git a/firmware/application/ui/ui_transmitter.cpp b/firmware/application/ui/ui_transmitter.cpp
index bfc5c6e58008db4c7a61c3ee68eef81decab174a..acc305746942865f6df486a47968cff7ce1b12a8 100644
--- a/firmware/application/ui/ui_transmitter.cpp
+++ b/firmware/application/ui/ui_transmitter.cpp
@@ -33,24 +33,6 @@ using namespace portapack;
 
 namespace ui {
 
-/* TXGainField **********************************************************/
-
-TXGainField::TXGainField(
-	Point parent_pos
-) : NumberField {
-		parent_pos, 2,
-		{ max2837::tx::gain_db_range.minimum, max2837::tx::gain_db_range.maximum },
-		max2837::tx::gain_db_step,
-		' ',
-	}
-{
-	set_value(transmitter_model.tx_gain());
-
-	on_change = [](int32_t v) {
-		transmitter_model.set_tx_gain(v);
-	};
-}
-
 /* TransmitterView *******************************************************/
 
 void TransmitterView::paint(Painter& painter) {
@@ -79,6 +61,34 @@ void TransmitterView::on_channel_bandwidth_changed(uint32_t channel_bandwidth) {
 	transmitter_model.set_channel_bandwidth(channel_bandwidth);
 }
 
+void TransmitterView::on_tx_gain_changed(int32_t tx_gain) {
+	transmitter_model.set_tx_gain(tx_gain);
+	update_gainlevel_styles();
+}
+
+void TransmitterView::on_tx_amp_changed(bool rf_amp) {
+	transmitter_model.set_rf_amp(rf_amp);
+	update_gainlevel_styles();
+}
+
+void TransmitterView::update_gainlevel_styles() {
+	const Style *new_style_ptr = NULL;
+	int8_t tot_gain = transmitter_model.tx_gain() + (transmitter_model.rf_amp() ? 14 : 0);
+	
+	if(tot_gain > POWER_THRESHOLD_HIGH) {
+		new_style_ptr = &style_power_high;
+	} else if(tot_gain > POWER_THRESHOLD_MED) {
+		new_style_ptr = &style_power_med;
+	} else if(tot_gain > POWER_THRESHOLD_LOW) {
+		new_style_ptr = &style_power_low;
+	}
+
+	field_gain.set_style(new_style_ptr);
+	text_gain.set_style(new_style_ptr);
+	field_amp.set_style(new_style_ptr);
+	text_amp.set_style(new_style_ptr);
+}
+
 void TransmitterView::set_transmitting(const bool transmitting) {
 	if (transmitting) {
 		button_start.set_text("STOP");
@@ -93,6 +103,11 @@ void TransmitterView::set_transmitting(const bool transmitting) {
 
 void TransmitterView::on_show() {
 	field_frequency.set_value(transmitter_model.tuning_frequency());
+
+	field_gain.set_value(transmitter_model.tx_gain());
+	field_amp.set_value(transmitter_model.rf_amp() ? 14 : 0);
+
+	update_gainlevel_styles();
 }
 
 void TransmitterView::focus() {
@@ -109,7 +124,9 @@ TransmitterView::TransmitterView(
 		&field_frequency,
 		&text_gain,
 		&field_gain,
-		&button_start
+		&button_start,
+		&text_amp,
+		&field_amp,
 	});
 	
 	set_transmitting(false);
@@ -140,10 +157,15 @@ TransmitterView::TransmitterView(
 		if (on_edit_frequency)
 			on_edit_frequency();
 	};
-	field_frequency.on_change = [this](rf::Frequency f) {
-		transmitter_model.set_tuning_frequency(f);
+
+	field_gain.on_change = [this](uint32_t tx_gain) {
+		on_tx_gain_changed(tx_gain);
 	};
 	
+	field_amp.on_change = [this](uint32_t rf_amp) {
+		on_tx_amp_changed((bool) rf_amp);
+	};
+
 	button_start.on_select = [this](Button&){
 		if (transmitting_) {
 			if (on_stop)
diff --git a/firmware/application/ui/ui_transmitter.hpp b/firmware/application/ui/ui_transmitter.hpp
index de21f993128d21cc4fd24ae487b5b4947bf5f430..da5ce7998aa7d653d2e94b5ec79016c64afbc6de 100644
--- a/firmware/application/ui/ui_transmitter.hpp
+++ b/firmware/application/ui/ui_transmitter.hpp
@@ -37,6 +37,10 @@
 #include <algorithm>
 #include <functional>
 
+#define POWER_THRESHOLD_HIGH	47
+#define POWER_THRESHOLD_MED		38
+#define POWER_THRESHOLD_LOW		17
+
 namespace ui {
 
 class TXGainField : public NumberField {
@@ -83,7 +87,22 @@ private:
 		.background = Color::black(),
 		.foreground = Color::dark_grey(),
 	};
-	
+	const Style style_power_low {
+		.font = font::fixed_8x16,
+		.background = Color::black(),
+		.foreground = Color::yellow(),
+	};
+	const Style style_power_med {
+		.font = font::fixed_8x16,
+		.background = Color::black(),
+		.foreground = Color::orange(),
+	};
+	const Style style_power_high {
+		.font = font::fixed_8x16,
+		.background = Color::black(),
+		.foreground = Color::red(),
+	};
+
 	bool lock_ { false };
 	bool transmitting_ { false };
 	
@@ -95,10 +114,15 @@ private:
 		{ 0, 3 * 8, 5 * 8, 1 * 16 },
 		"Gain:"
 	};
-	TXGainField field_gain {
-		{ 5 * 8, 3 * 8 }
-	};
 	
+	NumberField field_gain {
+		{ 5 * 8, 3 * 8 },
+		2,
+		{ max2837::tx::gain_db_range.minimum, max2837::tx::gain_db_range.maximum },
+		max2837::tx::gain_db_step,
+		' '
+	};
+
 	Text text_bw {
 		{ 11 * 8, 1 * 8, 9 * 8, 1 * 16 },
 		"BW:   kHz"
@@ -111,6 +135,19 @@ private:
 		' '
 	};
 	
+	Text text_amp {
+		{ 11 * 8, 3 * 8, 5 * 8, 1 * 16 },
+		"Amp:"
+	};
+
+	NumberField field_amp {
+		{ 16 * 8, 3 * 8 },
+		2,
+		{ 0, 14 },
+		14,
+		' '
+	};
+
 	Button button_start {
 		{ 21 * 8, 1 * 8, 9 * 8, 32 },
 		"START"
@@ -118,6 +155,10 @@ private:
 
 	void on_tuning_frequency_changed(rf::Frequency f);
 	void on_channel_bandwidth_changed(uint32_t channel_bandwidth);
+	void on_tx_gain_changed(int32_t tx_gain);
+	void on_tx_amp_changed(bool rf_amp);
+
+	void update_gainlevel_styles(void);
 };
 
 } /* namespace ui */