diff --git a/src/nano.c b/src/nano.c
index 943aff7116eb89e3f775a23ede8384b056be95c5..fc597eab8600836553849349b7199842aee90d52 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1887,8 +1887,6 @@ void do_output(char *output, size_t output_len, bool allow_cntrls)
 int main(int argc, char **argv)
 {
     int optchr;
-    ssize_t startline = 0, startcol = 0;
-	/* Target line and column when specified on the command line. */
 #ifndef DISABLE_WRAPJUSTIFY
     bool fill_used = FALSE;
 	/* Was the fill option used on the command line? */
@@ -2523,15 +2521,6 @@ int main(int argc, char **argv)
     fprintf(stderr, "Main: open file\n");
 #endif
 
-    /* If there's a +LINE or +LINE,COLUMN flag here, it is the first
-     * non-option argument, and it is followed by at least one other
-     * argument, the filename it applies to. */
-    if (0 < optind && optind < argc - 1 && argv[optind][0] == '+') {
-	if (!parse_line_column(&argv[optind][1], &startline, &startcol))
-	    statusline(ALERT, _("Invalid line or column number"));
-	optind++;
-    }
-
     /* If one of the arguments is a dash, read text from standard input. */
     if (optind < argc && !strcmp(argv[optind], "-")) {
 	stdin_pager();
@@ -2541,20 +2530,21 @@ int main(int argc, char **argv)
 #ifdef ENABLE_MULTIBUFFER
     old_multibuffer = ISSET(MULTIBUFFER);
     SET(MULTIBUFFER);
+#endif
 
-    /* Read all the files after the first one on the command line into
-     * new buffers. */
+    /* Read the named files on the command line into new buffers. */
     {
-	int i = optind + 1;
+	int i = optind;
 	ssize_t iline = 0, icol = 0;
 
-	for (; i < argc; i++) {
+	for (; i < argc && (!openfile || ISSET(MULTIBUFFER)); i++) {
 	    /* If there's a +LINE or +LINE,COLUMN flag here, it is followed
 	     * by at least one other argument: the filename it applies to. */
 	    if (i < argc - 1 && argv[i][0] == '+') {
 		if (!parse_line_column(&argv[i][1], &iline, &icol))
 		    statusline(ALERT, _("Invalid line or column number"));
-	    } else {
+		i++;
+	    }
 		/* If opening fails, don't try to position the cursor. */
 		if (!open_buffer(argv[i], FALSE))
 		    continue;
@@ -2574,40 +2564,23 @@ int main(int argc, char **argv)
 						FALSE, FALSE);
 		}
 #endif
-	    }
 	}
     }
-#endif /* ENABLE_MULTIBUFFER */
-
-    /* Now read the first file on the command line into a new buffer. */
-    if (optind < argc)
-	open_buffer(argv[optind], FALSE);
 
-    /* If all the command-line arguments were invalid files like directories,
-     * or if there were no filenames given, we didn't open any file.  In this
-     * case, load a blank buffer.  Also, unset view mode to allow editing. */
+    /* If no filenames were given, or all of them were invalid things like
+     * directories, then open a blank buffer and allow editing.  Otherwise,
+     * switch from the last opened file to the next, that is: the first. */
     if (openfile == NULL) {
 	open_buffer("", FALSE);
 	UNSET(VIEW_MODE);
-    }
+    } else
+	openfile = openfile->next;
 
 #ifdef ENABLE_MULTIBUFFER
     if (!old_multibuffer)
 	UNSET(MULTIBUFFER);
 #endif
 
-    /* If a starting position was given on the command line, go there. */
-    if (startline > 0 || startcol > 0)
-	do_gotolinecolumn(startline, startcol, FALSE, FALSE);
-#ifndef DISABLE_HISTORIES
-    else if (ISSET(POS_HISTORY)) {
-	ssize_t savedposline, savedposcol;
-	/* If the file was edited before, restore the last cursor position. */
-	if (has_old_position(argv[optind], &savedposline, &savedposcol))
-	    do_gotolinecolumn(savedposline, savedposcol, FALSE, FALSE);
-    }
-#endif
-
 #ifdef DEBUG
     fprintf(stderr, "Main: show title bar, and enter main loop\n");
 #endif