diff --git a/src/libavrdude.h b/src/libavrdude.h
index 460f66fd..4e22c5ed 100644
--- a/src/libavrdude.h
+++ b/src/libavrdude.h
@@ -283,7 +283,6 @@ typedef struct avrpart {
   int           lineno;             /* config file line number */
 } AVRPART;
 
-#define AVR_MEMDESCLEN 64
 typedef struct avrmem {
   const char *desc;           /* memory description ("flash", "eeprom", etc) */
   LISTID comments;            // Used by developer options -p*/[ASsr...]
diff --git a/src/term.c b/src/term.c
index 839e5608..512e5a3c 100644
--- a/src/term.c
+++ b/src/term.c
@@ -252,7 +252,7 @@ static int cmd_dump(PROGRAMMER * pgm, struct avrpart * p,
   }
 
   enum { read_size = 256 };
-  static char prevmem[AVR_MEMDESCLEN] = {0x00};
+  static const char *prevmem = "";
   char * memtype = argv[1];
   AVRMEM * mem = avr_locate_mem(p, memtype);
   if (mem == NULL) {
@@ -282,7 +282,7 @@ static int cmd_dump(PROGRAMMER * pgm, struct avrpart * p,
   // Get no. bytes to read if present
   static int len = read_size;
   if (argc >= 3) {
-    memset(prevmem, 0x00, sizeof(prevmem));
+    prevmem = cache_string("");
     if (strcmp(argv[argc - 1], "...") == 0) {
       if (argc == 3)
         addr = 0;
@@ -303,8 +303,7 @@ static int cmd_dump(PROGRAMMER * pgm, struct avrpart * p,
     if (strncmp(prevmem, memtype, strlen(memtype)) != 0) {
       addr = 0;
       len  = read_size;
-      strncpy(prevmem, memtype, sizeof(prevmem) - 1);
-      prevmem[sizeof(prevmem) - 1] = 0;
+      prevmem = cache_string(mem->desc);
     }
     if (addr >= maxsize)
       addr = 0; // Wrap around