diff --git a/fofi/FoFiEncodings.cc b/fofi/FoFiEncodings.cc
index 905a3d9..43a715e 100644
--- a/fofi/FoFiEncodings.cc
+++ b/fofi/FoFiEncodings.cc
@@ -945,7 +945,7 @@
   "Semibold"
 };
 
-unsigned short fofiType1CISOAdobeCharset[229] = {
+const unsigned short fofiType1CISOAdobeCharset[229] = {
     0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
    10,  11,  12,  13,  14,  15,  16,  17,  18,  19,
    20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
@@ -971,7 +971,7 @@
   220, 221, 222, 223, 224, 225, 226, 227, 228
 };
 
-unsigned short fofiType1CExpertCharset[166] = {
+const unsigned short fofiType1CExpertCharset[166] = {
     0,   1, 229, 230, 231, 232, 233, 234, 235, 236,
   237, 238,  13,  14,  15,  99, 239, 240, 241, 242,
   243, 244, 245, 246, 247, 248,  27,  28, 249, 250,
@@ -991,7 +991,7 @@
   373, 374, 375, 376, 377, 378
 };
 
-unsigned short fofiType1CExpertSubsetCharset[87] = {
+const unsigned short fofiType1CExpertSubsetCharset[87] = {
     0,   1, 231, 232, 235, 236, 237, 238,  13,  14,
    15,  99, 239, 240, 241, 242, 243, 244, 245, 246,
   247, 248,  27,  28, 249, 250, 251, 253, 254, 255,
diff --git a/fofi/FoFiEncodings.h b/fofi/FoFiEncodings.h
index c4fbf48..72a438b 100644
--- a/fofi/FoFiEncodings.h
+++ b/fofi/FoFiEncodings.h
@@ -35,8 +35,8 @@
 //------------------------------------------------------------------------
 
 extern const char *fofiType1CStdStrings[391];
-extern unsigned short fofiType1CISOAdobeCharset[229];
-extern unsigned short fofiType1CExpertCharset[166];
-extern unsigned short fofiType1CExpertSubsetCharset[87];
+extern const unsigned short fofiType1CISOAdobeCharset[229];
+extern const unsigned short fofiType1CExpertCharset[166];
+extern const unsigned short fofiType1CExpertSubsetCharset[87];
 
 #endif
diff --git a/fofi/FoFiType1C.cc b/fofi/FoFiType1C.cc
index c3d47b4..0322386 100644
--- a/fofi/FoFiType1C.cc
+++ b/fofi/FoFiType1C.cc
@@ -2502,13 +2502,13 @@
   int nLeft, i, j;
 
   if (topDict.charsetOffset == 0) {
-    charset = fofiType1CISOAdobeCharset;
+    charset = const_cast<unsigned short*>(fofiType1CISOAdobeCharset);
     charsetLength = sizeof(fofiType1CISOAdobeCharset) / sizeof(unsigned short);
   } else if (topDict.charsetOffset == 1) {
-    charset = fofiType1CExpertCharset;
+    charset = const_cast<unsigned short*>(fofiType1CExpertCharset);
     charsetLength = sizeof(fofiType1CExpertCharset) / sizeof(unsigned short);
   } else if (topDict.charsetOffset == 2) {
-    charset = fofiType1CExpertSubsetCharset;
+    charset = const_cast<unsigned short*>(fofiType1CExpertSubsetCharset);
     charsetLength = sizeof(fofiType1CExpertSubsetCharset) / sizeof(unsigned short);
   } else {
     charset = (unsigned short *)gmallocn(nGlyphs, sizeof(unsigned short));
diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc
index 47627ad..1288f03 100644
--- a/poppler/Gfx.cc
+++ b/poppler/Gfx.cc
@@ -133,7 +133,7 @@
 // Operator table
 //------------------------------------------------------------------------
 
-Operator Gfx::opTab[] = {
+const Operator Gfx::opTab[] = {
   {"\"",  3, {tchkNum,    tchkNum,    tchkString},
           &Gfx::opMoveSetShowText},
   {"'",   1, {tchkString},
@@ -823,7 +823,7 @@
 }
 
 void Gfx::execOp(Object *cmd, Object args[], int numArgs) {
-  Operator *op;
+  const Operator *op;
   Object *argPtr;
   int i;
 
@@ -870,7 +870,7 @@
   (this->*op->func)(argPtr, numArgs);
 }
 
-Operator *Gfx::findOp(const char *name) {
+const Operator *Gfx::findOp(const char *name) {
   int a, b, m, cmp;
 
   a = -1;
diff --git a/poppler/Gfx.h b/poppler/Gfx.h
index 19462e8..df4a2ea 100644
--- a/poppler/Gfx.h
+++ b/poppler/Gfx.h
@@ -240,11 +240,11 @@
     (*abortCheckCbk)(void *data);
   void *abortCheckCbkData;
 
-  static Operator opTab[];	// table of operators
+  static const Operator opTab[]; // table of operators
 
   void go(bool topLevel);
   void execOp(Object *cmd, Object args[], int numArgs);
-  Operator *findOp(const char *name);
+  const Operator *findOp(const char *name);
   bool checkArg(Object *arg, TchkType type);
   Goffset getPos();
 
diff --git a/poppler/JArithmeticDecoder.cc b/poppler/JArithmeticDecoder.cc
index 404f233..cba1cec 100644
--- a/poppler/JArithmeticDecoder.cc
+++ b/poppler/JArithmeticDecoder.cc
@@ -50,7 +50,7 @@
 // JArithmeticDecoder
 //------------------------------------------------------------------------
 
-unsigned int JArithmeticDecoder::qeTab[47] = {
+unsigned const int JArithmeticDecoder::qeTab[47] = {
   0x56010000, 0x34010000, 0x18010000, 0x0AC10000,
   0x05210000, 0x02210000, 0x56010000, 0x54010000,
   0x48010000, 0x38010000, 0x30010000, 0x24010000,
@@ -65,19 +65,19 @@
   0x00050000, 0x00010000, 0x56010000
 };
 
-int JArithmeticDecoder::nmpsTab[47] = {
+const int JArithmeticDecoder::nmpsTab[47] = {
    1,  2,  3,  4,  5, 38,  7,  8,  9, 10, 11, 12, 13, 29, 15, 16,
   17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
   33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 45, 46
 };
 
-int JArithmeticDecoder::nlpsTab[47] = {
+const int JArithmeticDecoder::nlpsTab[47] = {
    1,  6,  9, 12, 29, 33,  6, 14, 14, 14, 17, 18, 20, 21, 14, 14,
   15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
   30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 46
 };
 
-int JArithmeticDecoder::switchTab[47] = {
+const int JArithmeticDecoder::switchTab[47] = {
   1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
diff --git a/poppler/JArithmeticDecoder.h b/poppler/JArithmeticDecoder.h
index 993901a..2c9c525 100644
--- a/poppler/JArithmeticDecoder.h
+++ b/poppler/JArithmeticDecoder.h
@@ -103,10 +103,10 @@
   int decodeIntBit(JArithmeticDecoderStats *stats);
   void byteIn();
 
-  static unsigned int qeTab[47];
-  static int nmpsTab[47];
-  static int nlpsTab[47];
-  static int switchTab[47];
+  static const unsigned int qeTab[47];
+  static const int nmpsTab[47];
+  static const int nlpsTab[47];
+  static const int switchTab[47];
 
   unsigned int buf0, buf1;
   unsigned int c, a;
diff --git a/poppler/JBIG2Stream.cc b/poppler/JBIG2Stream.cc
index 56f97fd..f86e924 100644
--- a/poppler/JBIG2Stream.cc
+++ b/poppler/JBIG2Stream.cc
@@ -63,7 +63,7 @@
   unsigned int prefix;
 };
 
-static JBIG2HuffmanTable huffTableA[] = {
+static const JBIG2HuffmanTable huffTableA[] = {
   {     0, 1,  4,              0x000 },
   {    16, 2,  8,              0x002 },
   {   272, 3, 16,              0x006 },
@@ -71,7 +71,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableB[] = {
+static const JBIG2HuffmanTable huffTableB[] = {
   {     0, 1,  0,              0x000 },
   {     1, 2,  0,              0x002 },
   {     2, 3,  0,              0x006 },
@@ -82,7 +82,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableC[] = {
+static const JBIG2HuffmanTable huffTableC[] = {
   {     0, 1,  0,              0x000 },
   {     1, 2,  0,              0x002 },
   {     2, 3,  0,              0x006 },
@@ -95,7 +95,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableD[] = {
+static const JBIG2HuffmanTable huffTableD[] = {
   {     1, 1,  0,              0x000 },
   {     2, 2,  0,              0x002 },
   {     3, 3,  0,              0x006 },
@@ -105,7 +105,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableE[] = {
+static const JBIG2HuffmanTable huffTableE[] = {
   {     1, 1,  0,              0x000 },
   {     2, 2,  0,              0x002 },
   {     3, 3,  0,              0x006 },
@@ -117,7 +117,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableF[] = {
+static const JBIG2HuffmanTable huffTableF[] = {
   {     0, 2,  7,              0x000 },
   {   128, 3,  7,              0x002 },
   {   256, 3,  8,              0x003 },
@@ -135,7 +135,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableG[] = {
+static const JBIG2HuffmanTable huffTableG[] = {
   {  -512, 3,  8,              0x000 },
   {   256, 3,  8,              0x001 },
   {   512, 3,  9,              0x002 },
@@ -154,7 +154,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableH[] = {
+static const JBIG2HuffmanTable huffTableH[] = {
   {     0, 2,  1,              0x000 },
   {     0, 2, jbig2HuffmanOOB, 0x001 },
   {     4, 3,  4,              0x004 },
@@ -179,7 +179,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableI[] = {
+static const JBIG2HuffmanTable huffTableI[] = {
   {     0, 2, jbig2HuffmanOOB, 0x000 },
   {    -1, 3,  1,              0x002 },
   {     1, 3,  1,              0x003 },
@@ -205,7 +205,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableJ[] = {
+static const JBIG2HuffmanTable huffTableJ[] = {
   {    -2, 2,  2,              0x000 },
   {     6, 2,  6,              0x001 },
   {     0, 2, jbig2HuffmanOOB, 0x002 },
@@ -230,7 +230,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableK[] = {
+static const JBIG2HuffmanTable huffTableK[] = {
   {     1, 1,  0,              0x000 },
   {     2, 2,  1,              0x002 },
   {     4, 4,  0,              0x00c },
@@ -247,7 +247,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableL[] = {
+static const JBIG2HuffmanTable huffTableL[] = {
   {     1, 1,  0,              0x000 },
   {     2, 2,  0,              0x002 },
   {     3, 3,  1,              0x006 },
@@ -264,7 +264,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableM[] = {
+static const JBIG2HuffmanTable huffTableM[] = {
   {     1, 1,  0,              0x000 },
   {     2, 3,  0,              0x004 },
   {     7, 3,  3,              0x005 },
@@ -281,7 +281,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableN[] = {
+static const JBIG2HuffmanTable huffTableN[] = {
   {     0, 1,  0,              0x000 },
   {    -2, 3,  0,              0x004 },
   {    -1, 3,  0,              0x005 },
@@ -290,7 +290,7 @@
   {     0, 0, jbig2HuffmanEOT, 0     }
 };
 
-static JBIG2HuffmanTable huffTableO[] = {
+static const JBIG2HuffmanTable huffTableO[] = {
   {     0, 1,  0,              0x000 },
   {    -1, 3,  0,              0x004 },
   {     1, 3,  0,              0x005 },
@@ -321,7 +321,7 @@
   void reset();
 
   // Returns false for OOB, otherwise sets *<x> and returns true.
-  bool decodeInt(int *x, JBIG2HuffmanTable *table);
+  bool decodeInt(int *x, const JBIG2HuffmanTable *table);
 
   unsigned int readBits(unsigned int n);
   unsigned int readBit();
@@ -350,7 +350,7 @@
 }
 
 //~ optimize this
-bool JBIG2HuffmanDecoder::decodeInt(int *x, JBIG2HuffmanTable *table) {
+bool JBIG2HuffmanDecoder::decodeInt(int *x, const JBIG2HuffmanTable *table) {
   unsigned int i, len, prefix;
 
   i = 0;
@@ -1559,8 +1559,8 @@
 bool JBIG2Stream::readSymbolDictSeg(unsigned int segNum, unsigned int length,
 				     unsigned int *refSegs, unsigned int nRefSegs) {
   JBIG2SymbolDict *symbolDict;
-  JBIG2HuffmanTable *huffDHTable, *huffDWTable;
-  JBIG2HuffmanTable *huffBMSizeTable, *huffAggInstTable;
+  const JBIG2HuffmanTable *huffDHTable, *huffDWTable;
+  const JBIG2HuffmanTable *huffBMSizeTable, *huffAggInstTable;
   JBIG2Segment *seg;
   std::vector<JBIG2Segment*> *codeTables;
   JBIG2SymbolDict *inputSymbolDict;
@@ -2021,9 +2021,9 @@
   JBIG2Bitmap *bitmap;
   JBIG2HuffmanTable runLengthTab[36];
   JBIG2HuffmanTable *symCodeTab = nullptr;
-  JBIG2HuffmanTable *huffFSTable, *huffDSTable, *huffDTTable;
-  JBIG2HuffmanTable *huffRDWTable, *huffRDHTable;
-  JBIG2HuffmanTable *huffRDXTable, *huffRDYTable, *huffRSizeTable;
+  const JBIG2HuffmanTable *huffFSTable, *huffDSTable, *huffDTTable;
+  const JBIG2HuffmanTable *huffRDWTable, *huffRDHTable;
+  const JBIG2HuffmanTable *huffRDXTable, *huffRDYTable, *huffRSizeTable;
   JBIG2Segment *seg;
   std::vector<JBIG2Segment*> *codeTables;
   JBIG2SymbolDict *symbolDict;
@@ -2340,20 +2340,20 @@
 					 unsigned int numInstances,
 					 unsigned int logStrips,
 					 int numSyms,
-					 JBIG2HuffmanTable *symCodeTab,
+					 const JBIG2HuffmanTable *symCodeTab,
 					 unsigned int symCodeLen,
 					 JBIG2Bitmap **syms,
 					 unsigned int defPixel, unsigned int combOp,
 					 unsigned int transposed, unsigned int refCorner,
 					 int sOffset,
-					 JBIG2HuffmanTable *huffFSTable,
-					 JBIG2HuffmanTable *huffDSTable,
-					 JBIG2HuffmanTable *huffDTTable,
-					 JBIG2HuffmanTable *huffRDWTable,
-					 JBIG2HuffmanTable *huffRDHTable,
-					 JBIG2HuffmanTable *huffRDXTable,
-					 JBIG2HuffmanTable *huffRDYTable,
-					 JBIG2HuffmanTable *huffRSizeTable,
+					 const JBIG2HuffmanTable *huffFSTable,
+					 const JBIG2HuffmanTable *huffDSTable,
+					 const JBIG2HuffmanTable *huffDTTable,
+					 const JBIG2HuffmanTable *huffRDWTable,
+					 const JBIG2HuffmanTable *huffRDHTable,
+					 const JBIG2HuffmanTable *huffRDXTable,
+					 const JBIG2HuffmanTable *huffRDYTable,
+					 const JBIG2HuffmanTable *huffRSizeTable,
 					 unsigned int templ,
 					 int *atx, int *aty) {
   JBIG2Bitmap *bitmap;
diff --git a/poppler/JBIG2Stream.h b/poppler/JBIG2Stream.h
index 9222e8f..b50703d 100644
--- a/poppler/JBIG2Stream.h
+++ b/poppler/JBIG2Stream.h
@@ -70,20 +70,20 @@
 			      unsigned int numInstances,
 			      unsigned int logStrips,
 			      int numSyms,
-			      JBIG2HuffmanTable *symCodeTab,
+			      const JBIG2HuffmanTable *symCodeTab,
 			      unsigned int symCodeLen,
 			      JBIG2Bitmap **syms,
 			      unsigned int defPixel, unsigned int combOp,
 			      unsigned int transposed, unsigned int refCorner,
 			      int sOffset,
-			      JBIG2HuffmanTable *huffFSTable,
-			      JBIG2HuffmanTable *huffDSTable,
-			      JBIG2HuffmanTable *huffDTTable,
-			      JBIG2HuffmanTable *huffRDWTable,
-			      JBIG2HuffmanTable *huffRDHTable,
-			      JBIG2HuffmanTable *huffRDXTable,
-			      JBIG2HuffmanTable *huffRDYTable,
-			      JBIG2HuffmanTable *huffRSizeTable,
+			      const JBIG2HuffmanTable *huffFSTable,
+			      const JBIG2HuffmanTable *huffDSTable,
+			      const JBIG2HuffmanTable *huffDTTable,
+			      const JBIG2HuffmanTable *huffRDWTable,
+			      const JBIG2HuffmanTable *huffRDHTable,
+			      const JBIG2HuffmanTable *huffRDXTable,
+			      const JBIG2HuffmanTable *huffRDYTable,
+			      const JBIG2HuffmanTable *huffRSizeTable,
 			      unsigned int templ,
 			      int *atx, int *aty);
   void readPatternDictSeg(unsigned int segNum, unsigned int length);
diff --git a/poppler/PDFDocEncoding.cc b/poppler/PDFDocEncoding.cc
index 7940834..422a79f 100644
--- a/poppler/PDFDocEncoding.cc
+++ b/poppler/PDFDocEncoding.cc
@@ -33,7 +33,7 @@
 // the corresponding Unicode values.  Other control characters are left
 // undefined.
 
-Unicode pdfDocEncoding[256] = {
+const Unicode pdfDocEncoding[256] = {
   0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, // 00
   0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
   0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, // 10
diff --git a/poppler/PDFDocEncoding.h b/poppler/PDFDocEncoding.h
index eed599f..e404c12 100644
--- a/poppler/PDFDocEncoding.h
+++ b/poppler/PDFDocEncoding.h
@@ -27,7 +27,7 @@
 
 class GooString;
 
-extern Unicode pdfDocEncoding[256];
+extern const Unicode pdfDocEncoding[256];
 
 char* pdfDocEncodingToUTF16 (const GooString* orig, int* length);
 
diff --git a/poppler/Stream.cc b/poppler/Stream.cc
index 99ccbd2..7bd6b2d 100644
--- a/poppler/Stream.cc
+++ b/poppler/Stream.cc
@@ -3845,11 +3845,11 @@
 // FlateStream
 //------------------------------------------------------------------------
 
-int FlateStream::codeLenCodeMap[flateMaxCodeLenCodes] = {
+const int FlateStream::codeLenCodeMap[flateMaxCodeLenCodes] = {
   16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
 };
 
-FlateDecode FlateStream::lengthDecode[flateMaxLitCodes-257] = {
+const FlateDecode FlateStream::lengthDecode[flateMaxLitCodes-257] = {
   {0,   3},
   {0,   4},
   {0,   5},
@@ -3883,7 +3883,7 @@
   {0, 258}
 };
 
-FlateDecode FlateStream::distDecode[flateMaxDistCodes] = {
+const FlateDecode FlateStream::distDecode[flateMaxDistCodes] = {
   { 0,     1},
   { 0,     2},
   { 0,     3},
@@ -3916,7 +3916,7 @@
   {13, 24577}
 };
 
-static FlateCode flateFixedLitCodeTabCodes[512] = {
+static const FlateCode flateFixedLitCodeTabCodes[512] = {
   {7, 0x0100},
   {8, 0x0050},
   {8, 0x0010},
@@ -4432,10 +4432,10 @@
 };
 
 FlateHuffmanTab FlateStream::fixedLitCodeTab = {
-  flateFixedLitCodeTabCodes, 9
+  const_cast<FlateCode*>(flateFixedLitCodeTabCodes), 9
 };
 
-static FlateCode flateFixedDistCodeTabCodes[32] = {
+static const FlateCode flateFixedDistCodeTabCodes[32] = {
   {5, 0x0000},
   {5, 0x0010},
   {5, 0x0008},
@@ -4471,7 +4471,7 @@
 };
 
 FlateHuffmanTab FlateStream::fixedDistCodeTab = {
-  flateFixedDistCodeTabCodes, 5
+  const_cast<FlateCode*>(flateFixedDistCodeTabCodes), 5
 };
 
 FlateStream::FlateStream(Stream *strA, int predictor, int columns,
diff --git a/poppler/Stream.h b/poppler/Stream.h
index 32987c4..36bdf53 100644
--- a/poppler/Stream.h
+++ b/poppler/Stream.h
@@ -1124,11 +1124,11 @@
   bool endOfBlock;		// set when end of block is reached
   bool eof;			// set when end of stream is reached
 
-  static int			// code length code reordering
+  static const int		// code length code reordering
     codeLenCodeMap[flateMaxCodeLenCodes];
-  static FlateDecode		// length decoding info
+  static const FlateDecode	// length decoding info
     lengthDecode[flateMaxLitCodes-257];
-  static FlateDecode		// distance decoding info
+  static const FlateDecode	// distance decoding info
     distDecode[flateMaxDistCodes];
   static FlateHuffmanTab	// fixed literal code table
     fixedLitCodeTab;
diff --git a/poppler/UnicodeMap.cc b/poppler/UnicodeMap.cc
index 8f271d5..09014a6 100644
--- a/poppler/UnicodeMap.cc
+++ b/poppler/UnicodeMap.cc
@@ -139,11 +139,11 @@
 }
 
 UnicodeMap::UnicodeMap(const char *encodingNameA, bool unicodeOutA,
-		       UnicodeMapRange *rangesA, int lenA) {
+		       const UnicodeMapRange *rangesA, int lenA) {
   encodingName = new GooString(encodingNameA);
   unicodeOut = unicodeOutA;
   kind = unicodeMapResident;
-  ranges = rangesA;
+  ranges = const_cast<UnicodeMapRange*>(rangesA);
   len = lenA;
   eMaps = nullptr;
   eMapsLen = 0;
diff --git a/poppler/UnicodeMap.h b/poppler/UnicodeMap.h
index 383a693..4373c90 100644
--- a/poppler/UnicodeMap.h
+++ b/poppler/UnicodeMap.h
@@ -61,7 +61,7 @@
 
   // Create a resident UnicodeMap.
   UnicodeMap(const char *encodingNameA, bool unicodeOutA,
-	     UnicodeMapRange *rangesA, int lenA);
+	     const UnicodeMapRange *rangesA, int lenA);
 
   // Create a resident UnicodeMap that uses a function instead of a
   // list of ranges.
diff --git a/poppler/UnicodeMapTables.h b/poppler/UnicodeMapTables.h
index 073e474..3733a63 100644
--- a/poppler/UnicodeMapTables.h
+++ b/poppler/UnicodeMapTables.h
@@ -6,7 +6,7 @@
 //
 //========================================================================
 
-static UnicodeMapRange latin1UnicodeMapRanges[] = {
+static const UnicodeMapRange latin1UnicodeMapRanges[] = {
   { 0x000a, 0x000a, 0x0a, 1 },
   { 0x000c, 0x000d, 0x0c, 1 },
   { 0x0020, 0x007e, 0x20, 1 },
@@ -70,7 +70,7 @@
 };
 #define latin1UnicodeMapLen (sizeof(latin1UnicodeMapRanges) / sizeof(UnicodeMapRange))
 
-static UnicodeMapRange ascii7UnicodeMapRanges[] = {
+static const UnicodeMapRange ascii7UnicodeMapRanges[] = {
   { 0x000a, 0x000a, 0x0a, 1 },
   { 0x000c, 0x000d, 0x0c, 1 },
   { 0x0020, 0x005f, 0x20, 1 },
@@ -205,7 +205,7 @@
 };
 #define ascii7UnicodeMapLen (sizeof(ascii7UnicodeMapRanges) / sizeof(UnicodeMapRange))
 
-static UnicodeMapRange symbolUnicodeMapRanges[] = {
+static const UnicodeMapRange symbolUnicodeMapRanges[] = {
   { 0x0020, 0x0021, 0x20, 1 },
   { 0x0023, 0x0023, 0x23, 1 },
   { 0x0025, 0x0026, 0x25, 1 },
@@ -330,7 +330,7 @@
 };
 #define symbolUnicodeMapLen (sizeof(symbolUnicodeMapRanges) / sizeof(UnicodeMapRange))
 
-static UnicodeMapRange zapfDingbatsUnicodeMapRanges[] = {
+static const UnicodeMapRange zapfDingbatsUnicodeMapRanges[] = {
   { 0x0020, 0x0020, 0x20, 1 },
   { 0x2192, 0x2192, 0xd5, 1 },
   { 0x2194, 0x2195, 0xd6, 1 },
