diff --git a/ChangeLog b/ChangeLog
index d4ba6b17ef..a26dff77ec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Mon Sep  1 23:32:46 2008  Tanaka Akira  <akr@fsij.org>
+
+	* transcode_data.h (BYTE_LOOKUP_BASE): abstract accessor for
+	  BYTE_LOOKUP.
+	  (BYTE_LOOKUP_INFO): ditto.
+
+	* transcode.c (transcode_restartable0): use BYTE_LOOKUP_BASE and
+	  BYTE_LOOKUP_INFO.
+
 Mon Sep  1 23:14:25 2008  Tanaka Akira  <akr@fsij.org>
 
 	* tool/transcode-tblgen.rb: gather infos arrays and BYTE_LOOKUPs.
diff --git a/transcode.c b/transcode.c
index 53c0ae7010..a67565e3e4 100644
--- a/transcode.c
+++ b/transcode.c
@@ -493,11 +493,11 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
 
 	next_byte = (unsigned char)*in_p++;
       follow_byte:
-        if (next_byte < next_table->base[0] || next_table->base[1] < next_byte)
+        if (next_byte < BYTE_LOOKUP_BASE(next_table)[0] || BYTE_LOOKUP_BASE(next_table)[1] < next_byte)
             next_info = INVALID;
         else {
-            unsigned int next_offset = next_table->base[2+next_byte-next_table->base[0]];
-            next_info = (VALUE)next_table->info[next_offset];
+            unsigned int next_offset = BYTE_LOOKUP_BASE(next_table)[2+next_byte-BYTE_LOOKUP_BASE(next_table)[0]];
+            next_info = (VALUE)BYTE_LOOKUP_INFO(next_table)[next_offset];
         }
       follow_info:
 	switch (next_info & 0x1F) {
diff --git a/transcode_data.h b/transcode_data.h
index 1b8eeae379..b705760273 100644
--- a/transcode_data.h
+++ b/transcode_data.h
@@ -21,6 +21,9 @@ typedef struct byte_lookup {
     const struct byte_lookup *const *info;
 } BYTE_LOOKUP;
 
+#define BYTE_LOOKUP_BASE(bl) ((bl)->base)
+#define BYTE_LOOKUP_INFO(bl) ((bl)->info)
+
 #ifndef PType
 /* data file needs to treat this as a pointer, to remove warnings */
 #define PType (const BYTE_LOOKUP *)