diff --git a/ChangeLog b/ChangeLog
index c8e94d0b5106d6a40eb54bc194482e533e00e083..6f81e063854e33aefdfdc3e4e1d8f468ef153513 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -52,6 +52,8 @@ CVS code -
 	  for a backwards search in the refactored code, and enclose
 	  dump_buffer() and dump_buffer_reverse() in one ENABLE_DEBUG
 	  #ifdef instead of two.
+	- Convert memmove() function calls to charmove() macro calls, as
+	  the former all work on char*'s. (DLR)
 - files.c:
   do_browser()
 	- Some of the Pico compatibility options in the file browser
diff --git a/src/cut.c b/src/cut.c
index b64de25181c88c735b174628c900957617649488..61d88bf982e99d5f0b3b81959e5a3fe06a92033f 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -117,7 +117,7 @@ void cut_marked_segment(filestruct *top, size_t top_x, filestruct *bot,
     /* Make the first cut line manually. */
     tmp = copy_node(top);
     newsize = (top == bot ? bot_x - top_x : strlen(top->data + top_x));
-    memmove(tmp->data, top->data + top_x, newsize);
+    charmove(tmp->data, top->data + top_x, newsize);
     null_at(&tmp->data, newsize);
     add_to_cutbuffer(tmp);
 
@@ -131,7 +131,7 @@ void cut_marked_segment(filestruct *top, size_t top_x, filestruct *bot,
 	if (top == bot) {
 	    /* In this case, the remainder line is shorter, so we must
 	       move text from the end forward first. */
-	    memmove(top->data + top_x, bot->data + bot_x,
+	    charmove(top->data + top_x, bot->data + bot_x,
 			newsize - top_x);
 	    top->data = charealloc(top->data, newsize);
 	} else {
@@ -140,7 +140,7 @@ void cut_marked_segment(filestruct *top, size_t top_x, filestruct *bot,
 	    /* Here, the remainder line might get longer, so we
 	       realloc() it first. */
 	    top->data = charealloc(top->data, newsize);
-	    memmove(top->data + top_x, bot->data + bot_x,
+	    charmove(top->data + top_x, bot->data + bot_x,
 			newsize - top_x);
 	}
     }
@@ -364,7 +364,7 @@ int do_uncut_text(void)
 	    size_t cur_len = strlen(current->data);
 
 	    current->data = charealloc(current->data, cur_len + buf_len + 1);
-	    memmove(current->data + current_x + buf_len,
+	    charmove(current->data + current_x + buf_len,
 			current->data + current_x, cur_len - current_x + 1);
 	    strncpy(current->data + current_x, cutbuffer->data, buf_len);
 		/* Use strncpy() to not copy the terminal '\0'. */
diff --git a/src/nano.c b/src/nano.c
index 67fc1595976932e86b703d65ab466e57aae45f86..0e329b81ad4c440db0f09da4206c6e519c493ebe 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -990,7 +990,7 @@ void do_char(char ch)
     /* more dangerousness fun =) */
     current->data = charealloc(current->data, current_len + 2);
     assert(current_x <= current_len);
-    memmove(&current->data[current_x + 1],
+    charmove(&current->data[current_x + 1],
 	    &current->data[current_x],
 	    current_len - current_x + 1);
     current->data[current_x] = ch;
@@ -1043,7 +1043,7 @@ int do_delete(void)
 
     if (current_x != strlen(current->data)) {
 	/* Let's get dangerous */
-	memmove(&current->data[current_x], &current->data[current_x + 1],
+	charmove(&current->data[current_x], &current->data[current_x + 1],
 		strlen(current->data) - current_x);
 
 	align(&current->data);
@@ -2463,7 +2463,7 @@ int do_para_operation(int operation)
 		current->next->data = charealloc(current->next->data,
 			next_line_len + line_len - break_pos + 1);
 
-		memmove(current->next->data + indent_len + line_len - break_pos,
+		charmove(current->next->data + indent_len + line_len - break_pos,
 			current->next->data + indent_len,
 			next_line_len - indent_len + 1);
 		strcpy(current->next->data + indent_len,
@@ -2537,7 +2537,7 @@ int do_para_operation(int operation)
 		totsize -= indent_len;
 		current_y--;
 	    } else {
-		memmove(current->next->data + indent_len,
+		charmove(current->next->data + indent_len,
 			current->next->data + indent_len + break_pos + 1,
 			next_line_len - break_pos - indent_len);
 		null_at(&current->next->data,
diff --git a/src/winio.c b/src/winio.c
index 8318c31bd7dfaf8c0891854f61e9a072cccb4e97..53345003b060ff521c08bb72746d440060c9a6fd 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -635,7 +635,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
 	    break;
 	case NANO_DELETE_KEY:
 	    if (x < xend) {
-		memmove(answer + x, answer + x + 1, xend - x);
+		charmove(answer + x, answer + x + 1, xend - x);
 		xend--;
 	    }
 	    break;
@@ -647,7 +647,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
 	    break;
 	case NANO_BACKSPACE_KEY:
 	    if (x > 0) {
-		memmove(answer + x - 1, answer + x, xend - x + 1);
+		charmove(answer + x - 1, answer + x, xend - x + 1);
 		x--;
 		xend--;
 	    }
@@ -791,7 +791,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
 	    if (kbinput < 32 || kbinput == 127)
 		break;
 	    answer = charealloc(answer, xend + 2);
-	    memmove(answer + x + 1, answer + x, xend - x + 1);
+	    charmove(answer + x + 1, answer + x, xend - x + 1);
 	    xend++;
 	    answer[x] = kbinput;
 	    x++;