Index: src/pkcs15init/pkcs15-entersafe.c
===================================================================
--- src/pkcs15init/pkcs15-entersafe.c	(revision 5121)
+++ src/pkcs15init/pkcs15-entersafe.c	(working copy)
@@ -276,7 +276,8 @@
 
 		 data.key_id=pin_info->reference;
 		 data.usage=0x0B;
-		 data.key_data.symmetric.EC=0x33;
+		 data.key_data.symmetric.EC= (pin_info->tries_left << 4) + 
+			 pin_info->tries_left;
 		 data.key_data.symmetric.ver=0x00;
 		 /* pad pin with 0 */
 		 memset(data.key_data.symmetric.key_val, 0, sizeof(data.key_data.symmetric.key_val));
Index: src/libopensc/card-entersafe.c
===================================================================
--- src/libopensc/card-entersafe.c	(revision 5121)
+++ src/libopensc/card-entersafe.c	(working copy)
@@ -953,10 +953,23 @@
 	 entersafe_init_pin_info(&data->pin2,1);
 	 data->flags |= SC_PIN_CMD_NEED_PADDING;
 
-	 if(data->cmd!=SC_PIN_CMD_UNBLOCK)
+	 if(data->cmd == SC_PIN_CMD_GET_INFO)
 	 {
+		 sc_apdu_t apdu;
+		 u8 pin_ec[0x01] = {0};
+		 sc_format_apdu(card, &apdu, SC_APDU_CASE_2_SHORT, 0xfc, 0x04, data->pin_reference);
+		 apdu.cla = 0x80;
+		 apdu.le = apdu.resplen = 0x01;
+		 apdu.resp = pin_ec;
+		 r = entersafe_transmit_apdu(card, &apdu, 0, 0, 0, 0);
+		 SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "APDU transmit failed");
+		 data->pin1.max_tries = (pin_ec[0] >> 4);
+		 data->pin1.tries_left = (pin_ec[0] & 0x0f);
+	 }
+	 else if(data->cmd!=SC_PIN_CMD_UNBLOCK)
+	 {
 		  r = iso_ops->pin_cmd(card,data,tries_left);
-		  sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL, "Verify rv:%i", r);
+		  sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL, "Verify/Change rv:%i, tries left:%i", r, *tries_left);
 	 }
 	 else
 	 {
