Here is the promised change to buffer fields. I need volunteers to complete this patch; or at least the ok on proceeding to temporarily break the build. See below for details. In order to implement thread-specific let-binding of buffer-local variables, we must introduce an indirection into the C code, so that lookups of these variables see the thread-specific value, if any. This patch enables this by adding an accessor macro for each field of struct buffer. For a field named `name', the corresponding accessor is `BUF_NAME'. All code outside of the GC must then use these accessor macros. On the trunk this results in the same code. On the concurrency branch, we will redefine these macros to do the needed thread indirection. This patch was automatically generated using the attached script. The basic idea is simple: rename all the fields in struct buffer, run `make', and then use the locations in the error messages to decide where to rewrite. If you want to reproduce this, you will need a modified GCC; I can tell you how to get the patches if you want. Because this script runs the compiler, it only edits locations which were included in my build. So, it is probable that some needed changes were not done. Fixing any given build failure is simple, but requires someone to actually see it. This is where volunteers come in. We could either proceed by committing the patch and fixing the problems piecemeal, or by having a couple people with other systems apply the patch, do a build, and send me the logs (or patches relative to mine), then repeat. You would not need a modified GCC to do this step; I don't expect enough problems to warrant more automation. This same technique could be used to extend HIDE_LISP_IMPLEMENTATION to all lisp types. Is that worth doing? The next patch will be applying the same treatment to struct kboard. Again, it may be a while before I can get to that. Let me know what you think. I am not sure what I will do in the absence of comments. Maybe check it in! Tom