--- kdm/backend/session.c
+++ kdm/backend/session.c
@@ -136,7 +136,9 @@
 		td->hstent->npass = 0;
 		newdmrc = td->hstent->nargs;
 		td->hstent->nargs = 0;
+		ReStr( &curtype, "classic" );
 		cursource = (td->hstent->rLogin == 1) ? PWSRC_RELOGIN : PWSRC_MANUAL;
+		return 1;
 	} else if (*td->autoUser && tdiff > 0) {
 		unsigned int lmask;
 		Window dummy1, dummy2;
@@ -146,14 +148,13 @@
 		               &lmask );
 		if (lmask & ShiftMask)
 			return 0;
-		StrDup( &curuser, td->autoUser );
-		StrDup( &curpass, td->autoPass );
+		ReStr( &curuser, td->autoUser );
+		ReStr( &curpass, td->autoPass );
+		ReStr( &curtype, "classic" );
 		cursource = PWSRC_AUTOLOGIN;
-	} else {
-		cursource = PWSRC_MANUAL;
-		return 0;
+		return 1;
 	}
-	return 1;
+	return 0;
 }
 
 
@@ -365,6 +366,7 @@
 			if (curtype) free( curtype );
 			curtype = GRecvStr();
 			Debug( " type %\"s\n", curtype );
+			cursource = PWSRC_MANUAL;
 			if (Verify( conv_interact, rootok )) {
 				Debug( " -> return success\n" );
 				GSendInt( V_OK );
@@ -548,7 +550,7 @@
 	}
 
 	if (AutoLogon()) {
-		if (!StrDup( &curtype, "classic" ) || !Verify( conv_auto, FALSE ))
+		if (!Verify( conv_auto, FALSE ))
 			goto gcont;
 		if (greeter)
 			GSendInt( V_OK );