diff --git a/recovery_main.cpp b/recovery_main.cpp
index 6f50802..7fb4616 100644
--- a/recovery_main.cpp
+++ b/recovery_main.cpp
@@ -458,6 +458,8 @@
       }
     }
 
+    ui->SetEnableFastbootdLogo(fastboot);
+
     auto ret = fastboot ? StartFastboot(device, args) : start_recovery(device, args);
 
     if (ret == Device::KEY_INTERRUPTED) {
diff --git a/res-hdpi/images/fastbootd.png b/res-hdpi/images/fastbootd.png
new file mode 100644
index 0000000..5127b3b
--- /dev/null
+++ b/res-hdpi/images/fastbootd.png
Binary files differ
diff --git a/res-mdpi/images/fastbootd.png b/res-mdpi/images/fastbootd.png
new file mode 100644
index 0000000..c1b7bc2
--- /dev/null
+++ b/res-mdpi/images/fastbootd.png
Binary files differ
diff --git a/res-xhdpi/images/fastbootd.png b/res-xhdpi/images/fastbootd.png
new file mode 100644
index 0000000..e3da85a
--- /dev/null
+++ b/res-xhdpi/images/fastbootd.png
Binary files differ
diff --git a/res-xxhdpi/images/fastbootd.png b/res-xxhdpi/images/fastbootd.png
new file mode 100644
index 0000000..482dbb2
--- /dev/null
+++ b/res-xxhdpi/images/fastbootd.png
Binary files differ
diff --git a/res-xxxhdpi/images/fastbootd.png b/res-xxxhdpi/images/fastbootd.png
new file mode 100644
index 0000000..a878b1f
--- /dev/null
+++ b/res-xxxhdpi/images/fastbootd.png
Binary files differ
diff --git a/screen_ui.cpp b/screen_ui.cpp
index 6c00a22..6f2b68b 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -701,6 +701,16 @@
 void ScreenRecoveryUI::draw_menu_and_text_buffer_locked(
     const std::vector<std::string>& help_message) {
   int y = margin_height_;
+
+  if (fastbootd_logo_ && fastbootd_logo_enabled_) {
+    // Try to get this centered on screen.
+    auto width = gr_get_width(fastbootd_logo_.get());
+    auto height = gr_get_height(fastbootd_logo_.get());
+    auto centered_x = ScreenWidth() / 2 - width / 2;
+    DrawSurface(fastbootd_logo_.get(), 0, 0, width, height, centered_x, y);
+    y += height;
+  }
+
   if (menu_) {
     int x = margin_width_ + kMenuIndent;
 
@@ -890,6 +900,10 @@
   no_command_text_ = LoadLocalizedBitmap("no_command_text");
   error_text_ = LoadLocalizedBitmap("error_text");
 
+  if (android::base::GetBoolProperty("ro.boot.dynamic_partitions", false)) {
+    fastbootd_logo_ = LoadBitmap("fastbootd");
+  }
+
   // Background text for "installing_update" could be "installing update" or
   // "installing security update". It will be set after Init() according to the commands in BCB.
   installing_text_.reset();
diff --git a/screen_ui.h b/screen_ui.h
index acd44c8..5cda2a2 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -345,6 +345,8 @@
   std::unique_ptr<GRSurface> wipe_data_confirmation_text_;
   std::unique_ptr<GRSurface> wipe_data_menu_header_text_;
 
+  std::unique_ptr<GRSurface> fastbootd_logo_;
+
   // current_icon_ points to one of the frames in intro_frames_ or loop_frames_, indexed by
   // current_frame_, or error_icon_.
   Icon current_icon_;
diff --git a/ui.cpp b/ui.cpp
index 14b5b09..c12a11b 100644
--- a/ui.cpp
+++ b/ui.cpp
@@ -59,6 +59,7 @@
       brightness_file_(BRIGHTNESS_FILE),
       max_brightness_file_(MAX_BRIGHTNESS_FILE),
       touch_screen_allowed_(false),
+      fastbootd_logo_enabled_(false),
       touch_low_threshold_(android::base::GetIntProperty("ro.recovery.ui.touch_low_threshold",
                                                          kDefaultTouchLowThreshold)),
       touch_high_threshold_(android::base::GetIntProperty("ro.recovery.ui.touch_high_threshold",
diff --git a/ui.h b/ui.h
index 4924fec..b387ae3 100644
--- a/ui.h
+++ b/ui.h
@@ -168,7 +168,6 @@
   virtual size_t ShowPromptWipeDataMenu(const std::vector<std::string>& backup_headers,
                                         const std::vector<std::string>& backup_items,
                                         const std::function<int(int, bool)>& key_handler) = 0;
-
   // Displays the localized wipe data confirmation menu with pre-generated images. Falls back to
   // the text strings upon failures. The initial selection is the 0th item, which returns to the
   // upper level menu.
@@ -176,6 +175,11 @@
       const std::vector<std::string>& backup_headers, const std::vector<std::string>& backup_items,
       const std::function<int(int, bool)>& key_handler) = 0;
 
+  // Set whether or not the fastbootd logo is displayed.
+  void SetEnableFastbootdLogo(bool enable) {
+    fastbootd_logo_enabled_ = enable;
+  }
+
   // Resets the key interrupt status.
   void ResetKeyInterruptStatus() {
     key_interrupted_ = false;
@@ -200,6 +204,8 @@
   // Whether we should listen for touch inputs (default: false).
   bool touch_screen_allowed_;
 
+  bool fastbootd_logo_enabled_;
+
  private:
   enum class ScreensaverState {
     DISABLED,
