diff --git a/poppler/Form.cc b/poppler/Form.cc
index 85045b8..2f5a48e 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -1089,7 +1089,7 @@
   if (!isOn && noAllOff)
     return gFalse; // Don't allow to set all radio to off
 
-  char *current = getAppearanceState();
+  const char *current = getAppearanceState();
   GBool currentFound = gFalse, newFound = gFalse;
 
   for (int i = 0; i < numChildren; i++) {
diff --git a/poppler/Form.h b/poppler/Form.h
index 681d1db..62e8a20 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -382,7 +382,7 @@
   GBool setState (char *state);
   GBool getState(const char *state) const;
 
-  char *getAppearanceState() { return appearanceState.isName() ? appearanceState.getName() : NULL; }
+  const char *getAppearanceState() const { return appearanceState.isName() ? appearanceState.getName() : nullptr; }
 
   void fillChildrenSiblingsID () override;
   
diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc
index a5cb7d1..0813207 100644
--- a/poppler/Gfx.cc
+++ b/poppler/Gfx.cc
@@ -398,7 +398,7 @@
   return doLookupFont(name);
 }
 
-Object GfxResources::lookupXObject(char *name) {
+Object GfxResources::lookupXObject(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -412,7 +412,7 @@
   return Object(objNull);
 }
 
-Object GfxResources::lookupXObjectNF(char *name) {
+Object GfxResources::lookupXObjectNF(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -426,7 +426,7 @@
   return Object(objNull);
 }
 
-Object GfxResources::lookupMarkedContentNF(char *name) {
+Object GfxResources::lookupMarkedContentNF(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -454,7 +454,7 @@
   return Object(objNull);
 }
 
-GfxPattern *GfxResources::lookupPattern(char *name, OutputDev *out, GfxState *state) {
+GfxPattern *GfxResources::lookupPattern(const char *name, OutputDev *out, GfxState *state) {
   GfxResources *resPtr;
   GfxPattern *pattern;
 
@@ -477,7 +477,7 @@
   return nullptr;
 }
 
-GfxShading *GfxResources::lookupShading(char *name, OutputDev *out, GfxState *state) {
+GfxShading *GfxResources::lookupShading(const char *name, OutputDev *out, GfxState *state) {
   GfxResources *resPtr;
   GfxShading *shading;
 
@@ -494,7 +494,7 @@
   return nullptr;
 }
 
-Object GfxResources::lookupGState(char *name) {
+Object GfxResources::lookupGState(const char *name) {
   Object obj = lookupGStateNF(name);
   if (obj.isNull())
     return Object(objNull);
@@ -511,7 +511,7 @@
   return obj;
 }
 
-Object GfxResources::lookupGStateNF(char *name) {
+Object GfxResources::lookupGStateNF(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -4143,7 +4143,7 @@
 //------------------------------------------------------------------------
 
 void Gfx::opXObject(Object args[], int numArgs) {
-  char *name;
+  const char *name;
 
   if (!ocState && !out->needCharCount()) {
     return;
@@ -5031,11 +5031,11 @@
   pushMarkedContent();
   
   OCGs *contentConfig = catalog->getOptContentConfig();
-  char* name0 = args[0].getName();
+  const char* name0 = args[0].getName();
   if ( strncmp( name0, "OC", 2) == 0 && contentConfig) {
     if ( numArgs >= 2 ) {
       if (args[1].isName()) {
-        char* name1 = args[1].getName();
+        const char* name1 = args[1].getName();
         MarkedContentStack *mc = mcStack;
         mc->kind = gfxMCOptionalContent;
         Object markedContent = res->lookupMarkedContentNF( name1 );
diff --git a/poppler/Gfx.h b/poppler/Gfx.h
index e15af40..2ea0d9f 100644
--- a/poppler/Gfx.h
+++ b/poppler/Gfx.h
@@ -118,14 +118,14 @@
 
   GfxFont *lookupFont(const char *name);
   const GfxFont *lookupFont(const char *name) const;
-  Object lookupXObject(char *name);
-  Object lookupXObjectNF(char *name);
-  Object lookupMarkedContentNF(char *name);
+  Object lookupXObject(const char *name);
+  Object lookupXObjectNF(const char *name);
+  Object lookupMarkedContentNF(const char *name);
   Object lookupColorSpace(const char *name);
-  GfxPattern *lookupPattern(char *name, OutputDev *out, GfxState *state);
-  GfxShading *lookupShading(char *name, OutputDev *out, GfxState *state);
-  Object lookupGState(char *name);
-  Object lookupGStateNF(char *name);
+  GfxPattern *lookupPattern(const char *name, OutputDev *out, GfxState *state);
+  GfxShading *lookupShading(const char *name, OutputDev *out, GfxState *state);
+  Object lookupGState(const char *name);
+  Object lookupGStateNF(const char *name);
 
   GfxResources *getNext() { return next; }
 
diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc
index eb524ec..0ab78ad 100644
--- a/poppler/GfxFont.cc
+++ b/poppler/GfxFont.cc
@@ -871,7 +871,7 @@
 // Parse character names of the form 'Axx', 'xx', 'Ann', 'ABnn', or
 // 'nn', where 'A' and 'B' are any letters, 'xx' is two hex digits,
 // and 'nn' is decimal digits.
-static GBool parseNumericName(char *s, GBool hex, unsigned int *u) {
+static GBool parseNumericName(const char *s, GBool hex, unsigned int *u) {
   char *endptr;
 
   // Strip leading alpha characters.
@@ -2528,7 +2528,7 @@
 void GfxFontDict::hashFontObject1(Object *obj, FNVHash *h) {
   Object obj2;
   const GooString *s;
-  char *p;
+  const char *p;
   double r;
   int n, i;
 
diff --git a/poppler/Link.cc b/poppler/Link.cc
index 9ebf33e..4a20752 100644
--- a/poppler/Link.cc
+++ b/poppler/Link.cc
@@ -654,7 +654,7 @@
 
   tmp = obj->dictLookup("Operation");
   if (tmp.isName()) {
-    char *name = tmp.getName();
+    const char *name = tmp.getName();
     
     if (!strcmp(name, "Play")) {
       operation = operationTypePlay;
@@ -834,7 +834,7 @@
         if (stList)
 	  stateList->append(stList);
 
-	char *name = obj2.getName();
+	const char *name = obj2.getName();
 	stList = new StateList();
 	stList->list = new GooList();
 	if (!strcmp (name, "ON")) {
@@ -915,7 +915,7 @@
 // LinkUnknown
 //------------------------------------------------------------------------
 
-LinkUnknown::LinkUnknown(char *actionA) {
+LinkUnknown::LinkUnknown(const char *actionA) {
   action = new GooString(actionA);
 }
 
diff --git a/poppler/Link.h b/poppler/Link.h
index 1fc013e..3dbe57f 100644
--- a/poppler/Link.h
+++ b/poppler/Link.h
@@ -508,7 +508,7 @@
 public:
 
   // Build a LinkUnknown with the specified action type.
-  LinkUnknown(char *actionA);
+  LinkUnknown(const char *actionA);
 
   // Destructor.
   ~LinkUnknown();
diff --git a/poppler/MarkedContentOutputDev.cc b/poppler/MarkedContentOutputDev.cc
index 4920ad3..ddaa2d8 100644
--- a/poppler/MarkedContentOutputDev.cc
+++ b/poppler/MarkedContentOutputDev.cc
@@ -69,7 +69,7 @@
 }
 
 
-void MarkedContentOutputDev::beginMarkedContent(char *name, Dict *properties)
+void MarkedContentOutputDev::beginMarkedContent(const char *name, Dict *properties)
 {
   int id = -1;
   if (properties)
diff --git a/poppler/MarkedContentOutputDev.h b/poppler/MarkedContentOutputDev.h
index e2b69ae..a1b1178 100644
--- a/poppler/MarkedContentOutputDev.h
+++ b/poppler/MarkedContentOutputDev.h
@@ -109,7 +109,7 @@
                         CharCode c, int nBytes,
                         Unicode *u, int uLen) override;
 
-  void beginMarkedContent(char *name, Dict *properties) override;
+  void beginMarkedContent(const char *name, Dict *properties) override;
   void endMarkedContent(GfxState *state) override;
 
   const TextSpanArray& getTextSpans() const;
diff --git a/poppler/Movie.cc b/poppler/Movie.cc
index 2fe05da..82d7f3f 100644
--- a/poppler/Movie.cc
+++ b/poppler/Movie.cc
@@ -125,7 +125,7 @@
 
   obj1 = aDict->dictLookup("Mode");
   if (obj1.isName()) {
-    char* name = obj1.getName();
+    const char* name = obj1.getName();
     if (!strcmp(name, "Once")) {
       repeatMode = repeatModeOnce;
     } else if (!strcmp(name, "Open")) {
diff --git a/poppler/Object.h b/poppler/Object.h
index 7538253..97978f4 100644
--- a/poppler/Object.h
+++ b/poppler/Object.h
@@ -242,7 +242,7 @@
   // because the object it's not expected to have a NULL string.
   GooString *takeString() {
     OBJECT_TYPE_CHECK(objString); GooString *s = string; string = nullptr; return s; }
-  char *getName() const { OBJECT_TYPE_CHECK(objName); return cString; }
+  const char *getName() const { OBJECT_TYPE_CHECK(objName); return cString; }
   Array *getArray() const { OBJECT_TYPE_CHECK(objArray); return array; }
   Dict *getDict() const { OBJECT_TYPE_CHECK(objDict); return dict; }
   Stream *getStream() const { OBJECT_TYPE_CHECK(objStream); return stream; }
diff --git a/poppler/OutputDev.cc b/poppler/OutputDev.cc
index 8afa705..6d42fd4 100644
--- a/poppler/OutputDev.cc
+++ b/poppler/OutputDev.cc
@@ -160,13 +160,13 @@
 void OutputDev::endMarkedContent(GfxState *state) {
 }
 
-void OutputDev::beginMarkedContent(char *name, Dict *properties) {
+void OutputDev::beginMarkedContent(const char *name, Dict *properties) {
 }
 
-void OutputDev::markPoint(char *name) {
+void OutputDev::markPoint(const char *name) {
 }
 
-void OutputDev::markPoint(char *name, Dict *properties) {
+void OutputDev::markPoint(const char *name, Dict *properties) {
 }
 
 
diff --git a/poppler/OutputDev.h b/poppler/OutputDev.h
index 41518db..9dc4c3e 100644
--- a/poppler/OutputDev.h
+++ b/poppler/OutputDev.h
@@ -309,9 +309,9 @@
   //----- grouping operators
 
   virtual void endMarkedContent(GfxState *state);
-  virtual void beginMarkedContent(char *name, Dict *properties);
-  virtual void markPoint(char *name);
-  virtual void markPoint(char *name, Dict *properties);
+  virtual void beginMarkedContent(const char *name, Dict *properties);
+  virtual void markPoint(const char *name);
+  virtual void markPoint(const char *name, Dict *properties);
 
 
 
diff --git a/poppler/Rendition.cc b/poppler/Rendition.cc
index 8d30fb0..b74aca4 100644
--- a/poppler/Rendition.cc
+++ b/poppler/Rendition.cc
@@ -177,7 +177,7 @@
   if (tmp.isDict()) {
     Object oname = tmp.dictLookup("S");
     if (oname.isName()) {
-      char* name = oname.getName();
+      const char* name = oname.getName();
       if (!strcmp(name, "F"))
 	duration = -1; // infinity
       else if (!strcmp(name, "T")) {
diff --git a/poppler/Stream.cc b/poppler/Stream.cc
index 30095a5..15a6a9f 100644
--- a/poppler/Stream.cc
+++ b/poppler/Stream.cc
@@ -208,7 +208,7 @@
   return str;
 }
 
-Stream *Stream::makeFilter(char *name, Stream *str, Object *params, int recursion, Dict *dict) {
+Stream *Stream::makeFilter(const char *name, Stream *str, Object *params, int recursion, Dict *dict) {
   int pred;			// parameters
   int colors;
   int bits;
diff --git a/poppler/Stream.h b/poppler/Stream.h
index 3eca745..a3faccd 100644
--- a/poppler/Stream.h
+++ b/poppler/Stream.h
@@ -238,7 +238,7 @@
   virtual GBool hasGetChars() { return false; }
   virtual int getChars(int nChars, Guchar *buffer);
 
-  Stream *makeFilter(char *name, Stream *str, Object *params, int recursion = 0, Dict *dict = nullptr);
+  Stream *makeFilter(const char *name, Stream *str, Object *params, int recursion = 0, Dict *dict = nullptr);
 
   int ref;			// reference count
 #ifdef MULTITHREADED
