diff --git a/src/text.c b/src/text.c
index 5ffdb07200911b0eea3932a2074498d834808212..b161be23518b49a62bae8a81de6e3053406540e6 100644
--- a/src/text.c
+++ b/src/text.c
@@ -129,17 +129,17 @@ void indent_a_line(filestruct *line, char *indentation)
 void do_indent(void)
 {
 	char *indentation;
-	filestruct *top, *bot, *line;
+	filestruct *line, *bot;
 
 	/* Use either all the marked lines or just the current line. */
-	get_range((const filestruct **)&top, (const filestruct **)&bot);
+	get_range((const filestruct **)&line, (const filestruct **)&bot);
 
 	/* Skip any leading empty lines. */
-	while (top != bot->next && top->data[0] == '\0')
-		top = top->next;
+	while (line != bot->next && line->data[0] == '\0')
+		line = line->next;
 
 	/* If all lines are empty, there is nothing to do. */
-	if (top == bot->next)
+	if (line == bot->next)
 		return;
 
 	indentation = charalloc(tabsize + 1);
@@ -149,19 +149,22 @@ void do_indent(void)
 		charset(indentation, ' ', tabsize);
 		indentation[tabsize] = '\0';
 	} else {
-		indentation[0] = '\t';
-		indentation[1] = '\0';
+		strcpy(indentation, "\t");
 	}
 
 	add_undo(INDENT);
 
 	/* Go through each of the lines, adding an indent to the non-empty ones,
 	 * and recording whatever was added in the undo item. */
-	for (line = top; line != bot->next; line = line->next) {
-		char *real_indent = (line->data[0] == '\0') ? "" : indentation;
-
-		indent_a_line(line, real_indent);
-		update_multiline_undo(line->lineno, real_indent);
+	while (line != bot->next) {
+		if (line->data[0] == '\0') {
+			update_multiline_undo(line->lineno, "");
+		}
+		else {
+			indent_a_line(line, indentation);
+			update_multiline_undo(line->lineno, indentation);
+		}
+		line = line->next;
 	}
 
 	free(indentation);
@@ -232,33 +235,34 @@ void unindent_a_line(filestruct *line, size_t indent_len)
  * The removed indent can be a mixture of spaces plus at most one tab. */
 void do_unindent(void)
 {
-	filestruct *top, *bot, *line;
+	filestruct *line, *bot;
 
 	/* Use either all the marked lines or just the current line. */
-	get_range((const filestruct **)&top, (const filestruct **)&bot);
+	get_range((const filestruct **)&line, (const filestruct **)&bot);
 
 	/* Skip any leading lines that cannot be unindented. */
-	while (top != bot->next && length_of_white(top->data) == 0)
-		top = top->next;
+	while (line != bot->next && !length_of_white(line->data))
+		line = line->next;
 
 	/* If none of the lines can be unindented, there is nothing to do. */
-	if (top == bot->next)
+	if (line == bot->next)
 		return;
 
 	add_undo(UNINDENT);
 
 	/* Go through each of the lines, removing their leading indent where
 	 * possible, and saving the removed whitespace in the undo item. */
-	for (line = top; line != bot->next; line = line->next) {
+	while (line != bot->next) {
 		size_t indent_len = length_of_white(line->data);
-		char *indentation = mallocstrncpy(NULL, line->data, indent_len + 1);
+		unindent_a_line(line, indent_len);
 
+		char *indentation = charalloc(indent_len + 1);
+		strncpy(indentation, line->data, indent_len);
 		indentation[indent_len] = '\0';
-
-		unindent_a_line(line, indent_len);
 		update_multiline_undo(line->lineno, indentation);
-
 		free(indentation);
+
+		line = line->next;
 	}
 
 	set_modified();
@@ -866,7 +870,7 @@ void do_redo(void)
 void do_enter(void)
 {
 	filestruct *newnode = make_new_node(openfile->current);
-	size_t extra = 0;
+	size_t indent_chars = 0;
 #ifndef NANO_TINY
 	filestruct *sampleline = openfile->current;
 	bool allblanks = FALSE;
@@ -879,27 +883,24 @@ void do_enter(void)
 					inpar(sampleline->next) && !begpar(sampleline->next, 0))
 			sampleline = sampleline->next;
 #endif
-		extra = indent_length(sampleline->data);
+		indent_chars = indent_length(sampleline->data);
 
 		/* When breaking in the indentation, limit the automatic one. */
-		if (extra > openfile->current_x)
-			extra = openfile->current_x;
-		else if (extra == openfile->current_x)
+		if (indent_chars > openfile->current_x)
+			indent_chars = openfile->current_x;
+		else if (indent_chars == openfile->current_x)
 			allblanks = TRUE;
 	}
 #endif /* NANO_TINY */
-	newnode->data = charalloc(strlen(openfile->current->data +
-										openfile->current_x) + extra + 1);
-	strcpy(&newnode->data[extra], openfile->current->data +
-										openfile->current_x);
+	char *current_rest = &openfile->current->data[openfile->current_x];
+	newnode->data = charalloc(indent_chars + strlen(current_rest) + 1);
+	strcpy(&newnode->data[indent_chars], current_rest);
 #ifndef NANO_TINY
-	if (ISSET(AUTOINDENT)) {
-		/* Copy the whitespace from the sample line to the new one. */
-		strncpy(newnode->data, sampleline->data, extra);
-		/* If there were only blanks before the cursor, trim them. */
-		if (allblanks)
-			openfile->current_x = 0;
-	}
+	/* Copy the whitespace from the sample line to the new one. */
+	strncpy(newnode->data, sampleline->data, indent_chars);
+	/* If there were only blanks before the cursor, trim them. */
+	if (allblanks)
+		openfile->current_x = 0;
 #endif
 
 	null_at(&openfile->current->data, openfile->current_x);
@@ -911,7 +912,7 @@ void do_enter(void)
 	if (openfile->mark == openfile->current &&
 				openfile->mark_x > openfile->current_x) {
 		openfile->mark = newnode;
-		openfile->mark_x += extra - openfile->current_x;
+		openfile->mark_x += indent_chars - openfile->current_x;
 	}
 #endif
 
@@ -921,15 +922,15 @@ void do_enter(void)
 
 	/* Put the cursor on the new line, after any automatic whitespace. */
 	openfile->current = newnode;
-	openfile->current_x = extra;
+	openfile->current_x = indent_chars;
 	openfile->placewewant = xplustabs();
 
-	openfile->totsize++;
+	openfile->totsize++; // count the '\n' character
 	set_modified();
 
 #ifndef NANO_TINY
 	if (ISSET(AUTOINDENT) && !allblanks)
-		openfile->totsize += extra;
+		openfile->totsize += indent_chars;
 	update_undo(ENTER);
 #endif