diff --git a/providers/emvideo/bliptv.inc b/providers/emvideo/bliptv.inc
index ac4cfc6..d1c7a6b 100644
--- a/providers/emvideo/bliptv.inc
+++ b/providers/emvideo/bliptv.inc
@@ -48,7 +48,7 @@ function emvideo_bliptv_data($field, $item) {
 function emvideo_bliptv_request($code, $cacheable = TRUE, $skin = 'rss', $show = FALSE) {
   $args = array();
   $file = $show ? "http://$code.blip.tv/file/?skin=" . $skin : "http://blip.tv/file/$code?skin=" . $skin;
-  return module_invoke('emfield', 'request_xml', 'bliptv', $file, $args, $cacheable, FALSE, $code .':'. $skin . ($show ? ':show' : ':post'));
+  return emfield_request_xml('bliptv', $file, $args, $cacheable, FALSE, $code .':'. $skin . ($show ? ':show' : ':post'));
 }
 
 function emvideo_bliptv_extract($embed) {
@@ -57,11 +57,27 @@ function emvideo_bliptv_extract($embed) {
   if ($matches[1]) {
     return 'BLIP_TV_ERROR_EMBED';
   }
-  return array(
+
+  // Parse for the older URL format.
+  $patterns = array(
     '@blip\.tv/rss/flash/([^"\&\?/]+)@i',
     '@blip\.tv/file/view/([^"\&\?/]+)@i',
     '@blip\.tv/file/([^"\&\?/]+)@i',
   );
+  foreach ($patterns as $pattern) {
+    if (preg_match($pattern, $embed, $matches)) {
+      return $matches[1];
+    }
+  }
+
+  // If this is a blip.tv URL, then retrieve its associated RSS.
+  if (preg_match('@blip\.tv/([^"\&\?/]+)/([^"\&\?/]+)@i', $embed, $matches)) {
+    $rss = 'http://blip.tv/'. $matches[1] .'/'. $matches[2] .'?skin=rss';
+    $xml = emfield_request_xml('bliptv', $rss, array(), TRUE, FALSE, $matches[1] .'/'. $matches[2]);
+    if (isset($xml['ITEM']) && isset($xml['ITEM']['BLIP:ITEM_ID']) && isset($xml['ITEM']['BLIP:ITEM_ID'][0])) {
+      return $xml['ITEM']['BLIP:ITEM_ID'][0];
+    }
+  }
 }
 
 /**
