diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index 44b90b1..eb99239 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -1547,7 +1547,7 @@
   }
 }
 
-static void printCXIndexFile(CXIdxFile file) {
+static void printCXIndexFile(CXIdxClientFile file) {
   CXString filename = clang_getFileName((CXFile)file);
   printf("%s", clang_getCString(filename));
   clang_disposeString(filename);
@@ -1556,7 +1556,7 @@
 static void printCXIndexLoc(CXIdxLoc loc) {
   CXString filename;
   const char *cname, *end;
-  CXIdxFile file;
+  CXIdxClientFile file;
   unsigned line, column;
   int isHeader;
   
@@ -1577,88 +1577,63 @@
   printf("%d:%d", line, column);
 }
 
-static CXIdxEntity makeCXIndexEntity(CXIdxIndexedEntityInfo *info) {
+static CXIdxClientEntity makeClientEntity(CXIdxEntityInfo *info, CXIdxLoc loc) {
   const char *name;
-  CXIdxLoc loc;
   char *newStr;
-  CXIdxFile file;
+  CXIdxClientFile file;
   unsigned line, column;
   
-  name = info->entityInfo->name;
+  name = info->name;
   if (!name)
     name = "<anon-tag>";
 
-  loc = info->declInfo->loc;
   clang_indexLoc_getFileLocation(loc, &file, 0, &line, &column, 0);
   /* FIXME: free these.*/
   newStr = (char *)malloc(strlen(name) + 10);
   sprintf(newStr, "%s:%d:%d", name, line, column);
-  return (CXIdxEntity)newStr;
+  return (CXIdxClientEntity)newStr;
 }
 
-static CXIdxContainer makeCXIndexContainer(CXIdxEntity entity) {
-  return (CXIdxContainer)entity;
-}
-
-static void printCXIndexEntity(CXIdxEntity entity) {
-  printf("{%s}", (const char *)entity);
-}
-
-static void printCXIndexContainer(CXIdxContainer container) {
+static void printCXIndexContainer(CXIdxClientContainer container) {
   printf("[%s]", (const char *)container);
 }
 
-static void printIndexedDeclInfo(CXIdxIndexedDeclInfo *info) {
-  printf(" | cursor: ");
-  PrintCursor(info->cursor);
-  printf(" | loc: ");
-  printCXIndexLoc(info->loc);
-  printf(" | container: ");
-  printCXIndexContainer(info->container);
+static const char *getEntityKindString(CXIdxEntityKind kind) {
+  switch (kind) {
+  case CXIdxEntity_Unexposed: return "<<UNEXPOSED>>";
+  case CXIdxEntity_Typedef: return "typedef";
+  case CXIdxEntity_Function: return "function";
+  case CXIdxEntity_Variable: return "variable";
+  case CXIdxEntity_Field: return "field";
+  case CXIdxEntity_EnumConstant: return "enumerator";
+  case CXIdxEntity_ObjCClass: return "objc-class";
+  case CXIdxEntity_ObjCProtocol: return "objc-protocol";
+  case CXIdxEntity_ObjCCategory: return "objc-category";
+  case CXIdxEntity_ObjCMethod: return "objc-method";
+  case CXIdxEntity_ObjCProperty: return "objc-property";
+  case CXIdxEntity_ObjCIvar: return "objc-ivar";
+  case CXIdxEntity_Enum: return "enum";
+  case CXIdxEntity_Struct: return "struct";
+  case CXIdxEntity_Union: return "union";
+  case CXIdxEntity_CXXClass: return "c++-class";
+  }
 }
 
-static void printIndexedEntityInfo(const char *cb,
-                                   CXClientData client_data,
-                                   CXIdxIndexedEntityInfo *info) {
+static void printEntityInfo(const char *cb,
+                            CXClientData client_data,
+                            CXIdxEntityInfo *info) {
   const char *name;
   IndexData *index_data;
   index_data = (IndexData *)client_data;
   printCheck(index_data);
 
-  name = info->entityInfo->name;
+  name = info->name;
   if (!name)
     name = "<anon-tag>";
 
-  printf("%s: %s", cb, info->entityInfo->name);
-  printIndexedDeclInfo(info->declInfo);
-  printf(" | USR: %s", info->entityInfo->USR);
-}
-
-static void printIndexedRedeclInfo(const char *cb,
-                                   CXClientData client_data,
-                                   CXIdxIndexedRedeclInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("%s redeclaration: ", cb);
-  printCXIndexEntity(info->entity);
-  printIndexedDeclInfo(info->declInfo);
-}
-
-static void printStartedContainerInfo(const char *cb,
-                                   CXClientData client_data,
-                                   CXIdxContainerInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("%s: ", cb);
-  printCXIndexEntity(info->entity);
-  printf(" | cursor: ");
-  PrintCursor(info->cursor);
-  printf(" | loc: ");
-  printCXIndexLoc(info->loc);
+  printf("%s: kind: %s", cb, getEntityKindString(info->kind));
+  printf(" | name: %s", name);
+  printf(" | USR: %s", info->USR);
 }
 
 static void index_diagnostic(CXClientData client_data,
@@ -1680,26 +1655,36 @@
   }
 }
 
-static CXIdxFile index_recordFile(CXClientData client_data,
-                                  CXFile file, void *reserved) {
-  return (CXIdxFile)file;
+static CXIdxClientFile index_enteredMainFile(CXClientData client_data,
+                                       CXFile file, void *reserved) {
+  IndexData *index_data;
+  index_data = (IndexData *)client_data;
+  printCheck(index_data);
+
+  printf("[enteredMainFile]: ");
+  printCXIndexFile((CXIdxClientFile)file);
+  printf("\n");
+
+  return (CXIdxClientFile)file;
 }
 
-static void index_ppIncludedFile(CXClientData client_data,
-                                 CXIdxIncludedFileInfo *info) {
+static CXIdxClientFile index_ppIncludedFile(CXClientData client_data,
+                                      CXIdxIncludedFileInfo *info) {
   IndexData *index_data;
   index_data = (IndexData *)client_data;
   printCheck(index_data);
 
   printf("[ppIncludedFile]: ");
-  printCXIndexFile(info->file);
+  printCXIndexFile((CXIdxClientFile)info->file);
   printf(" | name: \"%s\"", info->filename);
   printf(" | hash loc: ");
   printCXIndexLoc(info->hashLoc);
   printf(" | isImport: %d | isAngled: %d\n", info->isImport, info->isAngled);
+
+  return (CXIdxClientFile)info->file;
 }
 
-static CXIdxMacro index_ppMacroDefined(CXClientData client_data,
+static CXIdxClientMacro index_ppMacroDefined(CXClientData client_data,
                                        CXIdxMacroDefinedInfo *info) {
   IndexData *index_data;
   index_data = (IndexData *)client_data;
@@ -1712,7 +1697,7 @@
   printCXIndexLoc(info->defBegin);
   printf(" | length: %d\n", info->defLength);
 
-  return (CXIdxMacro)info->macroInfo->name;
+  return (CXIdxClientMacro)info->macroInfo->name;
 }
 
 static void index_ppMacroUndefined(CXClientData client_data,
@@ -1739,217 +1724,105 @@
   printf("\n");
 }
 
-static CXIdxEntity index_importedEntity(CXClientData client_data,
+static CXIdxClientEntity index_importedEntity(CXClientData client_data,
                                         CXIdxImportedEntityInfo *info) {
   IndexData *index_data;
-  CXIdxIndexedDeclInfo DeclInfo;
-  CXIdxIndexedEntityInfo EntityInfo;
-  const char *name;
-  DeclInfo.cursor = info->cursor;
-  DeclInfo.loc = info->loc;
-  DeclInfo.container = 0;
-  EntityInfo.entityInfo = info->entityInfo;
-  EntityInfo.declInfo = &DeclInfo;
   index_data = (IndexData *)client_data;
   printCheck(index_data);
 
-  name = info->entityInfo->name;
-  if (!name)
-    name = "<anon-tag>";
-
-  printf("[importedEntity]: %s", name);
+  printEntityInfo("[importedEntity]", client_data, info->entityInfo);
   printf(" | cursor: ");
   PrintCursor(info->cursor);
   printf(" | loc: ");
   printCXIndexLoc(info->loc);
   printf("\n");
 
-  return makeCXIndexEntity(&EntityInfo);
+  return makeClientEntity(info->entityInfo, info->loc);
 }
 
-static CXIdxContainer index_startedTranslationUnit(CXClientData client_data,
+static CXIdxClientContainer index_startedTranslationUnit(CXClientData client_data,
                                                    void *reserved) {
   IndexData *index_data;
   index_data = (IndexData *)client_data;
   printCheck(index_data);
 
   printf("[startedTranslationUnit]\n");
-  return (CXIdxContainer)"TU";
+  return (CXIdxClientContainer)"TU";
 }
 
-static CXIdxEntity index_indexTypedef(CXClientData client_data,
-                                      CXIdxTypedefInfo *info) {
-  printIndexedEntityInfo("[indexTypedef]", client_data, info->indexedEntityInfo);
-  printf("\n");
+static CXIdxClientEntity index_indexDeclaration(CXClientData client_data,
+                                                    CXIdxDeclInfo *info) {
+  IndexData *index_data;
+  index_data = (IndexData *)client_data;
+
+  printEntityInfo("[indexDeclaration]", client_data, info->entityInfo);
+  printf(" | cursor: ");
+  PrintCursor(info->cursor);
+  printf(" | loc: ");
+  printCXIndexLoc(info->loc);
+  printf(" | container: ");
+  printCXIndexContainer(info->container);
+  printf(" | isRedecl: %d", info->isRedeclaration);
+  printf(" | isDef: %d\n", info->isDefinition);
+
   
-  return makeCXIndexEntity(info->indexedEntityInfo);
+  if (clang_index_isEntityTagKind(info->entityInfo->kind)) {
+    printCheck(index_data);
+    printf("     <TagInfo>: isAnonymous: %d\n",
+           clang_index_getTagDeclInfo(info)->isAnonymous);
+  }
+
+  if (clang_index_isEntityObjCContainerKind(info->entityInfo->kind)) {
+    const char *kindName = 0;
+    CXIdxObjCContainerKind K = clang_index_getObjCContainerDeclInfo(info)->kind;
+    switch (K) {
+    case CXIdxObjCContainer_ForwardRef:
+      kindName = "forward-ref"; break;
+    case CXIdxObjCContainer_Interface:
+      kindName = "interface"; break;
+    case CXIdxObjCContainer_Implementation:
+      kindName = "implementation"; break;
+    }
+    printCheck(index_data);
+    printf("     <ObjCContainerInfo>: kind: %s\n", kindName);
+  }
+
+  if (clang_index_isEntityObjCCategoryKind(info->entityInfo->kind)) {
+    CXIdxObjCCategoryDeclInfo *
+      CatInfo = clang_index_getObjCCategoryDeclInfo(info);
+    printEntityInfo("     <ObjCCategoryInfo>: class", client_data,
+                    CatInfo->objcClass);
+    printf("\n");
+  }
+
+  if (!info->isRedeclaration)
+    return makeClientEntity(info->entityInfo, info->loc);
+
+  return 0;
 }
 
-static CXIdxEntity index_indexFunction(CXClientData client_data,
-                                       CXIdxFunctionInfo *info) {
-  printIndexedEntityInfo("[indexFunction]", client_data, info->indexedEntityInfo);
-  printf(" | isDefinition: %d\n", info->isDefinition);
+static CXIdxClientContainer
+index_startedContainer(CXClientData client_data, CXIdxContainerInfo *info) {
+  printEntityInfo("[startedContainer]", client_data, info->entity);
+  printf(" | cursor: ");
+  PrintCursor(info->cursor);
+  printf(" | loc: ");
+  printCXIndexLoc(info->loc);
+  printf(" | isObjCImpl: %d\n", info->isObjCImpl);
 
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static void index_indexFunctionRedeclaration(CXClientData client_data,
-                                             CXIdxFunctionRedeclInfo *info) {
-  printIndexedRedeclInfo("[indexFunctionRedeclaration]", client_data,
-                         info->indexedRedeclInfo);
-  printf(" | isDefinition: %d\n", info->isDefinition);
-}
-
-static CXIdxEntity index_indexVariable(CXClientData client_data,
-                                       CXIdxVariableInfo *info) {
-  printIndexedEntityInfo("[indexVariable]", client_data, info->indexedEntityInfo);
-  printf(" | isDefinition: %d\n", info->isDefinition);
-
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static void index_indexVariableRedeclaration(CXClientData client_data,
-                                             CXIdxVariableRedeclInfo *info) {
-  printIndexedRedeclInfo("[indexVariableRedeclaration]", client_data,
-                         info->indexedRedeclInfo);
-  printf(" | isDefinition: %d\n", info->isDefinition);
-}
-
-static CXIdxEntity index_indexTagType(CXClientData client_data,
-                                       CXIdxTagTypeInfo *info) {
-  printIndexedEntityInfo("[indexTagType]", client_data, info->indexedEntityInfo);
-  printf(" | isDefinition: %d | anon: %d\n",
-         info->isDefinition, info->isAnonymous);
-
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static void index_indexTagTypeRedeclaration(CXClientData client_data,
-                                             CXIdxTagTypeRedeclInfo *info) {
-  printIndexedRedeclInfo("[indexTagTypeRedeclaration]", client_data,
-                         info->indexedRedeclInfo);
-  printf(" | isDefinition: %d\n", info->isDefinition);
-}
-
-static CXIdxEntity index_indexField(CXClientData client_data,
-                                      CXIdxFieldInfo *info) {
-  printIndexedEntityInfo("[indexField]", client_data, info->indexedEntityInfo);
-  printf("\n");
-  
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexEnumerator(CXClientData client_data,
-                                         CXIdxEnumeratorInfo *info) {
-  printIndexedEntityInfo("[indexEnumerator]", client_data,
-                         info->indexedEntityInfo);
-  printf("\n");
-  
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxContainer
-index_startedTagTypeDefinition(CXClientData client_data,
-                               CXIdxTagTypeDefinitionInfo *info) {
-  printStartedContainerInfo("[startedTagTypeDefinition]", client_data,
-                            info->containerInfo);
-  printf("\n");
-  
-  return makeCXIndexContainer(info->containerInfo->entity);
-}
-
-static CXIdxEntity index_indexObjCClass(CXClientData client_data,
-                                       CXIdxObjCClassInfo *info) {
-  printIndexedEntityInfo("[indexObjCClass]", client_data,
-                         info->indexedEntityInfo);
-  printf(" | forward ref: %d\n", info->isForwardRef);
-
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexObjCProtocol(CXClientData client_data,
-                                       CXIdxObjCProtocolInfo *info) {
-  printIndexedEntityInfo("[indexObjCProtocol]", client_data,
-                         info->indexedEntityInfo);
-  printf(" | forward ref: %d\n", info->isForwardRef);
-
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexObjCCategory(CXClientData client_data,
-                                           CXIdxObjCCategoryInfo *info) {
-  printIndexedEntityInfo("[indexObjCCategory]", client_data,
-                         info->indexedEntityInfo);
-  printf(" | class: ");
-  printCXIndexEntity(info->objcClass);
-  printf("\n");
-
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexObjCMethod(CXClientData client_data,
-                                       CXIdxObjCMethodInfo *info) {
-  printIndexedEntityInfo("[indexObjCMethod]", client_data,
-                         info->indexedEntityInfo);
-  printf(" | isDefinition: %d\n", info->isDefinition);
-
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static CXIdxEntity index_indexObjCProperty(CXClientData client_data,
-                                           CXIdxObjCPropertyInfo *info) {
-  printIndexedEntityInfo("[indexObjCProperty]", client_data,
-                         info->indexedEntityInfo);
-  printf("\n");
-
-  return makeCXIndexEntity(info->indexedEntityInfo);
-}
-
-static void index_indexObjCMethodRedeclaration(CXClientData client_data,
-                                             CXIdxObjCMethodRedeclInfo *info) {
-  printIndexedRedeclInfo("[indexObjCMethodRedeclaration]", client_data,
-                         info->indexedRedeclInfo);
-  printf(" | isDefinition: %d\n", info->isDefinition);
-}
-
-static CXIdxContainer
-index_startedStatementBody(CXClientData client_data,
-                           CXIdxStmtBodyInfo *info) {
-  printStartedContainerInfo("[startedStatementBody]", client_data,
-                            info->containerInfo);
-  printf(" | body: ");
-  printCXIndexLoc(info->bodyBegin);
-  printf("\n");
-  
-  return makeCXIndexContainer(info->containerInfo->entity);
-}
-
-static CXIdxContainer
-index_startedObjCContainer(CXClientData client_data,
-                           CXIdxObjCContainerInfo *info) {
-  printStartedContainerInfo("[startedObjCContainer]", client_data,
-                            info->containerInfo);
-  printf("\n");
-  
-  return makeCXIndexContainer(info->containerInfo->entity);
+  return (CXIdxClientContainer)info->entity->clientEntity;
 }
 
 static void index_defineObjCClass(CXClientData client_data,
                                   CXIdxObjCClassDefineInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("[defineObjCClass]: ");
-  printCXIndexEntity(info->objcClass);
+  printEntityInfo("[defineObjCClass]", client_data, info->objcClass);
   printf(" | cursor: ");
   PrintCursor(info->cursor);
   printf(" | container: ");
   printCXIndexContainer(info->container);
   
   if (info->baseInfo) {
-    printf(" | base: ");
-    printCXIndexEntity(info->baseInfo->objcClass);
+    printEntityInfo(" | <base>", client_data, info->baseInfo->objcClass);
     printf(" | base loc: ");
     printCXIndexLoc(info->baseInfo->loc);
   }
@@ -1972,18 +1845,12 @@
 
 static void index_indexEntityReference(CXClientData client_data,
                                        CXIdxEntityRefInfo *info) {
-  IndexData *index_data;
-  index_data = (IndexData *)client_data;
-  printCheck(index_data);
-
-  printf("[indexEntityReference]: ");
-  printCXIndexEntity(info->referencedEntity);
+  printEntityInfo("[indexEntityReference]", client_data, info->referencedEntity);
   printf(" | cursor: ");
   PrintCursor(info->cursor);
   printf(" | loc: ");
   printCXIndexLoc(info->loc);
-  printf(" | parent: ");
-  printCXIndexEntity(info->parentEntity);
+  printEntityInfo(" | <parent>:", client_data, info->parentEntity);
   printf(" | container: ");
   printCXIndexContainer(info->container);
   printf(" | kind: ");
@@ -1996,7 +1863,7 @@
 
 static IndexerCallbacks IndexCB = {
   index_diagnostic,
-  index_recordFile,
+  index_enteredMainFile,
   index_ppIncludedFile,
   index_ppMacroDefined,
   index_ppMacroUndefined,
@@ -2005,24 +1872,8 @@
   index_importedEntity,
   0,/*index_importedMacro,*/
   index_startedTranslationUnit,
-  index_indexTypedef,
-  index_indexFunction,
-  index_indexFunctionRedeclaration,
-  index_indexVariable,
-  index_indexVariableRedeclaration,
-  index_indexTagType,
-  index_indexTagTypeRedeclaration,
-  index_indexField,
-  index_indexEnumerator,
-  index_startedTagTypeDefinition,
-  index_indexObjCClass,
-  index_indexObjCProtocol,
-  index_indexObjCCategory,
-  index_indexObjCMethod,
-  index_indexObjCProperty,
-  index_indexObjCMethodRedeclaration,
-  index_startedStatementBody,
-  index_startedObjCContainer,
+  index_indexDeclaration,
+  index_startedContainer,
   index_defineObjCClass,
   index_endedContainer,
   index_indexEntityReference
