diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb
index 42dadf43c..1808aaab8 100644
--- a/app/models/derived_variables/lettings_log_variables.rb
+++ b/app/models/derived_variables/lettings_log_variables.rb
@@ -83,12 +83,19 @@ module DerivedVariables::LettingsLogVariables
     end
 
     set_housingneeds_fields if housingneeds?
+    if form.start_year_2025_or_later? && is_general_needs?
+      if changed_to_newbuild? && uprn.nil?
+        self.manual_address_entry_selected = true
+      end
+
+      self.manual_address_entry_selected = address_answered_without_uprn? if changed_from_newbuild?
+    end
 
     self.uprn_known = 0 if address_answered_without_uprn?
 
     if uprn_known&.zero?
       self.uprn = nil
-      if uprn_known_was == 1
+      if uprn_known_was == 1 && (rsnvac != 15 || !form.start_year_2025_or_later?)
         self.address_line1 = nil
         self.address_line2 = nil
         self.town_or_city = nil
diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb
index 920aed628..47ca80705 100644
--- a/app/models/lettings_log.rb
+++ b/app/models/lettings_log.rb
@@ -740,6 +740,14 @@ class LettingsLog < Log
     "lettings_log"
   end
 
+  def changed_to_newbuild?
+    rsnvac == 15 && rsnvac_was != 15
+  end
+
+  def changed_from_newbuild?
+    rsnvac != 15 && rsnvac_was == 15
+  end
+
 private
 
   def reset_invalid_unresolved_log_fields!
diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb
index e9493a017..9f0ddec42 100644
--- a/spec/models/lettings_log_spec.rb
+++ b/spec/models/lettings_log_spec.rb
@@ -849,6 +849,192 @@ RSpec.describe LettingsLog do
         expect(lettings_log.reload.is_la_inferred).to eq(false)
       end
     end
