diff --git a/lib/AccountManager/Metadata.pm b/lib/AccountManager/Metadata.pm
index 2b73fc4469915b3a7c0810004a282eb9adc14383..41fce727e313b77168fa131865c37cbd8a13bace 100644
--- a/lib/AccountManager/Metadata.pm
+++ b/lib/AccountManager/Metadata.pm
@@ -55,6 +55,7 @@ sub parse {
             next unless $child->nodeType() == XML_ELEMENT_NODE;
 
             if ($child->localname() eq 'IDPSSODescriptor') {
+                # skip immediatly if requested type differs
                 next ENTITY if $args{type} && $args{type} ne 'idp';
 
                 $data->{type} = 'idp';
@@ -81,6 +82,7 @@ sub parse {
                 }
 
             } elsif ($child->localname() eq 'SPSSODescriptor') {
+                # skip immediatly if requested type differs
                 next ENTITY if $args{type} && $args{type} ne 'sp';
 
                 $data->{type} = 'sp';
@@ -169,6 +171,10 @@ sub parse {
             }
         }
 
+        # skip finaly if specific type was requested,
+        # and no identifiable type was found
+        next ENTITY if $args{type} && !$data->{type};
+
         push @array, $data;
     }
 
diff --git a/t/metadata.t b/t/metadata.t
index cecd79abc735602abbe2d2fda0a1bb8cef5d55f2..4415581fbbe199ea439ba0414fe1ff2961b43ece 100755
--- a/t/metadata.t
+++ b/t/metadata.t
@@ -100,6 +100,6 @@ ok(scalar @$none == 0, 'filtered metadata extraction: result count');
 my $idp = $metadata->parse(type => 'idp');
 ok(defined $idp, 'filtered metadata extraction: defined result');
 ok(ref $idp eq 'ARRAY', 'filtered metadata extraction: result type');
-ok(scalar @$idp == 2561, 'filtered metadata extraction: result count');
+ok(scalar @$idp == 2556, 'filtered metadata extraction: result count');
 is($idp->[0]->{type}, 'idp', 'filtered entity has expected type');