diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index d31d4c81b..bdb55eb4d 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -1887,11 +1887,12 @@ get_public_key (app_t app, int keyno)
       if (err)
         {
           /* Yubikey returns wrong code.  Fix it up.  */
-          /*
-           * NOTE: It's not correct to blindly change the error code,
-           * however, for our experiences, it is only Yubikey...
-           */
-          err = gpg_error (GPG_ERR_NO_OBJ);
+          if (APP_CARD(app)->cardtype == CARDTYPE_YUBIKEY)
+            err = gpg_error (GPG_ERR_NO_OBJ);
+	  /* Yubikey NEO (!CARDTYPE_YUBIKEY) also returns wrong code.
+           * Fix it up.  */
+	  else if (gpg_err_code (err) == GPG_ERR_CARD)
+            err = gpg_error (GPG_ERR_NO_OBJ);
           log_error (_("reading public key failed: %s\n"), gpg_strerror (err));
           goto leave;
         }