+
+    context "when the log changes from new build to not new build" do
+      before do
+        allow(FormHandler.instance).to receive(:current_lettings_form).and_call_original
+        Timecop.freeze(2025, 5, 1)
+        Singleton.__init__(FormHandler)
+      end
+
+      after do
+        Timecop.unfreeze
+      end
+
+      context "and the address is entered" do
+        let(:address_lettings_log) do
+          create(:lettings_log,
+                 :setup_completed,
+                 startdate: Time.zone.yesterday,
+                 mrcdate: nil,
+                 rsnvac: 15,
+                 manual_address_entry_selected: true,
+                 first_time_property_let_as_social_housing: 1,
+                 address_line1: "Address line 1",
+                 address_line2: "Address line 2",
+                 town_or_city: "Town",
+                 postcode_full: "AA1 1AA")
+        end
+
+        it "keeps the manually entered address" do
+          expect(address_lettings_log.manual_address_entry_selected).to eq(true)
+          expect(address_lettings_log.uprn_selection).to eq(nil)
+          expect(address_lettings_log.uprn_known).to eq(0)
+          expect(address_lettings_log.uprn).to eq(nil)
+          expect(address_lettings_log.address_line1).to eq("Address line 1")
+          expect(address_lettings_log.address_line2).to eq("Address line 2")
+          expect(address_lettings_log.town_or_city).to eq("Town")
+          expect(address_lettings_log.postcode_full).to eq("AA1 1AA")
+
+          address_lettings_log.update!(rsnvac: 16)
+          expect(address_lettings_log.manual_address_entry_selected).to eq(true)
+          expect(address_lettings_log.address_line1).to eq("Address line 1")
+          expect(address_lettings_log.address_line2).to eq("Address line 2")
+          expect(address_lettings_log.town_or_city).to eq("Town")
+          expect(address_lettings_log.postcode_full).to eq("AA1 1AA")
+        end
+      end
+
+      context "and the address is not entered" do
+        let(:address_lettings_log) do
+          create(:lettings_log,
+                 :setup_completed,
+                 startdate: Time.zone.yesterday,
+                 mrcdate: nil,
+                 rsnvac: 15,
+                 manual_address_entry_selected: true,
+                 first_time_property_let_as_social_housing: 1,
+                 address_line1: nil,
+                 address_line2: nil,
+                 town_or_city: nil,
+                 postcode_full: nil)
+        end
+
+        it "routes to the uprn question" do
+          expect(address_lettings_log.manual_address_entry_selected).to eq(true)
+          expect(address_lettings_log.uprn_selection).to eq(nil)
+          expect(address_lettings_log.uprn_known).to eq(0)
+          expect(address_lettings_log.uprn).to eq(nil)
+          expect(address_lettings_log.address_line1).to eq(nil)
+          expect(address_lettings_log.address_line2).to eq(nil)
+          expect(address_lettings_log.town_or_city).to eq(nil)
+          expect(address_lettings_log.postcode_full).to eq(nil)
+
+          address_lettings_log.update!(rsnvac: 16)
+          expect(address_lettings_log.manual_address_entry_selected).to eq(false)
+          expect(address_lettings_log.uprn_selection).to eq(nil)
+          expect(address_lettings_log.uprn_known).to eq(nil)
+        end
+      end
+    end
+
+    context "when the log changes from not new build to new build" do
+      before do
+        allow(FormHandler.instance).to receive(:current_lettings_form).and_call_original
+        Timecop.freeze(2025, 5, 1)
+        Singleton.__init__(FormHandler)
+      end
+
+      after do
+        Timecop.unfreeze
+      end
+
+      context "and the uprn is selected" do
+        let(:address_lettings_log) do
+          create(:lettings_log,
+                 :setup_completed,
+                 startdate: Time.zone.yesterday,
+                 mrcdate: nil,
+                 rsnvac: 17,
+                 manual_address_entry_selected: false,
+                 first_time_property_let_as_social_housing: 1,
+                 uprn_selection: "1",
+                 uprn_confirmed: "1",
+                 uprn_known: "1",
+                 uprn: "1")
+        end
+
+        it "keeps the uprn" do
+          expect(address_lettings_log.manual_address_entry_selected).to eq(false)
+          expect(address_lettings_log.uprn).to eq("1")
+          expect(address_lettings_log.address_line1).to eq("1, Test Street")
+          expect(address_lettings_log.town_or_city).to eq("Test Town")
+          expect(address_lettings_log.postcode_full).to eq("AA1 1AA")
+
+          address_lettings_log.update!(rsnvac: 15)
+          expect(address_lettings_log.manual_address_entry_selected).to eq(false)
+          expect(address_lettings_log.address_line1).to eq("1, Test Street")
+          expect(address_lettings_log.town_or_city).to eq("Test Town")
+          expect(address_lettings_log.postcode_full).to eq("AA1 1AA")
+          expect(address_lettings_log.uprn_selection).to eq("1")
+          expect(address_lettings_log.uprn).to eq("1")
+          expect(address_lettings_log.uprn_known).to eq(1)
+        end
+      end
+
+      context "and the address is manually entered" do
+        let(:address_lettings_log) do
+          create(:lettings_log,
+                 :setup_completed,
+                 startdate: Time.zone.yesterday,
+                 mrcdate: nil,
+                 rsnvac: 16,
+                 manual_address_entry_selected: true,
+                 first_time_property_let_as_social_housing: 1,
+                 uprn_selection: "uprn_not_listed",
+                 address_line1: "Address line 1",
+                 address_line2: "Address line 2",
+                 town_or_city: "Town",
+                 postcode_full: "AA1 1AA")
+        end
+
+        it "keeps the manually entered address" do
+          expect(address_lettings_log.manual_address_entry_selected).to eq(true)
+          expect(address_lettings_log.address_line1).to eq("Address line 1")
+          expect(address_lettings_log.address_line2).to eq("Address line 2")
+          expect(address_lettings_log.town_or_city).to eq("Town")
+          expect(address_lettings_log.postcode_full).to eq("AA1 1AA")
+
+          address_lettings_log.update!(rsnvac: 15)
+          expect(address_lettings_log.manual_address_entry_selected).to eq(true)
+          expect(address_lettings_log.address_line1).to eq("Address line 1")
+          expect(address_lettings_log.address_line2).to eq("Address line 2")
+          expect(address_lettings_log.town_or_city).to eq("Town")
+          expect(address_lettings_log.postcode_full).to eq("AA1 1AA")
+        end
+      end
+
+      context "and the address is not entered" do
+        let(:address_lettings_log) do
+          create(:lettings_log,
+                 :setup_completed,
+                 startdate: Time.zone.yesterday,
+                 mrcdate: nil,
+                 rsnvac: 17,
+                 manual_address_entry_selected: false,
+                 first_time_property_let_as_social_housing: 1,
+                 address_line1: nil,
+                 address_line2: nil,
+                 town_or_city: nil,
+                 postcode_full: nil)
+        end
+
+        it "routes to the manual address questions" do
+          expect(address_lettings_log.manual_address_entry_selected).to eq(false)
+          expect(address_lettings_log.uprn_selection).to eq(nil)
+          expect(address_lettings_log.address_line1).to eq(nil)
+          expect(address_lettings_log.address_line2).to eq(nil)
+          expect(address_lettings_log.town_or_city).to eq(nil)
+          expect(address_lettings_log.postcode_full).to eq(nil)
+
+          address_lettings_log.update!(rsnvac: 15)
+          expect(address_lettings_log.manual_address_entry_selected).to eq(true)
+          expect(address_lettings_log.uprn_selection).to eq(nil)
+          expect(address_lettings_log.uprn).to eq(nil)
+          expect(address_lettings_log.uprn_known).to eq(0)
+        end
+      end
+    end
   end
 
   describe "optional fields" do