Index: src/pkcs15init/pkcs15-entersafe.c
===================================================================
--- src/pkcs15init/pkcs15-entersafe.c	(revision 4390)
+++ src/pkcs15init/pkcs15-entersafe.c	(working copy)
@@ -284,6 +284,10 @@
 		 data.key_data.symmetric.key_len=16;
 
 		 r = sc_card_ctl(card, SC_CARDCTL_ENTERSAFE_WRITE_KEY, &data);
+		 if (pin_obj)   {
+			 /* Cache new PIN value. */
+			 sc_pkcs15_pincache_add(p15card, pin_obj, pin, pin_len);
+		 }
 	}
 
 	{/*puk*/
Index: src/libopensc/cardctl.h
===================================================================
--- src/libopensc/cardctl.h	(revision 4390)
+++ src/libopensc/cardctl.h	(working copy)
@@ -639,17 +639,6 @@
 			   u8 lock_ac;
 			   u8 aid[16];
 			   u8 init_key[16];
-		  } mf;
-		  struct {
-			   u8 file_id[2];
-			   u8 file_count;
-			   u8 flag;
-			   u8 ikf_size[2];
-			   u8 create_ac;
-			   u8 append_ac;
-			   u8 lock_ac;
-			   u8 aid[16];
-			   u8 init_key[16];
 		  } df;
 		  struct {
 			   u8 file_id[2];	
Index: src/libopensc/card-entersafe.c
===================================================================
--- src/libopensc/card-entersafe.c	(revision 4390)
+++ src/libopensc/card-entersafe.c	(working copy)
@@ -675,12 +675,12 @@
 
 	SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);
 
-	memcpy(data->data.mf.init_key, init_key, sizeof(init_key));
+	memcpy(data->data.df.init_key, init_key, sizeof(init_key));
 
 	sc_format_apdu(card,&apdu,SC_APDU_CASE_3_SHORT,0xE0,0x00,0x00);
 	apdu.cla=0x84;
-	apdu.data=(u8*)&data->data.mf;
-	apdu.datalen=apdu.lc=sizeof(data->data.mf);
+	apdu.data=(u8*)&data->data.df;
+	apdu.datalen=apdu.lc=sizeof(data->data.df);
 
 	switch(card->type)
 	{
