diff -Naur xarchiver-0.5.3.orig/src/window.c xarchiver-0.5.2/src/window.c
--- xarchiver-0.5.3.orig/src/window.c	2014-01-24 08:10:09.305990000 +0100
+++ xarchiver-0.5.3/src/window.c	2014-01-24 08:42:45.110729290 +0100
@@ -1694,7 +1694,7 @@
 		{
 			if (archive->passwd == NULL)
 			{
-				archive->passwd = xa_create_password_dialog(NULL);
+				archive->passwd = xa_create_password_dialog(archive);
 				if ( archive->passwd == NULL)
 				{
 					gtk_drag_finish (dc,FALSE,FALSE,t);
@@ -2702,9 +2702,12 @@
 
 	if (entry->is_encrypted)
 	{
-		archive[idx]->passwd = xa_create_password_dialog(archive[idx]);
 		if (archive[idx]->passwd == NULL)
-			return;
+		{
+			archive[idx]->passwd = xa_create_password_dialog(archive[idx]);
+			if (archive[idx]->passwd == NULL)
+				return;
+		}
 	}
 	filename = g_strconcat(archive[idx]->tmp,"/",entry->filename,NULL);
 	if (g_file_test(filename,G_FILE_TEST_EXISTS))
@@ -2768,8 +2771,12 @@
 	{
		if (entry->is_encrypted)
		{
-		  if (archive->passwd == NULL)
-		     return;
+			if (archive->passwd == NULL)
+			{
+				archive->passwd = xa_create_password_dialog(archive);
+				if (archive->passwd == NULL)
+					return;
+			}
		}
 	   	if (archive->extraction_path)
 	   	{