diff --git a/include/common/chtbl.h b/include/common/chtbl.h
new file mode 100644
index 0000000..38b495f
--- /dev/null
+++ b/include/common/chtbl.h
@@ -0,0 +1,63 @@
+/*
+  This File is copied from
+  
+  http://www.oreilly.com/catalog/masteralgoc/index.html
+  Mastering Algorithms with C
+  By Kyle Loudon
+  ISBN: 1-56592-453-3
+  Publishd by O'Reilly
+  
+ */
+
+/*****************************************************************************
+*                                                                            *
+*  ------------------------------- chtbl.h --------------------------------  *
+*                                                                            *
+*****************************************************************************/
+
+#ifndef _COMMON_CHTBL_H
+#define _COMMON_CHTBL_H
+
+#include <stdlib.h>
+
+#include "list.h"
+
+/*****************************************************************************
+*                                                                            *
+*  Define a structure for chained hash tables.                               *
+*                                                                            *
+*****************************************************************************/
+
+typedef struct CHTbl_ {
+
+  int                buckets;
+
+  int                (*h)(const void *key);
+  int                (*match)(const void *key1, const void *key2);
+  void               (*destroy)(void *data);
+
+  int                size;
+  List               *table;
+} CHTbl;
+
+/*****************************************************************************
+ *                                                                            *
+ *  --------------------------- Public Interface ---------------------------  *
+ *                                                                            *
+ *****************************************************************************/
+
+int chtbl_init(CHTbl *htbl, int buckets, int (*h)(const void *key), int
+	       (*match)(const void *key1, const void *key2), void (*destroy)(void *data));
+
+void chtbl_destroy(CHTbl *htbl);
+
+int chtbl_insert(CHTbl *htbl, const void *data);
+
+int chtbl_remove(CHTbl *htbl, void **data);
+
+int chtbl_lookup(const CHTbl *htbl, void **data);
+
+#define chtbl_size(htbl) ((htbl)->size)
+
+#endif /* _COMMON_CHTBL_H */
+
