diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp
index 52791b9..9bdf895 100644
--- a/media/libstagefright/httplive/M3UParser.cpp
+++ b/media/libstagefright/httplive/M3UParser.cpp
@@ -57,7 +57,7 @@
             const char *language,
             uint32_t flags);
 
-    bool getActiveURI(AString *uri, const char *baseURL) const;
+    bool getActiveURI(AString *uri) const;
 
     void pickRandomMediaItems();
     status_t selectTrack(size_t index, bool select);
@@ -76,7 +76,6 @@
         AString mURI;
         AString mLanguage;
         uint32_t mFlags;
-        AString makeURL(const char *baseURL) const;
     };
 
     Type mType;
@@ -229,12 +228,12 @@
     return format;
 }
 
-bool M3UParser::MediaGroup::getActiveURI(AString *uri, const char *baseURL) const {
+bool M3UParser::MediaGroup::getActiveURI(AString *uri) const {
     for (size_t i = 0; i < mMediaItems.size(); ++i) {
         if (mSelectedIndex >= 0 && i == (size_t)mSelectedIndex) {
             const Media &item = mMediaItems.itemAt(i);
 
-            *uri = item.makeURL(baseURL);
+            *uri = item.mURI;
             return true;
         }
     }
@@ -323,7 +322,7 @@
     }
 
     if (uri) {
-        *uri = mItems.itemAt(index).makeURL(mBaseURI.c_str());
+        *uri = mItems.itemAt(index).mURI;
     }
 
     if (meta) {
@@ -429,7 +428,7 @@
     AString groupID;
     if (!meta->findString(key, &groupID)) {
         if (uri != NULL) {
-            *uri = mItems.itemAt(index).makeURL(mBaseURI.c_str());
+            *uri = mItems.itemAt(index).mURI;
         }
 
         AString codecs;
@@ -460,7 +459,7 @@
     // don't care about the active URI (or if there is an active one)
     if (uri != NULL) {
         sp<MediaGroup> group = mMediaGroups.valueFor(groupID);
-        if (!group->getActiveURI(uri, mBaseURI.c_str())) {
+        if (!group->getActiveURI(uri)) {
             return false;
         }
 
@@ -549,18 +548,6 @@
     return true;
 }
 
-AString M3UParser::Item::makeURL(const char *baseURL) const {
-    AString out;
-    CHECK(MakeURL(baseURL, mURI.c_str(), &out));
-    return out;
-}
-
-AString M3UParser::MediaGroup::Media::makeURL(const char *baseURL) const {
-    AString out;
-    CHECK(MakeURL(baseURL, mURI.c_str(), &out));
-    return out;
-}
-
 status_t M3UParser::parse(const void *_data, size_t size) {
     int32_t lineNo = 0;
 
@@ -691,7 +678,7 @@
             mItems.push();
             Item *item = &mItems.editItemAt(mItems.size() - 1);
 
-            item->mURI = line;
+            CHECK(MakeURL(mBaseURI.c_str(), line.c_str(), &item->mURI));
 
             item->mMeta = itemMeta;
 
@@ -1203,7 +1190,9 @@
 
             AString tmp(val, 1, val.size() - 2);
 
-            groupURI = tmp;
+            if (!MakeURL(mBaseURI.c_str(), tmp.c_str(), &groupURI)) {
+                ALOGI("Failed to make absolute URI from '%s'.", tmp.c_str());
+            }
 
             haveGroupURI = true;
         }
diff --git a/media/libstagefright/httplive/M3UParser.h b/media/libstagefright/httplive/M3UParser.h
index c85335a..fa648ed 100644
--- a/media/libstagefright/httplive/M3UParser.h
+++ b/media/libstagefright/httplive/M3UParser.h
@@ -64,7 +64,6 @@
     struct Item {
         AString mURI;
         sp<AMessage> mMeta;
-        AString makeURL(const char *baseURL) const;
     };
 
     status_t mInitCheck;
