We should ask ourselves what really is "core" and do the refactoring Emmanuel proposed.
This will lead to a more maintainable architecture.
we have had an interesting discussion with Ersin lately, about how to use core-JNDI inside the SP interceptor. Let me explain what is the problem :
SP allow a user to define some function which has access to the data the server is storing. That's fine, but in order to guarantee the ease of use, we decided to expose those objects through JNDI (no need to learn about a new API, even if it's a better one ;).
Back in 1.5.4 (or was it 1.5.3?) we decided to move out of core the JNDI operations, and we created a module named core-jndi : superbe move, so far.
Now, the problem is that we can't use this core-jndi into the SP interceptor, simply because core-jndi depends on core, so we can't make the SP interceptor depends on core-jndi, it would create a circular dependency.
The solution is pretty simple, though : the SP interceptor has nothing to do into core, we should create a new module for it (interceptor-sp).
At this point, we can also extend the idea to all the interceptors : make them modules, depending on core.