diff --git a/modules/services_discovery/sap.c b/modules/services_discovery/sap.c
index 01ed5a97047efeb3594fb762c68ed0a52c202787..9e6710e6908a698d1158e2fa1383c7974d5b03a9 100644
--- a/modules/services_discovery/sap.c
+++ b/modules/services_discovery/sap.c
@@ -839,14 +839,12 @@ static int ParseConnection( vlc_object_t *p_obj, sdp_t *p_sdp )
         if( psz_eof )
         {
             *psz_eof = 0;
-            psz_uri = strdup( psz_parse );
         }
-
         else
         {
-            msg_Warn( p_obj, "unable to parse c field (3)");
-            return VLC_EGENERIC;
+            msg_Dbg( p_obj, "incorrect c field");
         }
+        psz_uri = strdup( psz_parse );
 
     }
 
@@ -906,14 +904,12 @@ static int ParseConnection( vlc_object_t *p_obj, sdp_t *p_sdp )
         if( psz_eof )
         {
             *psz_eof = '\0';
-
-            psz_proto = strdup( psz_parse );
         }
         else
         {
-            msg_Warn( p_obj, "unable to parse m field (3)");
-            return VLC_EGENERIC;
+            msg_Dbg( p_obj, "incorrect m field");
         }
+        psz_proto = strdup( psz_parse );
     }
 
     if( psz_proto && !strncmp( psz_proto, "RTP/AVP", 7 ) )
@@ -921,6 +917,11 @@ static int ParseConnection( vlc_object_t *p_obj, sdp_t *p_sdp )
         free( psz_proto );
         psz_proto = strdup( "rtp" );
     }
+    if( psz_proto && !strncmp( psz_proto, "UDP", 3 ) )
+    {
+        free( psz_proto );
+        psz_proto = strdup( "udp" );
+    }
                     
 
     /* FIXME: HTTP support */
@@ -954,7 +955,7 @@ static sdp_t *  ParseSDP( vlc_object_t *p_obj, char* psz_sdp )
 
     if( psz_sdp == NULL )
     {
-        return VLC_EGENERIC;
+        return NULL;
     }
 
     if( psz_sdp[0] != 'v' || psz_sdp[1] != '=' )