diff --git a/broadcastradio/1.1/default/Tuner.cpp b/broadcastradio/1.1/default/Tuner.cpp
index 64d8b89..9b39d36 100644
--- a/broadcastradio/1.1/default/Tuner.cpp
+++ b/broadcastradio/1.1/default/Tuner.cpp
@@ -107,24 +107,17 @@
         virtualRadio = &mVirtualFm;
     }
 
-    auto& info11 = mCurrentProgramInfo;
-    auto& info10 = info11.base;
-
     VirtualProgram virtualProgram;
     if (virtualRadio != nullptr && virtualRadio->getProgram(mCurrentProgram, virtualProgram)) {
-        // TODO(b/36864090): convert virtualProgram to ProgramInfo instead
-        info10.channel = mCurrentProgram;
-        info10.tuned = true;
-        info10.stereo = true;
-        info10.signalStrength = 100;
+        mCurrentProgramInfo = static_cast<ProgramInfo>(virtualProgram);
     } else {
-        info11 = makeDummyProgramInfo(mCurrentProgram);
+        mCurrentProgramInfo = makeDummyProgramInfo(mCurrentProgram);
     }
     mIsTuneCompleted = true;
 
-    mCallback->tuneComplete(Result::OK, info10);
+    mCallback->tuneComplete(Result::OK, mCurrentProgramInfo.base);
     if (mCallback1_1 != nullptr) {
-        mCallback1_1->tuneComplete_1_1(Result::OK, info11);
+        mCallback1_1->tuneComplete_1_1(Result::OK, mCurrentProgramInfo);
     }
 }
 
@@ -274,20 +267,8 @@
         return Void();
     }
 
-    hidl_vec<ProgramInfo> list;
-    auto vList = virtualRadio.getProgramList();
-    list.resize(vList.size());
-    for (size_t i = 0; i < vList.size(); i++) {
-        auto& src = vList[i];
-        auto& dst11 = list[i];
-        auto& dst10 = dst11.base;
-
-        // TODO(b/36864090): convert virtualProgram to ProgramInfo instead
-        dst10.channel = src.channel;
-        dst10.tuned = true;
-    }
-
-    _hidl_cb(ProgramListResult::OK, list);
+    auto list = virtualRadio.getProgramList();
+    _hidl_cb(ProgramListResult::OK, vector<ProgramInfo>(list.begin(), list.end()));
     return Void();
 }
 
diff --git a/broadcastradio/1.1/default/VirtualProgram.cpp b/broadcastradio/1.1/default/VirtualProgram.cpp
index b418bf7..df12a3e 100644
--- a/broadcastradio/1.1/default/VirtualProgram.cpp
+++ b/broadcastradio/1.1/default/VirtualProgram.cpp
@@ -21,6 +21,28 @@
 namespace V1_1 {
 namespace implementation {
 
+using V1_0::MetaData;
+using V1_0::MetadataKey;
+using V1_0::MetadataType;
+
+VirtualProgram::operator ProgramInfo() const {
+    ProgramInfo info11 = {};
+    auto& info10 = info11.base;
+
+    info10.channel = channel;
+    info10.tuned = true;
+    info10.stereo = true;
+    info10.signalStrength = 100;
+
+    info10.metadata = hidl_vec<MetaData>({
+        {MetadataType::TEXT, MetadataKey::RDS_PS, {}, {}, programName, {}},
+        {MetadataType::TEXT, MetadataKey::TITLE, {}, {}, songTitle, {}},
+        {MetadataType::TEXT, MetadataKey::ARTIST, {}, {}, songArtist, {}},
+    });
+
+    return info11;
+}
+
 bool operator<(const VirtualProgram& lhs, const VirtualProgram& rhs) {
     return lhs.channel < rhs.channel;
 }
diff --git a/broadcastradio/1.1/default/VirtualProgram.h b/broadcastradio/1.1/default/VirtualProgram.h
index ff44590..303513f 100644
--- a/broadcastradio/1.1/default/VirtualProgram.h
+++ b/broadcastradio/1.1/default/VirtualProgram.h
@@ -16,6 +16,7 @@
 #ifndef ANDROID_HARDWARE_BROADCASTRADIO_V1_1_VIRTUALPROGRAM_H
 #define ANDROID_HARDWARE_BROADCASTRADIO_V1_1_VIRTUALPROGRAM_H
 
+#include <android/hardware/broadcastradio/1.1/types.h>
 #include <cstdint>
 
 namespace android {
@@ -27,6 +28,11 @@
 struct VirtualProgram {
     uint32_t channel;  // TODO(b/32621193): Station Selector
 
+    std::string programName = "";
+    std::string songArtist = "";
+    std::string songTitle = "";
+
+    explicit operator ProgramInfo() const;
     friend bool operator<(const VirtualProgram& lhs, const VirtualProgram& rhs);
 };
 
diff --git a/broadcastradio/1.1/default/VirtualRadio.cpp b/broadcastradio/1.1/default/VirtualRadio.cpp
index 017a01f..0eab7ae 100644
--- a/broadcastradio/1.1/default/VirtualRadio.cpp
+++ b/broadcastradio/1.1/default/VirtualRadio.cpp
@@ -27,7 +27,13 @@
 using std::vector;
 
 vector<VirtualProgram> gInitialFmPrograms{
-    {94900}, {96500}, {97300}, {99700}, {101300}, {103700}, {106100},
+    {94900, "Wild 94.9", "Drake ft. Rihanna", "Too Good"},
+    {96500, "KOIT", "Celine Dion", "All By Myself"},
+    {97300, "Alice@97.3", "Drops of Jupiter", "Train"},
+    {99700, "99.7 Now!", "The Chainsmokers", "Closer"},
+    {101300, "101-3 KISS-FM", "Justin Timberlake", "Rock Your Body"},
+    {103700, "iHeart80s @ 103.7", "Michael Jackson", "Billie Jean"},
+    {106100, "106 KMEL", "Drake", "Marvins Room"},
 };
 
 VirtualRadio::VirtualRadio(VirtualRadio&& o) : mPrograms(move(o.mPrograms)) {}
