diff --git a/COPYING b/COPYING new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/COPYING @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build.properties b/build.properties new file mode 100644 index 0000000000..fa2568592b --- /dev/null +++ b/build.properties @@ -0,0 +1,6 @@ +version=1.0-alpha +lib.dir=lib +src.dir=src +test.dir=test +build.dir=build +javadoc.packagenames=com.google.inject diff --git a/build.xml b/build.xml new file mode 100644 index 0000000000..10b725a4d5 --- /dev/null +++ b/build.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/balls.gif b/doc/balls.gif new file mode 100644 index 0000000000..cef101e894 Binary files /dev/null and b/doc/balls.gif differ diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000000..e98101dc2a --- /dev/null +++ b/doc/index.html @@ -0,0 +1,51 @@ + + + + + + + +Guice + + + + + +
+
+

+ Return to Guice project home

+ +

Guice Project Home

+ +

Guice Documentation

+ + + +
+ +
+ +

Guice Documentation

+

Overview

+ +
+

 

+
+
+ +
+

Google Balls

+
+ + +
+ +

  + +

+ +
+
+ + diff --git a/doc/logo.gif b/doc/logo.gif new file mode 100644 index 0000000000..2c2de91de6 Binary files /dev/null and b/doc/logo.gif differ diff --git a/doc/prettify.css b/doc/prettify.css new file mode 100644 index 0000000000..3fa11c7b77 --- /dev/null +++ b/doc/prettify.css @@ -0,0 +1,26 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #080; } +.kwd { color: #008; } +.com { color: #800; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +pre.prettyprint { padding: 10px; padding-left: 15px; border: 1px solid #888; } + +@media print { + .str { color: #060; } + .kwd { color: #006; font-weight: bold; } + .com { color: #600; font-style: italic; } + .typ { color: #404; font-weight: bold; } + .lit { color: #044; } + .pun { color: #440; } + .pln { color: #000; } + .tag { color: #006; font-weight: bold; } + .atn { color: #404; } + .atv { color: #060; } +} diff --git a/doc/prettify.js b/doc/prettify.js new file mode 100644 index 0000000000..6341d836f0 --- /dev/null +++ b/doc/prettify.js @@ -0,0 +1,1314 @@ +// Copyright 2005 Google Inc. +// All Rights Reserved. +// +// msamuel@google.com + +// Usage: +// 1) include this source file in an html page via +// +// 2) define style rules. See the example page for examples. +// 3) mark the
 and  tags in your source with class=prettyprint.
+//    You can also use the (html deprecated)  tag, but the pretty printer
+//    needs to do more substantial DOM manipulations to support that, so some
+//    css styles may not be preserved.
+
+// Change log:
+// cbeust, 2006/08/22
+//   Java annotations (start with "@") are now captured as literals ("lit")
+//
+
+var PR_keywords = new Object();
+/** initialize the keyword list for our target languages. */
+(function () {
+  var CPP_KEYWORDS = (
+    "bool break case catch char class const const_cast continue default " +
+    "delete deprecated dllexport dllimport do double dynamic_cast else enum " +
+    "explicit extern false float for friend goto if inline int long mutable " +
+    "naked namespace new noinline noreturn nothrow novtable operator private " +
+    "property protected public register reinterpret_cast return selectany " +
+    "short signed sizeof static static_cast struct switch template this " +
+    "thread throw true try typedef typeid typename union unsigned using " +
+    "declaration, using directive uuid virtual void volatile while typeof");
+  var JAVA_KEYWORDS = (
+    "abstract default goto package synchronized boolean do if private this " +
+    "break double implements protected throw byte else import public throws " +
+    "case enum instanceof return transient catch extends int short try char " +
+    "final interface static void class finally long strictfp volatile const " +
+    "float native super while continue for new switch");
+  var PYTHON_KEYWORDS = (
+    "and assert break class continue def del elif else except exec finally " +
+    "for from global if import in is lambda not or pass print raise return " +
+    "try while yield");
+  var JSCRIPT_KEYWORDS = (
+    "abstract boolean break byte case catch char class const continue " +
+    "debugger default delete do double else enum export extends false final " +
+    "finally float for function goto if implements import in instanceof int " +
+    "interface long native new null package private protected public return " +
+    "short static super switch synchronized this throw throws transient " +
+    "true try typeof var void volatile while with NaN Infinity");
+  var PERL_KEYWORDS = (
+    "foreach require sub unless until use elsif BEGIN END");
+  var SH_KEYWORDS = (
+    "if then do else fi end");
+  var KEYWORDS = [CPP_KEYWORDS, JAVA_KEYWORDS, PYTHON_KEYWORDS,
+                  JSCRIPT_KEYWORDS, PERL_KEYWORDS, SH_KEYWORDS];
+  for (var k = 0; k < KEYWORDS.length; k++) {
+    var kw = KEYWORDS[k].split(' ');
+    for (var i = 0; i < kw.length; i++) {
+      if (kw[i]) { PR_keywords[kw[i]] = true; }
+    }
+  }
+}).call(this);
+
+// token style names.  correspond to css classes
+/** token style for a string literal */
+var PR_STRING = 'str';
+/** token style for a keyword */
+var PR_KEYWORD = 'kwd';
+/** token style for a comment */
+var PR_COMMENT = 'com';
+/** token style for a type */
+var PR_TYPE = 'typ';
+/** token style for a literal value.  e.g. 1, null, true. */
+var PR_LITERAL = 'lit';
+/** token style for a punctuation string. */
+var PR_PUNCTUATION = 'pun';
+/** token style for a punctuation string. */
+var PR_PLAIN = 'pln';
+
+/** token style for an sgml tag. */
+var PR_TAG = 'tag';
+/** token style for a markup declaration such as a DOCTYPE. */
+var PR_DECLARATION = 'dec';
+/** token style for embedded source. */
+var PR_SOURCE = 'src';
+/** token style for an sgml attribute name. */
+var PR_ATTRIB_NAME = 'atn';
+/** token style for an sgml attribute value. */
+var PR_ATTRIB_VALUE = 'atv';
+
+/** the position of the end of a token during.  A division of a string into
+  * n tokens can be represented as a series n - 1 token ends, as long as
+  * runs of whitespace warrant their own token.
+  * @private
+  */
+function PR_TokenEnd(end, style) {
+  if (undefined === style) { throw new Error('BAD'); }
+  if ('number' != typeof(end)) { throw new Error('BAD'); }
+  this.end = end;
+  this.style = style;
+}
+PR_TokenEnd.prototype.toString = function () {
+  return '[PR_TokenEnd ' + this.end +
+    (this.style ? ':' + this.style : '') + ']';
+};
+
+
+/** a chunk of text with a style.  These are used to represent both the output
+  * from the lexing functions as well as intermediate results.
+  * @constructor
+  * @param token the token text
+  * @param style one of the token styles defined in designdoc-template, or null
+  *   for a styleless token, such as an embedded html tag.
+  * @private
+  */
+function PR_Token(token, style) {
+  if (undefined === style) { throw new Error('BAD'); }
+  this.token = token;
+  this.style = style;
+}
+
+PR_Token.prototype.toString = function () {
+  return '[PR_Token ' + this.token + (this.style ? ':' + this.style : '') + ']';
+};
+
+
+/** a helper class that decodes common html entities used to escape source and
+  * markup punctuation characters in html.
+  * @constructor
+  * @private
+  */
+function PR_DecodeHelper() {
+  this.next = 0;
+  this.ch = '\0';
+}
+
+PR_DecodeHelper.prototype.decode = function (s, i) {
+  var next = i + 1;
+  var ch = s.charAt (i);
+  if ('&' == ch) {
+    var semi = s.indexOf(';', next);
+    if (semi >= 0 && semi < next + 4) {
+      var entityName = s.substring(next, semi).toLowerCase();
+      next = semi + 1;
+      if ('lt' == entityName) {
+        ch = '<';
+      } else if ('gt' == entityName) {
+        ch = '>';
+      } else if ('quot' == entityName) {
+        ch = '"';
+      } else if ('apos' == entityName) {
+        ch = '\'';
+      } else if ('amp' == entityName) {
+        ch = '&';
+      } else {
+        next = i + 1;
+      }
+    }
+  }
+  this.next = next;
+  this.ch = ch;
+  return this.ch ;
+}
+
+
+// some string utilities
+function PR_isWordChar(ch) {
+  return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
+}
+
+function PR_isIdentifierStart(ch) {
+  return PR_isWordChar(ch) || ch == '_' || ch == '$' || ch == '@';
+}
+
+function PR_isIdentifierPart(ch) {
+  return PR_isIdentifierStart(ch) || PR_isDigitChar(ch);
+}
+
+function PR_isSpaceChar(ch) {
+  return "\t \r\n".indexOf(ch) >= 0;
+}
+
+function PR_isDigitChar(ch) {
+  return ch >= '0' && ch <= '9';
+}
+
+function PR_trim(s) {
+  var i = 0, j = s.length - 1;
+  while (i <= j && PR_isSpaceChar(s.charAt(i))) { ++i; }
+  while (j > i && PR_isSpaceChar( s.charAt(j))) { --j; }
+  return s.substring(i, j + 1);
+}
+
+function PR_startsWith(s, prefix) {
+  return s.length >= prefix.length && prefix == s.substring(0, prefix.length);
+}
+
+function PR_endsWith(s, suffix) {
+  return s.length >= suffix.length &&
+         suffix == s.substring(s.length - suffix.length, s.length);
+}
+
+/** true iff prefix matches the first prefix characters in chars[0:len].
+  * @private
+  */
+function PR_prefixMatch(chars, len, prefix) {
+  if (len < prefix.length) { return false; }
+  for (var i = 0, n = prefix.length; i < n; ++i) {
+    if (prefix.charAt(i) != chars[i]) { return false; }
+  }
+  return true;
+}
+
+/** used to convert html special characters embedded in XMP tags into html. */
+function PR_textToHtml(str) {
+  return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+}
+
+
+/** split markup into chunks of html tags (style null) and
+  * plain text (style {@link #PR_PLAIN}).
+  *
+  * @param s a String of html.
+  * @return an Array of PR_Tokens of style PR_PLAIN and null.
+  * @private
+  */
+function PR_chunkify(s) {
+  var chunks = new Array();
+  var state = 0;
+  var start = 0;
+  var pos = -1;
+  for (var i = 0, n = s.length; i < n; ++i) {
+    var ch = s.charAt(i);
+    switch (state) {
+      case 0:
+        if ('<' == ch) { state = 1; }
+        break;
+      case 1:
+        pos = i - 1;
+        if ('/' == ch) { state = 2; }
+        else if (PR_isWordChar(ch)) { state = 3; }
+        else if ('<' == ch) { state = 1; }
+        else { state = 0; }
+        break;
+      case 2:
+        if (PR_isWordChar(ch)) { state = 3; }
+        else if ('<' == ch) { state = 1; }
+        else { state = 0; }
+        break;
+      case 3:
+        if ('>' == ch) {
+          if (pos > start) {
+            chunks.push(new PR_Token(s.substring(start, pos), PR_PLAIN));
+          }
+          chunks.push(new PR_Token( s.substring(pos, i + 1), null));
+          start = i + 1;
+          pos = -1;
+          state = 0;
+        }
+        break;
+    }
+  }
+  if (s.length > start) {
+    chunks.push(new PR_Token(s.substring (start, s.length), PR_PLAIN));
+  }
+  return chunks;
+}
+
+/** splits chunks around entities.
+  * @private
+  */
+function PR_splitEntities(chunks) {
+  var chunksOut = new Array();
+  var state = 0;
+  for (var ci = 0, nc = chunks.length; ci < nc; ++ci) {
+    var chunk = chunks[ci];
+    if (PR_PLAIN != chunk.style) {
+      chunksOut.push(chunk);
+      continue;
+    }
+    var s = chunk.token;
+    var pos = 0;
+    var start;
+    for (var i = 0; i < s.length; ++i) {
+      var ch = s.charAt(i);
+      switch (state) {
+        case 0:
+          if ('&' == ch) { state = 1; }
+          break;
+        case 1:
+          if ('#' == ch || PR_isWordChar(ch)) {
+            start = i - 1;
+            state = 2;
+          } else {
+            state = 0;
+          }
+          break;
+        case 2:
+          if (';' == ch) {
+            if (start > pos) {
+              chunksOut.push(
+                  new PR_Token(s.substring(pos, start), chunk.style));
+            }
+            chunksOut.push (new PR_Token(s.substring(start, i + 1), null));
+            pos = i + 1;
+            state = 0;
+          }
+          break;
+      }
+    }
+    if (s.length > pos) {
+      chunksOut.push(pos ?
+                     new PR_Token(s.substring(pos, s.length), chunk.style) :
+                     chunk);
+    }
+  }
+  return chunksOut;
+}
+
+/** walk the tokenEnds list and the chunk list in parallel to generate a list
+  * of split tokens.
+  * @private
+  */
+function PR_splitChunks(chunks, tokenEnds) {
+  var tokens = new Array();  // the output
+
+  var ci = 0;  // index into chunks
+  // position of beginning of amount written so far in absolute space.
+  var posAbs = 0;
+  // position of amount written so far in chunk space
+  var posChunk = 0;
+
+  // current chunk
+  var chunk = new PR_Token('', null);
+
+  for (var ei = 0, ne = tokenEnds.length; ei < ne; ++ei) {
+    var tokenEnd = tokenEnds[ei];
+    var end = tokenEnd.end;
+
+    var tokLen = end - posAbs;
+    var remainingInChunk = chunk.token.length - posChunk;
+    while (remainingInChunk <= tokLen) {
+      if (remainingInChunk > 0) {
+        tokens.push(
+            new PR_Token(chunk.token.substring(posChunk, chunk.token.length),
+                         null == chunk.style ? null : tokenEnd.style));
+      }
+      posAbs += remainingInChunk;
+      posChunk = 0;
+      if (ci < chunks.length) { chunk = chunks[ci++]; }
+
+      tokLen = end - posAbs;
+      remainingInChunk = chunk.token.length - posChunk;
+    }
+
+    if (tokLen) {
+      tokens.push(
+          new PR_Token(chunk.token.substring(posChunk, posChunk + tokLen),
+                       tokenEnd.style));
+      posAbs += tokLen;
+      posChunk += tokLen;
+    }
+  }
+
+  return tokens;
+}
+
+/** splits markup tokens into declarations, tags, and source chunks.
+  * @private
+  */
+function PR_splitMarkup(chunks) {
+  // A state machine to split out declarations, tags, etc.
+  // This state machine deals with absolute space in the text, indexed by k,
+  // and position in the current chunk, indexed by pos and tokenStart to
+  // generate a list of the ends of tokens.
+  // Absolute space is calculated by considering the chunks as appended into
+  // one big string, as they were before being split.
+
+  // Known failure cases
+  // Server side scripting sections such as <?...?> in attributes.
+  // i.e. <span class="<? foo ?>">
+  // Handling this would require a stack, and we don't use PHP.
+
+  // The output: a list of pairs of PR_TokenEnd instances
+  var tokenEnds = new Array();
+
+  var state = 0;  // FSM state variable
+  var k = 0;  // position in absolute space of the start of the current chunk
+  var tokenStart = -1;  // the start of the current token
+
+  // Try to find a closing tag for any open <style> or <script> tags
+  // We can't do this at a later stage because then the following case
+  // would fail:
+  // <script>document.writeln('<!--');</script>
+
+  // We use tokenChars[:tokenCharsI] to accumulate the tag name so that we
+  // can check whether to enter into a no scripting section when the tag ends.
+  var tokenChars = new Array(12);
+  var tokenCharsI = 0;
+  // if non null, the tag prefix that we need to see to break out.
+  var endScriptTag = null;
+  var decodeHelper = new PR_DecodeHelper();
+
+  for (var ci = 0, nc = chunks.length; ci < nc; ++ci) {
+    var chunk = chunks[ci];
+    if (PR_PLAIN != chunk.style) {
+      k += chunk.token.length;
+      continue;
+    }
+
+    var s = chunk.token;
+    var pos = 0;  // the position past the last character processed so far in s
+
+    for (var i = 0, n = s.length; i < n; /* i = next at bottom */) {
+      decodeHelper.decode(s, i);
+      var ch = decodeHelper.ch;
+      var next = decodeHelper.next;
+
+      var tokenStyle = null;
+      switch (state) {
+        case 0:
+          if ('<' == ch) { state = 1; }
+          break;
+        case 1:
+          tokenCharsI = 0;
+          if ('/' == ch) {  // only consider close tags if we're in script/style
+            state = 7;
+          } else if (null == endScriptTag) {
+            if ('!' == ch) {
+              state = 2;
+            } else if (PR_isWordChar(ch)) {
+              state = 8;
+            } else if ('?' == ch) {
+              state = 9;
+            } else if ('%' == ch) {
+              state = 11;
+            } else if ('<' != ch) {
+              state = 0;
+            }
+          } else if ('<' != ch) {
+            state = 0;
+          }
+          break;
+        case 2:
+          if ('-' == ch) {
+            state = 4;
+          } else if (PR_isWordChar(ch)) {
+            state = 3;
+          } else if ('<' == ch) {
+            state = 1;
+          } else {
+            state = 0;
+          }
+          break;
+        case 3:
+          if ('>' == ch) {
+            state = 0;
+            tokenStyle = PR_DECLARATION;
+          }
+          break;
+        case 4:
+          if ('-' == ch) { state = 5; }
+          break;
+        case 5:
+          if ('-' == ch) { state = 6; }
+          break;
+        case 6:
+          if ('>' == ch) {
+            state = 0;
+            tokenStyle = PR_COMMENT;
+          } else if ('-' == ch) {
+            state = 6;
+          } else {
+            state = 4;
+          }
+          break;
+        case 7:
+          if (PR_isWordChar(ch)) {
+            state = 8;
+          } else if ('<' == ch) {
+            state = 1;
+          } else {
+            state = 0;
+          }
+          break;
+        case 8:
+          if ('>' == ch) {
+            state = 0;
+            tokenStyle = PR_TAG;
+          }
+          break;
+        case 9:
+          if ('?' == ch) { state = 10; }
+          break;
+        case 10:
+          if ('>' == ch) {
+            state = 0;
+            tokenStyle = PR_SOURCE;
+          } else if ('?' != ch) {
+            state = 9;
+          }
+          break;
+        case 11:
+          if ('%' == ch) { state = 12; }
+          break;
+        case 12:
+          if ('>' == ch) {
+            state = 0;
+            tokenStyle = PR_SOURCE;
+          } else if ('%' != ch) {
+            state = 11;
+          }
+          break;
+      }
+
+      if (tokenCharsI < tokenChars.length) {
+        tokenChars[tokenCharsI++] = ch.toLowerCase();
+      }
+      if (1 == state) { tokenStart = k + i; }
+      i = next;
+      if (tokenStyle != null) {
+        if (null != tokenStyle) {
+          if (endScriptTag) {
+            if (PR_prefixMatch(tokenChars, tokenCharsI, endScriptTag)) {
+              endScriptTag = null;
+            }
+          } else {
+            if (PR_prefixMatch(tokenChars, tokenCharsI, 'script')) {
+              endScriptTag = '/script';
+            } else if (PR_prefixMatch(tokenChars, tokenCharsI, 'style')) {
+              endScriptTag = '/style';
+            } else if (PR_prefixMatch(tokenChars, tokenCharsI, 'xmp')) {
+              endScriptTag = '/xmp';
+            }
+          }
+          // disallow the tag if endScriptTag is set and this was not an open
+          // tag.
+          if (endScriptTag && tokenCharsI && '/' == tokenChars[0]) {
+            tokenStyle = null;
+          }
+        }
+        if (null != tokenStyle) {
+          tokenEnds.push(new PR_TokenEnd(tokenStart, PR_PLAIN));
+          tokenEnds.push(new PR_TokenEnd(k + next, tokenStyle));
+        }
+      }
+    }
+    k += chunk.token.length;
+  }
+  tokenEnds.push(new PR_TokenEnd(k, PR_PLAIN));
+
+  return tokenEnds;
+}
+
+/** splits the given string into comment, string, and "other" tokens.
+  * @return an array of PR_Tokens with style in
+  *   (PR_STRING, PR_COMMENT, PR_PLAIN, null)
+  *   The result array may contain spurious zero length tokens.  Ignore them.
+  *
+  * @private
+  */
+function PR_splitStringAndCommentTokens(chunks) {
+  // a state machine to split out comments, strings, and other stuff
+  var tokenEnds = new Array();  // positions of ends of tokens in absolute space
+  var state = 0;  // FSM state variable
+  var delim = -1;  // string delimiter
+  var k = 0;  // absolute position of beginning of current chunk
+  for (var ci = 0, nc = chunks.length; ci < nc; ++ci) {
+    var chunk = chunks[ci];
+    var s = chunk.token;
+    if (PR_PLAIN == chunk.style) {
+      for (var i = 0, n = s.length; i < n; ++i) {
+        var ch = s.charAt(i);
+        if (0 == state) {
+          if (ch == '"' || ch == '\'' || ch == '`') {
+            tokenEnds.push(new PR_TokenEnd(k + i, PR_PLAIN));
+            state = 1;
+            delim = ch;
+          } else if (ch == '/') {
+            state = 3;
+          } else if (ch == '#') {
+            tokenEnds.push(new PR_TokenEnd(k + i, PR_PLAIN));
+            state = 4;
+          }
+        } else if (1 == state) {
+          if (ch == delim) {
+            state = 0;
+            tokenEnds.push(new PR_TokenEnd(k + i + 1, PR_STRING));
+          } else if (ch == '\\') {
+            state = 2;
+          }
+        } else if (2 == state) {
+          state = 1;
+        } else if (3 == state) {
+          if (ch == '/') {
+            state = 4;
+            tokenEnds.push(new PR_TokenEnd(k + i - 1, PR_PLAIN));
+          } else if (ch == '*') {
+            state = 5;
+            tokenEnds.push(new PR_TokenEnd(k + i - 1, PR_PLAIN));
+          } else {
+            state = 0;
+            // next loop will reenter state 0 without same value of i, so
+            // ch will be reconsidered as start of new token.
+            --i;
+          }
+        } else if (4 == state) {
+          if (ch == '\r' || ch == '\n') {
+            state = 0;
+            tokenEnds.push (new PR_TokenEnd(k + i, PR_COMMENT));
+          }
+        } else if (5 == state) {
+          if (ch == '*') {
+            state = 6;
+          }
+        } else if (6 == state) {
+          if (ch == '/') {
+            state = 0;
+            tokenEnds.push(new PR_TokenEnd(k + i + 1, PR_COMMENT));
+          } else if (ch != '*') {
+            state = 5;
+          }
+        }
+      }
+    }
+    k += s.length;
+  }
+  tokenEnds.push(new PR_TokenEnd(k, PR_PLAIN));  // a token ends at the end
+
+  return PR_splitChunks(chunks, tokenEnds);
+}
+
+/** used by lexSource to split a non string, non comment token.
+  * @private
+  */
+function PR_splitNonStringNonCommentToken(s, outlist) {
+  var pos = 0;
+  var state = 0;
+  for (var i = 0; i <= s.length; i++) {
+    var ch = s.charAt(i);
+    // the next state.
+    // if set to -1 then it will cause a reentry to state 0 without consuming
+    // another character.
+    var nstate = state;
+
+    if (i == s.length) {
+      // nstate will not be equal to state, so it will append the token
+      nstate = -2;
+    } else {
+      switch (state) {
+      case 0:  // whitespace state
+        if (PR_isIdentifierStart(ch)) {
+          nstate = 1;
+        } else if (PR_isDigitChar(ch)) {
+          nstate = 2;
+        } else if (!PR_isSpaceChar(ch)) {
+          nstate = 3;
+        }
+        if (nstate && pos < i) {
+          var t = s.substring(pos, i);
+          outlist.push(new PR_Token(t, PR_PLAIN));
+          pos = i;
+        }
+        break;
+      case 1:  // identifier state
+        if (!PR_isIdentifierPart(ch)) {
+          nstate = -1;
+        }
+        break;
+      case 2:  // number literal state
+        // handle numeric literals like
+        // 0x7f 300UL 100_000
+
+        // this does not treat floating point values as a single literal
+        //   0.1 and 3e-6
+        // are each split into multiple tokens
+        if (!(PR_isDigitChar(ch) || PR_isWordChar(ch) || ch == '_')) {
+          nstate = -1;
+        }
+        break;
+      case 3:  // punctuation state
+        if (PR_isIdentifierStart(ch) || PR_isDigitChar(ch) ||
+            PR_isSpaceChar(ch)) {
+          nstate = -1;
+        }
+        break;
+      }
+    }
+
+    if (nstate != state) {
+      if (nstate < 0) {
+        if (i > pos) {
+          var t = s.substring(pos, i);
+          var ch0 = t.charAt(0);
+          var style;
+          if (PR_isIdentifierStart(ch0)) {
+            if (PR_keywords[t]) {
+              style = PR_KEYWORD;
+            }
+            else if (ch0 == '@') {
+              style = PR_LITERAL;
+            } else {
+              // Treat any word that starts with an uppercase character and
+              // contains at least one lowercase character as a type, or
+              // ends with _t.
+              // This works perfectly for Java, pretty well for C++, and
+              // passably for Python.  The _t catches C structs.
+              var isType = false;
+              if (ch0 >= 'A' && ch0 <= 'Z') {
+                for (var j = 1; j < t.length; j++) {
+                  var ch1 = t.charAt(j);
+                  if (ch1 >= 'a' && ch1 <= 'z') {
+                    isType = true;
+                    break;
+                  }
+                }
+                if (!isType && t.length >= 2 &&
+                    t.substring(t.length - 2) == '_t') {
+                  isType = true;
+                }
+              }
+              style = isType ? PR_TYPE : PR_PLAIN;
+            }
+          } else if (PR_isDigitChar(ch0)) {
+            style = PR_LITERAL;
+          } else if (!PR_isSpaceChar(ch0)) {
+            style = PR_PUNCTUATION;
+          } else {
+            style = PR_PLAIN;
+          }
+          pos = i;
+          outlist.push(new PR_Token(t, style));
+        }
+
+        state = 0;
+        if (nstate == -1) {
+          // don't increment.  This allows us to use state 0 to redispatch based
+          // on the current character.
+          i--;
+          continue;
+        }
+      }
+      state = nstate;
+    }
+  }
+}
+
+/** split a group of chunks of markup.
+  * @private
+  */
+function PR_tokenizeMarkup(chunks) {
+  if (!(chunks && chunks.length)) { return chunks; }
+
+  var tokenEnds = PR_splitMarkup(chunks);
+  return PR_splitChunks(chunks, tokenEnds);
+}
+
+/** split tags attributes and their values out from the tag name, and
+  * recursively lex source chunks.
+  * @private
+  */
+function PR_splitTagAttributes(tokens) {
+  var tokensOut = new Array();
+  var state = 0;
+  var stateStyle = PR_TAG;
+  var delim = null;  // attribute delimiter for quoted value state.
+  var decodeHelper = new PR_DecodeHelper();
+  for (var ci = 0; ci < tokens.length; ++ci) {
+    var tok = tokens[ci];
+    if (PR_TAG == tok.style) {
+      var s = tok.token;
+      var start = 0;
+      for (var i = 0; i < s.length; /* i = next at bottom */) {
+        decodeHelper.decode(s, i);
+        var ch = decodeHelper.ch;
+        var next = decodeHelper.next;
+
+        var emitEnd = null;  // null or position of end of chunk to emit.
+        var nextStyle = null;  // null or next value of stateStyle
+        if (ch == '>') {
+          if (PR_TAG != stateStyle) {
+            emitEnd = i;
+            nextStyle = PR_TAG;
+          }
+        } else {
+          switch (state) {
+            case 0:
+              if ('<' == ch) { state = 1; }
+              break;
+            case 1:
+              if (PR_isSpaceChar(ch)) { state = 2; }
+              break;
+            case 2:
+              if (!PR_isSpaceChar(ch)) {
+                nextStyle = PR_ATTRIB_NAME;
+                emitEnd = i;
+                state = 3;
+              }
+              break;
+            case 3:
+              if ('=' == ch) {
+                emitEnd = i;
+                nextStyle = PR_TAG;
+                state = 5;
+              } else if (PR_isSpaceChar(ch)) {
+                emitEnd = i;
+                nextStyle = PR_TAG;
+                state = 4;
+              }
+              break;
+            case 4:
+              if ('=' == ch) {
+                state = 5;
+              } else if (!PR_isSpaceChar(ch)) {
+                emitEnd = i;
+                nextStyle = PR_ATTRIB_NAME;
+                state = 3;
+              }
+              break;
+            case 5:
+              if ('"' == ch || '\'' == ch) {
+                emitEnd = i;
+                nextStyle = PR_ATTRIB_VALUE;
+                state = 6;
+                delim = ch;
+              } else if (!PR_isSpaceChar(ch)) {
+                emitEnd = i;
+                nextStyle = PR_ATTRIB_VALUE;
+                state = 7;
+              }
+              break;
+            case 6:
+              if (ch == delim) {
+                emitEnd = next;
+                nextStyle = PR_TAG;
+                state = 2;
+              }
+              break;
+            case 7:
+              if (PR_isSpaceChar(ch)) {
+                emitEnd = i;
+                nextStyle = PR_TAG;
+                state = 2;
+              }
+              break;
+          }
+        }
+        if (emitEnd) {
+          if (emitEnd > start) {
+            tokensOut.push(
+                new PR_Token(s.substring(start, emitEnd), stateStyle));
+            start = emitEnd;
+          }
+          stateStyle = nextStyle;
+        }
+        i = next;
+      }
+      if (s.length > start) {
+        tokensOut.push(new PR_Token(s.substring(start, s.length), stateStyle));
+      }
+    } else {
+      if (tok.style) {
+        state = 0;
+        stateStyle = PR_TAG;
+      }
+      tokensOut.push(tok);
+    }
+  }
+  return tokensOut;
+}
+
+/** identify regions of markup that are really source code, and recursivley
+  * lex them.
+  * @private
+  */
+function PR_splitSourceNodes(tokens) {
+  var tokensOut = new Array();
+  // when we see a <script> tag, store '/' here so that we know to end the
+  // source processing
+  var endScriptTag = null;
+  var decodeHelper = new PR_DecodeHelper();
+
+  var sourceChunks = null;
+
+  for (var ci = 0, nc = tokens.length; ci < nc; ++ci) {
+    var tok = tokens[ci];
+    if (null == tok.style) {
+      tokens.push(tok);
+      continue;
+    }
+
+    var s = tok.token;
+
+    if (null == endScriptTag) {
+      if (PR_SOURCE == tok.style) {
+        // split off any starting and trailing <?, <%
+        if ('<' == decodeHelper.decode(s, 0)) {
+          decodeHelper.decode(s, decodeHelper.next);
+          if ('%' == decodeHelper.ch || '?' == decodeHelper.ch) {
+            endScriptTag = decodeHelper.ch ;
+            tokensOut.push(new PR_Token(s.substring(0, decodeHelper.next),
+                                        PR_TAG));
+            s = s.substring(decodeHelper.next, s.length);
+          }
+        }
+      } else if (PR_TAG == tok.style) {
+        if ('<' == decodeHelper.decode(s, 0) &&
+            '/' != s.charAt(decodeHelper.next)) {
+          var tagContent = s.substring(decodeHelper.next).toLowerCase();
+          // FIXME(msamuel): this does not mirror exactly the code in
+          // in PR_splitMarkup that defers splitting tags inside script and
+          // style blocks.
+          if (PR_startsWith(tagContent, 'script') ||
+              PR_startsWith(tagContent, 'style') ||
+              PR_startsWith(tagContent, 'xmp')) {
+            endScriptTag = '/';
+          }
+        }
+      }
+    }
+
+    if (null != endScriptTag) {
+      var endTok = null;
+      if (PR_SOURCE == tok.style) {
+        if (endScriptTag == '%' || endScriptTag == '?') {
+          var pos = s.lastIndexOf(endScriptTag);
+          if (pos >= 0 && '>' == decodeHelper.decode(s, pos + 1) &&
+              s.length == decodeHelper.next) {
+            endTok = new PR_Token(s.substring(pos, s.length), PR_TAG);
+            s = s.substring(0, pos);
+          }
+        }
+        if (null == sourceChunks) { sourceChunks = new Array(); }
+        sourceChunks.push(new PR_Token(s, PR_PLAIN));
+      } else if (PR_PLAIN == tok.style) {
+        if (null == sourceChunks) { sourceChunks = new Array(); }
+        sourceChunks.push(tok);
+      } else if (PR_TAG == tok.style) {
+        // if it starts with </ then it must be the end tag.
+        if ('<' == decodeHelper.decode(tok.token, 0) &&
+            tok.token.length > decodeHelper.next &&
+            '/' == decodeHelper.decode(tok.token, decodeHelper.next)) {
+          endTok = tok;
+        } else {
+          tokensOut.push(tok);
+        }
+      } else {
+        if (sourceChunks) {
+          sourceChunks.push(tok);
+        } else {
+          // push remaining tag and attribute tokens from the opening tag
+          tokensOut.push(tok);
+        }
+      }
+      if (endTok) {
+        if (sourceChunks) {
+          var sourceTokens = PR_lexSource(sourceChunks);
+          tokensOut.push(new PR_Token('<span class=embsrc>', null));
+          for (var si = 0, ns = sourceTokens.length; si < ns; ++si) {
+            tokensOut.push(sourceTokens[si]);
+          }
+          tokensOut.push(new PR_Token('</span>', null));
+          sourceChunks = null;
+        }
+        tokensOut.push(endTok);
+        endScriptTag = null;
+      }
+    } else {
+      tokensOut.push(tok);
+    }
+  }
+  return tokensOut;
+}
+
+/** splits the quotes from an attribute value.
+  * ['"foo"'] -> ['"', 'foo', '"']
+  * @private
+  */
+function PR_splitAttributeQuotes(tokens) {
+  var firstPlain = null, lastPlain = null;
+  for (var i = 0; i < tokens.length; ++i) {
+    if (PR_PLAIN = tokens[i].style) {
+      firstPlain = i;
+      break;
+    }
+  }
+  for (var i = tokens.length; --i >= 0;) {
+    if (PR_PLAIN = tokens[i].style) {
+      lastPlain = i;
+      break;
+    }
+  }
+  if (null == firstPlain) { return tokens; }
+
+  var decodeHelper = new PR_DecodeHelper();
+  var fs = tokens[firstPlain].token;
+  var fc = decodeHelper.decode(fs, 0);
+  if ('"' != fc && '\'' != fc) {
+    return tokens;
+  }
+  var fpos = decodeHelper.next;
+
+  var ls = tokens[lastPlain].token;
+  var lpos = ls.lastIndexOf('&');
+  if (lpos < 0) { lpos = ls.length - 1; }
+  var lc = decodeHelper.decode (ls, lpos);
+  if (lc != fc || decodeHelper.next != ls.length) {
+    lc = null;
+    lpos = ls.length;
+  }
+
+  var tokensOut = new Array();
+  for (var i = 0; i < firstPlain; ++i) {
+    tokensOut.push (tokens[i]);
+  }
+  tokensOut.push(new PR_Token(fs.substring(0, fpos), PR_ATTRIB_VALUE));
+  if (lastPlain == firstPlain) {
+    tokensOut.push(new PR_Token(fs.substring(fpos, lpos), PR_PLAIN));
+  } else {
+    tokensOut.push(new PR_Token(fs.substring(fpos, fs.length), PR_PLAIN));
+    for (var i = firstPlain + 1; i < lastPlain; ++i) {
+      tokensOut.push(tokens[i]);
+    }
+    if (lc) {
+      tokens.push(new PR_Token( ls.substring(0, lpos), PR_PLAIN));
+    } else {
+      tokens.push(tokens[lastPlain]);
+    }
+  }
+  if (lc) {
+    tokensOut.push(new PR_Token(ls.substring(lpos, ls.length), PR_PLAIN));
+  }
+  for (var i = lastPlain + 1; i < tokens.length; ++i) {
+    tokensOut.push(tokens[i]);
+  }
+  return tokensOut;
+}
+
+/** identify attribute values that really contain source code and recursively
+  * lex them.
+  * @private
+  */
+function PR_splitSourceAttributes(tokens) {
+  var tokensOut = new Array();
+
+  var sourceChunks = null;
+  var inSource = false;
+  var name = '';
+
+  for (var ci = 0, nc = tokens.length; ci < nc; ++ci) {
+    var tok = tokens[ci];
+    var outList = tokensOut;
+    if (PR_TAG == tok.style) {
+      if (inSource) {
+        inSource = false;
+        name = '';
+        if (sourceChunks) {
+          tokensOut.push(new PR_Token('<span class=embsrc>', null));
+          var sourceTokens =
+            PR_lexSource(PR_splitAttributeQuotes(sourceChunks));
+          for (var si = 0, ns = sourceTokens.length; si < ns; ++si) {
+            tokensOut.push(sourceTokens[si]);
+          }
+          tokensOut.push(new PR_Token('</span>', null));
+          sourceChunks = null;
+        }
+      } else if (name && tok.token.indexOf('=') >= 0) {
+        var nameLower = name.toLowerCase();
+        if (PR_startsWith(nameLower, 'on') || 'style' == nameLower) {
+          inSource = true;
+        }
+      } else {
+        name = '';
+      }
+    } else if (PR_ATTRIB_NAME == tok.style) {
+      name += tok.token;
+    } else if (PR_ATTRIB_VALUE == tok.style) {
+      if (inSource) {
+        if (null == sourceChunks) { sourceChunks = new Array(); }
+        outList = sourceChunks;
+        tok = new PR_Token(tok.token, PR_PLAIN);
+      }
+    } else {
+      if (sourceChunks) {
+        outList = sourceChunks;
+      }
+    }
+    outList.push(tok);
+  }
+  return tokensOut;
+}
+
+/** returns a list of PR_Token objects given chunks of source code.
+  *
+  * This code assumes that < tokens are html escaped, but " are not.
+  * It will do a resonable job with <, but will not recognize an &quot;
+  * as starting a string.
+  *
+  * This code treats ", ', and ` as string delimiters, and \ as a string escape.
+  * It does not recognize double delimiter escapes, or perl's qq() style
+  * strings.
+  *
+  * It recognizes C, C++, and shell style comments.
+  *
+  * @param chunks PR_Tokens with style in (null, PR_PLAIN)
+  */
+function PR_lexSource(chunks) {
+  // positions of ends of tokens in order
+  var tokensIn = PR_splitStringAndCommentTokens(chunks);
+
+  // split entities out of so that we know to treat them as single units.
+  tokensIn = PR_splitEntities(tokensIn);
+
+  // split non comment|string tokens on whitespace and word boundaries
+  var tokensOut = new Array();
+  for (var i = 0; i < tokensIn.length; ++i) {
+    var tok = tokensIn[i];
+    var t = tok.token;
+    var s = tok.style;
+
+    if (PR_PLAIN == s) {
+      PR_splitNonStringNonCommentToken(t, tokensOut);
+      continue;
+    }
+    tokensOut.push(tok);
+  }
+
+  return tokensOut;
+}
+
+/** returns a list of PR_Token objects given a string of markup.
+  *
+  * This code assumes that < tokens are html escaped, but " are not.
+  * It will do a resonable job with <, but will not recognize an &quot;
+  * as starting a string.
+  *
+  * This code recognizes a number of constructs.
+  * <!-- ... --> comment
+  * <!\w ... >   declaration
+  * <\w ... >    tag
+  * </\w ... >   tag
+  * <?...?>      embedded source
+  * &[#\w]...;   entity
+  *
+  * It does not recognizes %foo; entities.
+  *
+  * It will recurse into any <style>, <script>, and on* attributes using
+  * PR_lexSource.
+  */
+function PR_lexMarkup(chunks) {
+  // This function works as follows:
+  // 1) Start by splitting the markup into text and tag chunks
+  //    Input:  String s
+  //    Output: List<PR_Token> where style in (PR_PLAIN, null)
+  // 2) Then split the text chunks further into comments, declarations,
+  //    tags, etc.
+  //    After each split, consider whether the token is the start of an
+  //    embedded source section, i.e. is an open <script> tag.  If it is,
+  //    find the corresponding close token, and don't bother to lex in between.
+  //    Input:  List<String>
+  //    Output: List<PR_Token> with style in (PR_TAG, PR_PLAIN, PR_SOURCE, null)
+  // 3) Finally go over each tag token and split out attribute names and values.
+  //    Input:  List<PR_Token>
+  //    Output: List<PR_Token> where style in
+  //            (PR_TAG, PR_PLAIN, PR_SOURCE, NAME, VALUE, null)
+  var tokensOut = PR_tokenizeMarkup(chunks);
+  tokensOut = PR_splitTagAttributes(tokensOut);
+  tokensOut = PR_splitSourceNodes(tokensOut);
+  tokensOut = PR_splitSourceAttributes(tokensOut);
+  return tokensOut;
+}
+
+/** classify the string as either source or markup and lex appropriately. */
+function PR_lexOne(s) {
+  var chunks = PR_chunkify(s);
+  // treat it as markup if the first non whitespace character is a < and the
+  // last non-whitespace character is a >
+  var isMarkup = false;
+  for (var i = 0; i < chunks.length; ++i) {
+    if (PR_PLAIN == chunks[i].style) {
+      if (PR_startsWith(PR_trim(chunks[i].token), '&lt;')) {
+        for (var j = chunks.length; --j >= 0;) {
+          if (PR_PLAIN == chunks[j].style) {
+            isMarkup = PR_endsWith(PR_trim(chunks[j].token), '&gt;');
+            break;
+          }
+        }
+      }
+      break;
+    }
+  }
+  return isMarkup ? PR_lexMarkup(chunks) : PR_lexSource(chunks);
+}
+
+/** pretty print a chunk of code.
+  *
+  * @param s code as html
+  * @return code as html, but prettier
+  */
+function prettyPrintOne(s) {
+  try {
+    var tokens = PR_lexOne(s);
+    var out = '';
+    var lastStyle = null;
+    for (var i = 0; i < tokens.length; i++) {
+      var t = tokens[i];
+      if (t.style != lastStyle) {
+        if (lastStyle != null) {
+          out += '</span>';
+        }
+        if (t.style != null) {
+          out += '<span class=' + t.style + '>';
+        }
+        lastStyle = t.style;
+      }
+      var html = t.token;
+      if (null != t.style) {
+        // This interacts badly with the wiki which introduces paragraph tags
+        // int pre blocks for some strange reason.
+        // It's necessary for IE though which seems to lose the preformattedness
+        // of <pre> tags when their innerHTML is assigned.
+        html = html.replace(/(?:\r\n?)|\n/g, '<br>').replace(/  /g, '&nbsp; ');
+      }
+      out += html;
+    }
+    if (lastStyle != null) {
+      out += '</span>';
+    }
+    return out;
+  } catch (e) {
+    //alert(e.stack);  // DISABLE in production
+    return s;
+  }
+}
+
+/** find all the < pre > and < code > tags in the DOM with class=prettyprint and
+  * prettify them.
+  */
+function prettyPrint() {
+  // fetch a list of nodes to rewrite
+  var codeSegments = [
+      document.getElementsByTagName('pre'),
+      document.getElementsByTagName('code'),
+      document.getElementsByTagName ('xmp') ];
+  var elements = [];
+  for (var i = 0; i < codeSegments.length; ++i) {
+    for (var j = 0; j < codeSegments[i].length; ++j) {
+      elements.push(codeSegments[i][j]);
+    }
+  }
+  codeSegments = null;
+
+  // the loop is broken into a series of continuations to make sure that we
+  // don't make the browser unresponsive when rewriting a large page.
+  var k = 0;
+
+  function doWork() {
+    var endTime = new Date().getTime() + 250;
+    for (; k < elements.length && new Date().getTime() < endTime; k++) {
+      var cs = elements[k];
+      if (cs.className && cs.className.indexOf('prettyprint') >= 0) {
+
+        // make sure this is not nested in an already prettified element
+        var nested = false;
+        for (var p = cs.parentNode; p != null; p = p.parentNode) {
+          if ((p.tagName == 'pre' || p.tagName == 'code' ||
+               p.tagName == 'xmp') &&
+              p.className && p.className.indexOf('prettyprint') >= 0) {
+            nested = true;
+            break;
+          }
+        }
+        if (!nested) {
+          // XMP tags contain unescaped entities so require special handling.
+          var isRawContent = 'XMP' == cs.tagName;
+
+          // fetch the content as a snippet of properly escaped HTML
+          var content = cs.innerHTML;
+          if (isRawContent) {
+            content = PR_textToHtml(content);
+          }
+
+          // do the pretty printing
+          var newContent = prettyPrintOne(content);
+
+          // push the prettified html back into the tag.
+          if (!isRawContent) {
+            // just replace the old html with the new
+            cs.innerHTML = newContent;
+          } else {
+            // we need to change the tag to a <pre> since <xmp>s do not allow
+            // embedded tags such as the span tags used to attach styles to
+            // sections of source code.
+            var pre = document.createElement('PRE');
+            for (var i = 0; i < cs.attributes.length; ++i) {
+              var a = cs.attributes[i];
+              if ( a.specified) {
+                pre.setAttribute(a.name, a.value);
+              }
+            }
+            pre.innerHTML = newContent;
+            // remove the old
+            cs.parentNode.replaceChild(pre, cs);
+          }
+        }
+      }
+    }
+    if (k < elements.length) {
+      // finish up in a continuation
+      setTimeout(doWork, 250);
+    }
+  }
+
+  doWork();
+}
diff --git a/doc/style.css b/doc/style.css
new file mode 100644
index 0000000000..52a5938029
--- /dev/null
+++ b/doc/style.css
@@ -0,0 +1,258 @@
+body, td { background-color: white; }
+
+h1 td, h1, h2, h3, h4, h5, h6, div.topnav, 
+div.sidenav, div.sidesearch, div.sidequote, div.bottomnav, div.footer, small, 
+td#sidebartitle { font-family: arial,sans-serif; }
+
+/* rules for the bottom navigation on the results page */ 
+div.bottomnav { margin-top: 1ex; }
+
+div.bottomnav a, span.bottomnav { font-size: 10pt; }
+
+div.bottomnav a, span.big { font-size: 12pt; color: #0000cc; }
+
+/* standard link colors */ 
+a:link { color: #0000cc; }
+a:visited { color: #551a8b; }
+a:active { color: #ff0000; }
+
+
+/* top part of the page */ 
+div.topnav { margin-bottom: 0.1ex; }
+h1 td { font-size: .95em; font-weight: bolder; }
+h1 td { background-color: #669900; color: white; border: none; padding: 2pt; }
+div.side { margin-right: 3ex; padding: 2pt; }
+div.sidenav { }
+div.sidesearch { margin-top: 1em; font-size: 0.75em; }
+div.sidequote { text-align: center; margin-top: 1.5in; border-color: red; border-style: solid; border-top-width: 1px; border-bottom-width: 1px; border-left-width: 0px; border-right-width: 0px; }
+div.footer { text-align: center; color: #6f6f6f; padding: 3pt; }
+/* sidebar on the right */ 
+table.sidebarborder { margin: 3pt; margin-top: 1pt; }
+td#sidebarcontent { background-color: #ffffff; }
+/* color schemes for different sections of the site */ 
+body.corporate h1 td, body.corporate table.sidebarborder td { background-color: #339966; }
+body.corporate td#sidebartitle { background-color: #d8f1e4; }
+body.siteowners h1 td, body.siteowners table.sidebarborder td { background-color: #ddad08; }
+body.siteowners td#sidebartitle { background-color: #f1e4d8; }
+body.search h1 td, body.search table.sidebarborder td { background-color: #336699; }
+body.search td#sidebartitle { background-color: #d8e4f1; }
+body.zealots h1 td, body.zealots table.sidebarborder td { background-color: #aa1002; }
+body.zealots td#sidebartitle { background-color: #f1e4d8; }
+body.gsa h1 td, body.gsa table.sidebarborder td { background-color: #F0C000; }
+body.gsa td#sidebartitle { background-color: #fbeab5; }
+
+
+body {
+	font-family: arial, sans-serif;
+	font-size: 83%;
+	}
+
+.leftcontent {
+	float:left;
+	width:175px;
+	background:#fff;
+	}
+
+.topimage {
+	margin-left:13px;
+	margin-top:0px;
+	padding:0px;
+	}
+
+.footerimage {
+	margin-left:15px;
+	margin-top:20px;
+	padding:0px;
+	}
+
+.toc { 
+	color: #ddad08; 
+	font-weight:bold;
+	}
+
+.rightcontent {
+	background:#fff;
+	margin-left: 199px;
+	}
+
+p {
+	margin-right: 5%;
+	margin-left:3%;
+	}
+
+ol, ul {
+	margin-right: 5%;
+	margin-left:3%;
+	}
+
+h1 {
+	font-size:130%;
+	font-weight:bold; 
+	margin-left:3%;
+	margin-top:2em;
+	}
+
+h2 {
+	font-size:120%;
+	font-weight:bold;
+	margin-left:3%;
+	margin-top:2em;
+	}
+
+h3 {
+	font-size:100%;
+	font-weight:bold;
+	margin-left:3%;
+	margin-top:2em;
+	}
+
+h4 {
+	font-size:90%;
+	font-weight:bold;
+	margin-left:3%;
+	margin-top:1.5em;
+	}
+
+.title {
+	background-color: #FEFADE; 
+	border-top:1px solid #ddad08;
+	font-weight:bold; 
+	font-size:120%;
+	text-align:left;
+	margin-left:0;
+	}
+
+.subtitle {
+	background-color: #FEFADE; 
+	border-top:1px solid #ddad08;
+	font-weight:bold; 
+	font-size:120%;
+	text-align:left;
+	}
+
+.toclinks, ul {
+	margin-bottom:0px;
+	margin-top:0px;
+	}
+
+
+.footer {
+	text-align: center;
+	}
+
+code {
+	font-family: "Courier New", Courier, monospace;
+	font-size: 100%;
+	}
+
+pre {
+	background-color: #EEEEEE;
+	border: 1px solid silver;
+	color: #000000;
+	font-family: "Courier New", Courier, monospace;
+	font-size: 100%;
+	margin-left:3%;
+	padding: 3px;
+	text-align:left;
+	overflow: auto;
+	}
+
+.content {
+	border-left:thin dotted #000;
+	}
+
+table {
+	margin-left:3%;
+	border: 1px solid #c3d9ff;
+	border-spacing:0;
+	}
+
+th {
+	font-weight:bold;
+	text-align:left;
+	margin-left:3%;	
+	border-right: 1px solid #C3d9ff;
+	border-bottom: 1px solid #C3d9ff;
+	border-top: 1px solid #C3d9ff;
+	text-align: left;
+	padding: 6px 6px 6px 12px;
+	background: #aac8f6;
+	}
+
+td {
+	border-right: 1px solid #C3d9ff;
+	border-bottom: 1px solid #C3d9ff;
+	background: #fff;
+	text-align:left;
+	margin-left:3%;	
+	padding: 6px 6px 6px 12px;
+	vertical-align:top;
+	}
+
+td.alt {
+	background: #e8eefa;
+	vertical-align:top;
+	}
+
+font  {
+	margin-right: 5%;
+	vertical-align:bottom;
+	margin-left:3%;
+	}
+
+.tdfooter {
+	margin-right: 5%;
+	text-align:right;
+	}
+
+.i { 
+	margin-left: 1em; 
+	margin-right: 2em;
+	}
+
+.q { 
+	margin: 0 10px 0 5px; 
+	padding: 10px 0 0 10px; 
+	color: #000; 
+	background: url("../../images/quote.gif") no-repeat top left;
+	}
+
+.d {
+	color:#999999;
+	font-style:italic;
+	font-size:83%;
+	}
+
+.tdheading {
+	font-weight:bold; 
+	font-size:120%;
+	margin-left:3%;
+	}
+
+/* Pretty printing styles. Used with prettify.js. */
+
+.str { color: #080; }
+.kwd { color: #008; }
+.com { color: #800; }
+.typ { color: #606; }
+.lit { color: #066; }
+.pun { color: #660; }
+.pln { color: #000; }
+.tag { color: #008; }
+.atn { color: #606; }
+.atv { color: #080; }
+pre.prettyprint { padding: 10px; padding-left: 15px; border: 1px solid #888; }
+
+@media print {
+  .str { color: #060; }
+  .kwd { color: #006; font-weight: bold; }
+  .com { color: #600; font-style: italic; }
+  .typ { color: #404; font-weight: bold; }
+  .lit { color: #044; }
+  .pun { color: #440; }
+  .pln { color: #000; }
+  .tag { color: #006; font-weight: bold; }
+  .atn { color: #404; }
+  .atv { color: #060; }
+  pre {overflow: visible}
+}
diff --git a/guice.iml b/guice.iml
new file mode 100644
index 0000000000..d91de550ad
--- /dev/null
+++ b/guice.iml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager">
+    <output url="file://$MODULE_DIR$/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/build/junit.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/build/spring-beans.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/build/spring-core.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/build/commons-logging-1.0.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntryProperties />
+  </component>
+</module>
+
diff --git a/guice.ipr b/guice.ipr
new file mode 100644
index 0000000000..53a57b133f
--- /dev/null
+++ b/guice.ipr
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="false">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="Build editor project-level loader">
+    <settings>
+      <class-settings class="com.google.devtools.intellig.configcheck.ProjectPathChecker" />
+      <class-settings class="com.google.devtools.intellig.configcheck.ProjectJdkChecker">
+        <setting name="getProjectJdk" value="/usr/java/jdk1.5.0_05" />
+        <setting name="getModuleJdks" value="rO0ABXNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAABA/QAAAAAAAAHg=" />
+      </class-settings>
+      <class-settings class="com.google.devtools.intellig.configcheck.PythonSdkChecker" />
+      <class-settings class="com.google.devtools.intellig.configcheck.ClearOutputChecker" />
+    </settings>
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="CLEAR_OUTPUT_DIRECTORY" value="true" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="DataSourceManagerImpl" />
+  <component name="DependenciesAnalyzeManager">
+    <option name="myForwardDirection" value="false" />
+  </component>
+  <component name="DependencyValidationManager" />
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+  <component name="GUI Designer component loader factory" />
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="512" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="Mach integration configuration">
+    <pre-compile enabled="false" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/guice.iml" filepath="$PROJECT_DIR$/guice.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="true" project-jdk-name="1.5" />
+  <component name="RmicSettings">
+    <option name="IS_EANABLED" value="false" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_IIOP_STUBS" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="libraryTable" />
+  <component name="uidesigner-configuration">
+    <option name="INSTRUMENT_CLASSES" value="true" />
+    <option name="COPY_FORMS_RUNTIME_TO_OUTPUT" value="true" />
+  </component>
+  <UsedPathMacros />
+</project>
+
diff --git a/guice.iws b/guice.iws
new file mode 100644
index 0000000000..8af62075a9
--- /dev/null
+++ b/guice.iws
@@ -0,0 +1,796 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="false">
+  <component name="AspectsView" />
+  <component name="BookmarkManager" />
+  <component name="ChangeBrowserSettings">
+    <option name="MAIN_SPLITTER_PROPORTION" value="0.3" />
+    <option name="MESSAGES_SPLITTER_PROPORTION" value="0.8" />
+    <option name="USE_DATE_BEFORE_FILTER" value="false" />
+    <option name="USE_DATE_AFTER_FILTER" value="false" />
+    <option name="USE_CHANGE_BEFORE_FILTER" value="false" />
+    <option name="USE_CHANGE_AFTER_FILTER" value="false" />
+    <option name="DATE_BEFORE" value="" />
+    <option name="DATE_AFTER" value="" />
+    <option name="CHANGE_BEFORE" value="" />
+    <option name="CHANGE_AFTER" value="" />
+    <option name="USE_USER_FILTER" value="false" />
+    <option name="USER" value="" />
+  </component>
+  <component name="CheckinPanelState" />
+  <component name="Commander">
+    <leftPanel />
+    <rightPanel />
+    <splitter proportion="0.5" />
+  </component>
+  <component name="CompilerWorkspaceConfiguration">
+    <option name="COMPILE_IN_BACKGROUND" value="true" />
+    <option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true" />
+    <option name="CLOSE_MESSAGE_VIEW_IF_SUCCESS" value="false" />
+    <option name="COMPILE_DEPENDENT_FILES" value="false" />
+  </component>
+  <component name="Cvs2Configuration">
+    <option name="PRUNE_EMPTY_DIRECTORIES" value="true" />
+    <option name="MERGING_MODE" value="0" />
+    <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD" />
+    <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD" />
+    <option name="RESET_STICKY" value="false" />
+    <option name="CREATE_NEW_DIRECTORIES" value="true" />
+    <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv" />
+    <option name="PROCESS_UNKNOWN_FILES" value="false" />
+    <option name="PROCESS_DELETED_FILES" value="false" />
+    <option name="PROCESS_IGNORED_FILES" value="false" />
+    <option name="RESERVED_EDIT" value="false" />
+    <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS">
+      <value>
+        <option name="BRANCH" value="" />
+        <option name="DATE" value="" />
+        <option name="USE_BRANCH" value="false" />
+        <option name="USE_DATE" value="false" />
+      </value>
+    </option>
+    <option name="UPDATE_DATE_OR_REVISION_SETTINGS">
+      <value>
+        <option name="BRANCH" value="" />
+        <option name="DATE" value="" />
+        <option name="USE_BRANCH" value="false" />
+        <option name="USE_DATE" value="false" />
+      </value>
+    </option>
+    <option name="SHOW_CHANGES_REVISION_SETTINGS">
+      <value>
+        <option name="BRANCH" value="" />
+        <option name="DATE" value="" />
+        <option name="USE_BRANCH" value="false" />
+        <option name="USE_DATE" value="false" />
+      </value>
+    </option>
+    <option name="SHOW_OUTPUT" value="false" />
+    <option name="ADD_WATCH_INDEX" value="0" />
+    <option name="REMOVE_WATCH_INDEX" value="0" />
+    <option name="UPDATE_KEYWORD_SUBSTITUTION" />
+    <option name="MAKE_NEW_FILES_READONLY" value="false" />
+    <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0" />
+    <option name="TAG_AFTER_PROJECT_COMMIT" value="false" />
+    <option name="OVERRIDE_EXISTING_TAG_FOR_PROJECT" value="true" />
+    <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value="" />
+    <option name="CLEAN_COPY" value="false" />
+  </component>
+  <component name="DaemonCodeAnalyzer">
+    <disable_hints />
+  </component>
+  <component name="DebuggerManager">
+    <breakpoint_any>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+    </breakpoint_any>
+    <breakpoint_rules />
+    <ui_properties />
+  </component>
+  <component name="ErrorTreeViewConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="HIDE_WARNINGS" value="false" />
+  </component>
+  <component name="FavoritesViewImpl">
+    <favorites_list name="guice">
+      <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+      <option name="IS_SHOW_MEMBERS" value="false" />
+      <option name="IS_STRUCTURE_VIEW" value="false" />
+      <option name="IS_SHOW_MODULES" value="true" />
+      <option name="IS_FLATTEN_PACKAGES" value="false" />
+      <option name="IS_ABBREVIATION_PACKAGE_NAMES" value="false" />
+      <option name="IS_HIDE_EMPTY_MIDDLE_PACKAGES" value="false" />
+      <option name="IS_SHOW_LIBRARY_CONTENTS" value="true" />
+    </favorites_list>
+    <option name="myCurrentFavoritesList" value="guice" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file leaf-file-name="StaticInjectionTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/StaticInjectionTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="18" column="0" selection-start="625" selection-end="625" vertical-scroll-proportion="0.09550562">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="AllTests.java" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/AllTests.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="29" column="13" selection-start="964" selection-end="964" vertical-scroll-proportion="0.21488763">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Context.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Context.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="25" column="17" selection-start="765" selection-end="765" vertical-scroll-proportion="0.26264045">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="InternalContext.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalContext.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="80" column="0" selection-start="2270" selection-end="2270" vertical-scroll-proportion="1.5519663">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ContainerImpl.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="57" column="21" selection-start="1679" selection-end="1679" vertical-scroll-proportion="0.66853935">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ReferenceMapTestSuite.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/ReferenceMapTestSuite.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="37" column="13" selection-start="1120" selection-end="1120" vertical-scroll-proportion="-3.414326">
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Strings.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Strings.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="23" column="13" selection-start="717" selection-end="717" vertical-scroll-proportion="0.21488763">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FinalizableReferenceQueueTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/FinalizableReferenceQueueTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="23" column="13" selection-start="726" selection-end="726" vertical-scroll-proportion="0.21488763">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FinalizableSoftReference.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizableSoftReference.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="27" column="22" selection-start="971" selection-end="971" vertical-scroll-proportion="0.31039324">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FinalizableWeakReference.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizableWeakReference.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="0" column="0" selection-start="0" selection-end="596" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ReferenceCacheTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/ReferenceCacheTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="31" column="13" selection-start="1046" selection-end="1046" vertical-scroll-proportion="-2.1741574">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ReferenceCache.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/ReferenceCache.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="35" column="22" selection-start="1184" selection-end="1184" vertical-scroll-proportion="0.28651685">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Function.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Function.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="37" column="17" selection-start="1505" selection-end="1505" vertical-scroll-proportion="0.5491573">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Function.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file:///usr/local/client/2/google3/java/com/google/common/base/Function.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="32" column="0" selection-start="86" selection-end="1109" vertical-scroll-proportion="0.76404494">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FinalizablePhantomReference.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizablePhantomReference.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="28" column="22" selection-start="980" selection-end="980" vertical-scroll-proportion="0.33426967">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FinalizableReference.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizableReference.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="24" column="10" selection-start="817" selection-end="817" vertical-scroll-proportion="0.23876405">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ReferenceMapTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/ReferenceMapTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="33" column="13" selection-start="1012" selection-end="1012" vertical-scroll-proportion="0.28651685">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ReferenceMap.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/ReferenceMap.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="59" column="13" selection-start="2382" selection-end="2382" vertical-scroll-proportion="-11.98736">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ReferenceType.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/ReferenceType.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="25" column="12" selection-start="810" selection-end="810" vertical-scroll-proportion="0.26264045">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="SpringTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/SpringTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="98" column="23" selection-start="3419" selection-end="3419" vertical-scroll-proportion="0.42696628">
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Key.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Key.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindManager">
+    <FindUsagesManager>
+      <setting name="OPEN_NEW_TAB" value="false" />
+    </FindUsagesManager>
+  </component>
+  <component name="HierarchyBrowserManager">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="SORT_ALPHABETICALLY" value="false" />
+    <option name="HIDE_CLASSES_WHERE_METHOD_NOT_IMPLEMENTED" value="false" />
+  </component>
+  <component name="InspectionManager">
+    <option name="AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="SPLITTER_PROPORTION" value="0.5" />
+    <option name="GROUP_BY_SEVERITY" value="false" />
+    <option name="ANALYZE_TEST_SOURCES" value="true" />
+    <option name="SCOPE_TYPE" value="1" />
+    <option name="CUSTOM_SCOPE_NAME" value="" />
+    <profile name="Default" />
+  </component>
+  <component name="J2EEProjectPane">
+    <PATH>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="guice.ipr" />
+        <option name="myItemType" value="com.intellij.j2ee.module.view.nodes.J2EEProjectNodeDescriptor" />
+      </PATH_ELEMENT>
+    </PATH>
+    <setting name="SHOW_AS_DEPLOYMENT_VIEW" value="false" />
+  </component>
+  <component name="ModuleEditorState">
+    <option name="LAST_EDITED_MODULE_NAME" value="guice" />
+    <option name="LAST_EDITED_TAB_NAME" value="Paths" />
+  </component>
+  <component name="NamedScopeManager" />
+  <component name="PackagesPane">
+    <PATH>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="guice.ipr" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
+      </PATH_ELEMENT>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="guice" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+      </PATH_ELEMENT>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="com.google.inject.util" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
+      </PATH_ELEMENT>
+    </PATH>
+    <PATH>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="guice.ipr" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
+      </PATH_ELEMENT>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="guice" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+      </PATH_ELEMENT>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="com.google.inject" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
+      </PATH_ELEMENT>
+    </PATH>
+  </component>
+  <component name="PerforceChangeBrowserSettings">
+    <option name="USE_CLIENT_FILTER" value="true" />
+    <option name="CLIENT" value="" />
+  </component>
+  <component name="PerforceDirect.Settings">
+    <option name="useP4CONFIG" value="true" />
+    <option name="port" value="&lt;perforce_server&gt;:1666" />
+    <option name="client" value="" />
+    <option name="user" value="" />
+    <option name="passwd" value="" />
+    <option name="showCmds" value="false" />
+    <option name="useNativeApi" value="false" />
+    <option name="pathToExec" value="p4" />
+    <option name="useCustomPathToExec" value="false" />
+    <option name="SYNC_FORCE" value="false" />
+    <option name="SYNC_RUN_RESOLVE" value="true" />
+    <option name="REVERT_UNCHANGED_FILES" value="true" />
+    <option name="CHARSET" value="none" />
+    <option name="SHOW_BRANCHES_HISTORY" value="true" />
+    <option name="ENABLED" value="true" />
+    <option name="USE_LOGIN" value="false" />
+    <option name="LOGIN_SILENTLY" value="false" />
+    <option name="INTEGRATE_BRANCH_NAME" />
+    <option name="INTEGRATE_CHANGELIST_NUM" value="-1" />
+    <option name="INTEGRATE_RUN_RESOLVE" value="true" />
+    <option name="INTEGRATE_REVERT_UNCHANGED" value="true" />
+    <option name="INTEGRATE_CHANGE_LIST_NUMBER" value="" />
+    <option name="INTEGRATE_CHANGE_LIST" value="false" />
+    <option name="INTEGRATE_REVERSE" value="false" />
+  </component>
+  <component name="ProjectLevelVcsManager">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkin" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="ProjectPane">
+    <PATH>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="guice.ipr" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+      </PATH_ELEMENT>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="guice" />
+        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+      </PATH_ELEMENT>
+    </PATH>
+  </component>
+  <component name="ProjectReloadState">
+    <option name="STATE" value="0" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="PackagesPane" splitterProportion="0.5">
+      <flattenPackages PackagesPane="true" />
+      <showMembers />
+      <showModules PackagesPane="true" />
+      <showLibraryContents PackagesPane="false" />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <showStructure PackagesPane="false" ProjectPane="false" />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+    </navigator>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="MemberChooser.copyJavadoc" value="false" />
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="RunManagerConfig.compileBeforeRunning" value="true" />
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="last_opened_file_path" value="/usr/local/client/2/google3/java/com/google/common/base" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="RunManagerConfig.showSettingsBeforeRunnig" value="false" />
+  </component>
+  <component name="ReadonlyStatusHandler">
+    <option name="SHOW_DIALOG" value="true" />
+  </component>
+  <component name="RecentsManager">
+    <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+      <recent name="com.google.inject.util" />
+    </key>
+  </component>
+  <component name="RestoreUpdateTree" />
+  <component name="RunManager">
+    <activeType name="JUnit" />
+    <tempConfiguration selected="true" default="false" name="AllTests" type="JUnit" factoryName="JUnit">
+      <module name="guice" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" value="com.google.inject" />
+      <option name="MAIN_CLASS_NAME" value="com.google.inject.AllTests" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ADDITIONAL_CLASS_PATH" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="wholeProject" />
+      </option>
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+    </tempConfiguration>
+    <configuration selected="false" default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+    </configuration>
+    <configuration selected="false" default="true" type="JUnit" factoryName="JUnit">
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ADDITIONAL_CLASS_PATH" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="wholeProject" />
+      </option>
+    </configuration>
+    <configuration selected="false" default="true" type="Application" factoryName="Application">
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <module name="" />
+    </configuration>
+    <configuration selected="false" default="true" type="Applet" factoryName="Applet">
+      <module name="" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="HTML_FILE_NAME" />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <option name="VM_PARAMETERS" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+    </configuration>
+  </component>
+  <component name="SelectInManager" />
+  <component name="StructuralSearchPlugin" />
+  <component name="StructureViewFactory">
+    <option name="AUTOSCROLL_MODE" value="true" />
+    <option name="AUTOSCROLL_FROM_SOURCE" value="false" />
+    <option name="ACTIVE_ACTIONS" value="" />
+  </component>
+  <component name="SvnChangesBrowserSettings">
+    <option name="USE_AUTHOR_FIELD" value="true" />
+    <option name="AUTHOR" value="" />
+    <option name="LOCATION" value="" />
+    <option name="USE_PROJECT_SETTINGS" value="true" />
+    <option name="USE_ALTERNATE_LOCATION" value="false" />
+  </component>
+  <component name="SvnConfiguration">
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="PROCESS_UNRESOLVED" value="false" />
+  </component>
+  <component name="TodoView" selected-index="0">
+    <todo-panel id="selected-file">
+      <are-packages-shown value="false" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="all">
+      <are-packages-shown value="true" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="0" y="0" width="1920" height="1154" extended-state="6" />
+    <editor active="false" />
+    <layout>
+      <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="8" />
+      <window_info id="Mach" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="9" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.13763441" order="0" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.29640427" order="1" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.16236559" order="1" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.35568514" order="10" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6" />
+      <window_info id="Profile" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32911393" order="13" />
+      <window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="3" />
+      <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="11" />
+      <window_info id="Favorites" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="4" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.14623655" order="1" />
+      <window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.29154518" order="2" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
+      <window_info id="File View" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="6" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3265306" order="4" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.39978448" order="0" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3291262" order="12" />
+      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0" />
+      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3" />
+      <window_info id="Dependencies" active="false" anchor="right" auto_hide="false" internal_type="docked" type="floating" visible="false" weight="0.33" order="5" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5" />
+    </layout>
+  </component>
+  <component name="VCS.FileViewConfiguration">
+    <option name="SELECTED_STATUSES" value="DEFAULT" />
+    <option name="SELECTED_COLUMNS" value="DEFAULT" />
+    <option name="SHOW_FILTERS" value="true" />
+    <option name="CUSTOMIZE_VIEW" value="true" />
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="true" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
+    <option name="LAST_COMMIT_MESSAGE" />
+    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
+    <option name="ERROR_OCCURED" value="false" />
+    <option name="ACTIVE_VCS_NAME" />
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/StaticInjectionTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="18" column="0" selection-start="625" selection-end="625" vertical-scroll-proportion="0.09550562">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Key.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Strings.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="23" column="13" selection-start="717" selection-end="717" vertical-scroll-proportion="0.21488763">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/ReferenceType.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="25" column="12" selection-start="810" selection-end="810" vertical-scroll-proportion="0.26264045">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/ReferenceMapTestSuite.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="37" column="13" selection-start="1120" selection-end="1120" vertical-scroll-proportion="-3.414326">
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/ReferenceMapTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="33" column="13" selection-start="1012" selection-end="1012" vertical-scroll-proportion="0.28651685">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/ReferenceMap.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="59" column="13" selection-start="2382" selection-end="2382" vertical-scroll-proportion="-11.98736">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizablePhantomReference.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="28" column="22" selection-start="980" selection-end="980" vertical-scroll-proportion="0.33426967">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizableReference.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="24" column="10" selection-start="817" selection-end="817" vertical-scroll-proportion="0.23876405">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/FinalizableReferenceQueueTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="23" column="13" selection-start="726" selection-end="726" vertical-scroll-proportion="0.21488763">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizableSoftReference.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="27" column="22" selection-start="971" selection-end="971" vertical-scroll-proportion="0.31039324">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/FinalizableWeakReference.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="0" column="0" selection-start="0" selection-end="596" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file:///usr/local/client/2/google3/java/com/google/common/base/Function.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="32" column="0" selection-start="86" selection-end="1109" vertical-scroll-proportion="0.76404494">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Function.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="37" column="17" selection-start="1505" selection-end="1505" vertical-scroll-proportion="0.5491573">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/ReferenceCache.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="35" column="22" selection-start="1184" selection-end="1184" vertical-scroll-proportion="0.28651685">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/util/ReferenceCacheTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="31" column="13" selection-start="1046" selection-end="1046" vertical-scroll-proportion="-2.1741574">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/SpringTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="98" column="23" selection-start="3419" selection-end="3419" vertical-scroll-proportion="0.42696628">
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Context.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="25" column="17" selection-start="765" selection-end="765" vertical-scroll-proportion="0.26264045">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalContext.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="80" column="0" selection-start="2270" selection-end="2270" vertical-scroll-proportion="1.5519663">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="57" column="21" selection-start="1679" selection-end="1679" vertical-scroll-proportion="0.66853935">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/AllTests.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="29" column="13" selection-start="964" selection-end="964" vertical-scroll-proportion="0.21488763">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>
+
diff --git a/javadoc/allclasses-frame.html b/javadoc/allclasses-frame.html
new file mode 100644
index 0000000000..e7e322913d
--- /dev/null
+++ b/javadoc/allclasses-frame.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+All Classes (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/inject/Container.html" title="interface in com.google.inject" target="classFrame"><I>Container</I></A>
+<BR>
+<A HREF="com/google/inject/ContainerBuilder.html" title="class in com.google.inject" target="classFrame">ContainerBuilder</A>
+<BR>
+<A HREF="com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject" target="classFrame"><I>ContainerBuilder.Command</I></A>
+<BR>
+<A HREF="com/google/inject/Context.html" title="interface in com.google.inject" target="classFrame"><I>Context</I></A>
+<BR>
+<A HREF="com/google/inject/DependencyException.html" title="class in com.google.inject" target="classFrame">DependencyException</A>
+<BR>
+<A HREF="com/google/inject/Factory.html" title="interface in com.google.inject" target="classFrame"><I>Factory</I></A>
+<BR>
+<A HREF="com/google/inject/Inject.html" title="annotation in com.google.inject" target="classFrame">Inject</A>
+<BR>
+<A HREF="com/google/inject/Scope.html" title="enum in com.google.inject" target="classFrame">Scope</A>
+<BR>
+<A HREF="com/google/inject/Scope.Strategy.html" title="interface in com.google.inject" target="classFrame"><I>Scope.Strategy</I></A>
+<BR>
+<A HREF="com/google/inject/Scoped.html" title="annotation in com.google.inject" target="classFrame">Scoped</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/javadoc/allclasses-noframe.html b/javadoc/allclasses-noframe.html
new file mode 100644
index 0000000000..93d155cf15
--- /dev/null
+++ b/javadoc/allclasses-noframe.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+All Classes (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/inject/Container.html" title="interface in com.google.inject"><I>Container</I></A>
+<BR>
+<A HREF="com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<BR>
+<A HREF="com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><I>ContainerBuilder.Command</I></A>
+<BR>
+<A HREF="com/google/inject/Context.html" title="interface in com.google.inject"><I>Context</I></A>
+<BR>
+<A HREF="com/google/inject/DependencyException.html" title="class in com.google.inject">DependencyException</A>
+<BR>
+<A HREF="com/google/inject/Factory.html" title="interface in com.google.inject"><I>Factory</I></A>
+<BR>
+<A HREF="com/google/inject/Inject.html" title="annotation in com.google.inject">Inject</A>
+<BR>
+<A HREF="com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>
+<BR>
+<A HREF="com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><I>Scope.Strategy</I></A>
+<BR>
+<A HREF="com/google/inject/Scoped.html" title="annotation in com.google.inject">Scoped</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/Container.html b/javadoc/com/google/inject/Container.html
new file mode 100644
index 0000000000..401f5792ee
--- /dev/null
+++ b/javadoc/com/google/inject/Container.html
@@ -0,0 +1,419 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:55 PDT 2006 -->
+<TITLE>
+Container (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.Container interface">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Container (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Container.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Container.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Interface Container</H2>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Container</B></DL>
+</PRE>
+
+<P>
+Injects dependencies into constructors, methods and fields annotated with
+ <A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><CODE>Inject</CODE></A>. Immutable.
+
+ <p>When injecting a method or constructor, you can additionally annotate
+ its parameters with <A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><CODE>Inject</CODE></A> and specify a dependency name. When a
+ parameter has no annotation, the container uses the name from the method or
+ constructor's <A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><CODE>Inject</CODE></A> annotation respectively.
+
+ <p>For example:
+
+ <pre>
+  class Foo {
+
+    // Inject the int constant named "i".
+    &#64;Inject("i") int i;
+
+    // Inject the default implementation of Bar and the String constant
+    // named "s".
+    &#64;Inject Foo(Bar bar, @Inject("s") String s) {
+      ...
+    }
+
+    // Inject the default implementation of Baz and the Bob implementation
+    // named "foo".
+    &#64;Inject void initialize(Baz baz, @Inject("foo") Bob bob) {
+      ...
+    }
+
+    // Inject the default implementation of Tee.
+    &#64;Inject void setTee(Tee tee) {
+      ...
+    }
+  }
+ </pre>
+
+ <p>To create and inject an instance of <code>Foo</code>:
+
+ <pre>
+  Container c = ...;
+  Foo foo = c.inject(Foo.class);
+ </pre>
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob@google.com (Bob Lee)</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><CODE>ContainerBuilder</CODE></A></DL>
+<HR>
+
+<P>
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Container.html#DEFAULT_NAME">DEFAULT_NAME</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default dependency name.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Container.html#getInstance(java.lang.Class)">getInstance</A></B>(java.lang.Class&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>getInstance(type,
+ DEFAULT_NAME)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Container.html#getInstance(java.lang.Class, java.lang.String)">getInstance</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+            java.lang.String&nbsp;name)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets an instance of the given dependency which was declared in
+ <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><CODE>ContainerBuilder</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Container.html#inject(java.lang.Class)">inject</A></B>(java.lang.Class&lt;T&gt;&nbsp;implementation)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates and injects a new instance of type <code>implementation</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Container.html#inject(java.lang.Object)">inject</A></B>(java.lang.Object&nbsp;o)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Injects dependencies into the fields and methods of an existing object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Container.html#removeScopeStrategy()">removeScopeStrategy</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the scope strategy for the current thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Container.html#setScopeStrategy(com.google.inject.Scope.Strategy)">setScopeStrategy</A></B>(<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A>&nbsp;scopeStrategy)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the scope strategy for the current thread.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="DEFAULT_NAME"><!-- --></A><H3>
+DEFAULT_NAME</H3>
+<PRE>
+static final java.lang.String <B>DEFAULT_NAME</B></PRE>
+<DL>
+<DD>Default dependency name.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.google.inject.Container.DEFAULT_NAME">Constant Field Values</A></DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="inject(java.lang.Object)"><!-- --></A><H3>
+inject</H3>
+<PRE>
+void <B>inject</B>(java.lang.Object&nbsp;o)</PRE>
+<DL>
+<DD>Injects dependencies into the fields and methods of an existing object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inject(java.lang.Class)"><!-- --></A><H3>
+inject</H3>
+<PRE>
+&lt;T&gt; T <B>inject</B>(java.lang.Class&lt;T&gt;&nbsp;implementation)</PRE>
+<DL>
+<DD>Creates and injects a new instance of type <code>implementation</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInstance(java.lang.Class, java.lang.String)"><!-- --></A><H3>
+getInstance</H3>
+<PRE>
+&lt;T&gt; T <B>getInstance</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                  java.lang.String&nbsp;name)</PRE>
+<DL>
+<DD>Gets an instance of the given dependency which was declared in
+ <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><CODE>ContainerBuilder</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInstance(java.lang.Class)"><!-- --></A><H3>
+getInstance</H3>
+<PRE>
+&lt;T&gt; T <B>getInstance</B>(java.lang.Class&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>getInstance(type,
+ DEFAULT_NAME)</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setScopeStrategy(com.google.inject.Scope.Strategy)"><!-- --></A><H3>
+setScopeStrategy</H3>
+<PRE>
+void <B>setScopeStrategy</B>(<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A>&nbsp;scopeStrategy)</PRE>
+<DL>
+<DD>Sets the scope strategy for the current thread.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeScopeStrategy()"><!-- --></A><H3>
+removeScopeStrategy</H3>
+<PRE>
+void <B>removeScopeStrategy</B>()</PRE>
+<DL>
+<DD>Removes the scope strategy for the current thread.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Container.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Container.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/ContainerBuilder.Command.html b/javadoc/com/google/inject/ContainerBuilder.Command.html
new file mode 100644
index 0000000000..d6e73f8bc0
--- /dev/null
+++ b/javadoc/com/google/inject/ContainerBuilder.Command.html
@@ -0,0 +1,208 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+ContainerBuilder.Command (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.ContainerBuilder.Command interface">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ContainerBuilder.Command (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/ContainerBuilder.Command.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="ContainerBuilder.Command.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Interface ContainerBuilder.Command</H2>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static interface <B>ContainerBuilder.Command</B></DL>
+</PRE>
+
+<P>
+Implemented by classes which participate in building a container.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.Command.html#build(com.google.inject.ContainerBuilder)">build</A></B>(<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>&nbsp;builder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Contributes factories to the given builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="build(com.google.inject.ContainerBuilder)"><!-- --></A><H3>
+build</H3>
+<PRE>
+void <B>build</B>(<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>&nbsp;builder)</PRE>
+<DL>
+<DD>Contributes factories to the given builder.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>builder</CODE> - </DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/ContainerBuilder.Command.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="ContainerBuilder.Command.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/ContainerBuilder.html b/javadoc/com/google/inject/ContainerBuilder.html
new file mode 100644
index 0000000000..7b0c78ac6c
--- /dev/null
+++ b/javadoc/com/google/inject/ContainerBuilder.html
@@ -0,0 +1,1000 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:55 PDT 2006 -->
+<TITLE>
+ContainerBuilder (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.ContainerBuilder class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ContainerBuilder (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/ContainerBuilder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="ContainerBuilder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Class ContainerBuilder</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.google.inject.ContainerBuilder</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public final class <B>ContainerBuilder</B><DT>extends java.lang.Object</DL>
+</PRE>
+
+<P>
+Builds a dependency injection <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>. The combination of
+ dependency type and name uniquely identifies a dependency mapping; you can
+ use the same name for two different types. Not safe for concurrent use.
+
+ <p>Adds the following factories by default:
+
+ <ul>
+   <li>Injects the current <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>.
+   <li>Injects the <CODE>Logger</CODE> for the injected member's declaring class.
+ </ul>
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob@google.com (Bob Lee)</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject">ContainerBuilder.Command</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implemented by classes which participate in building a container.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#ContainerBuilder()">ContainerBuilder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new builder.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, boolean)">constant</A></B>(java.lang.String&nbsp;name,
+         boolean&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, char)">constant</A></B>(java.lang.String&nbsp;name,
+         char&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, java.lang.Class)">constant</A></B>(java.lang.String&nbsp;name,
+         java.lang.Class&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a class to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, double)">constant</A></B>(java.lang.String&nbsp;name,
+         double&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;E extends java.lang.Enum&lt;E&gt;&gt; 
+<BR>
+<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, E)">constant</A></B>(java.lang.String&nbsp;name,
+         E&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps an enum to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, float)">constant</A></B>(java.lang.String&nbsp;name,
+         float&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, int)">constant</A></B>(java.lang.String&nbsp;name,
+         int&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, long)">constant</A></B>(java.lang.String&nbsp;name,
+         long&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, short)">constant</A></B>(java.lang.String&nbsp;name,
+         short&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#constant(java.lang.String, java.lang.String)">constant</A></B>(java.lang.String&nbsp;name,
+         java.lang.String&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a constant value to the given name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#contains(java.lang.Class)">contains</A></B>(java.lang.Class&lt;?&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>contains(type,
+ Container.DEFAULT_NAME)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#contains(java.lang.Class, java.lang.String)">contains</A></B>(java.lang.Class&lt;?&gt;&nbsp;type,
+         java.lang.String&nbsp;name)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this builder contains a mapping for the given type and
+ name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject">Container</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#create(boolean)">create</A></B>(boolean&nbsp;loadSingletons)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A> instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, type)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.Class)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.Class&lt;? extends T&gt;&nbsp;implementation)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, implementation)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.Class, com.google.inject.Scope)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.Class&lt;? extends T&gt;&nbsp;implementation,
+        <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, implementation, scope)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, com.google.inject.Factory)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, factory, Scope.DEFAULT)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, com.google.inject.Factory, com.google.inject.Scope)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory,
+        <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, factory, scope)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, com.google.inject.Scope)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, type, scope)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.String&nbsp;name)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type, name, type)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.String&nbsp;name,
+        java.lang.Class&lt;? extends T&gt;&nbsp;implementation)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps an implementation class to a given dependency type and name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class, com.google.inject.Scope)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.String&nbsp;name,
+        java.lang.Class&lt;? extends T&gt;&nbsp;implementation,
+        <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps an implementation class to a given dependency type and name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Factory)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.String&nbsp;name,
+        <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type, name, factory,
+ Scope.DEFAULT)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Factory, com.google.inject.Scope)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.String&nbsp;name,
+        <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory,
+        <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a factory to a given dependency type and name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Scope)">factory</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+        java.lang.String&nbsp;name,
+        <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method.&nbsp;Equivalent to <code>factory(type, name, type,
+ scope)</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/ContainerBuilder.html#injectStatics(java.lang.Class...)">injectStatics</A></B>(java.lang.Class&lt;?&gt;...&nbsp;types)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Upon creation, the <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A> will inject static fields and methods
+ into the given classes.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="ContainerBuilder()"><!-- --></A><H3>
+ContainerBuilder</H3>
+<PRE>
+public <B>ContainerBuilder</B>()</PRE>
+<DL>
+<DD>Constructs a new builder.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="factory(java.lang.Class, java.lang.String, com.google.inject.Factory, com.google.inject.Scope)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.String&nbsp;name,
+                                    <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory,
+                                    <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</PRE>
+<DL>
+<DD>Maps a factory to a given dependency type and name.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - of dependency<DD><CODE>name</CODE> - of dependency<DD><CODE>factory</CODE> - creates objects to inject<DD><CODE>scope</CODE> - scope of injected instances
+<DT><B>Returns:</B><DD>this builder</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, com.google.inject.Factory, com.google.inject.Scope)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory,
+                                    <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, factory, scope)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Factory, com.google.inject.Scope)"><CODE>factory(Class, String, Factory, Scope)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, java.lang.String, com.google.inject.Factory)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.String&nbsp;name,
+                                    <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type, name, factory,
+ Scope.DEFAULT)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Factory, com.google.inject.Scope)"><CODE>factory(Class, String, Factory, Scope)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, com.google.inject.Factory)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    <A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>&lt;? extends T&gt;&nbsp;factory)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, factory, Scope.DEFAULT)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Factory, com.google.inject.Scope)"><CODE>factory(Class, String, Factory, Scope)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, java.lang.String, java.lang.Class, com.google.inject.Scope)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.String&nbsp;name,
+                                    java.lang.Class&lt;? extends T&gt;&nbsp;implementation,
+                                    <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</PRE>
+<DL>
+<DD>Maps an implementation class to a given dependency type and name. Creates
+ instances using the container, recursively injecting dependencies.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - of dependency<DD><CODE>name</CODE> - of dependency<DD><CODE>implementation</CODE> - class<DD><CODE>scope</CODE> - scope of injected instances
+<DT><B>Returns:</B><DD>this builder</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, java.lang.String, java.lang.Class)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.String&nbsp;name,
+                                    java.lang.Class&lt;? extends T&gt;&nbsp;implementation)</PRE>
+<DL>
+<DD>Maps an implementation class to a given dependency type and name. Creates
+ instances using the container, recursively injecting dependencies.
+
+ <p>Sets scope to value from <A HREF="../../../com/google/inject/Scoped.html" title="annotation in com.google.inject"><CODE>Scoped</CODE></A> annotation on the
+ implementation class. Defaults to <A HREF="../../../com/google/inject/Scope.html#DEFAULT"><CODE>Scope.DEFAULT</CODE></A> if no annotation
+ is found.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>type</CODE> - of dependency<DD><CODE>name</CODE> - of dependency<DD><CODE>implementation</CODE> - class
+<DT><B>Returns:</B><DD>this builder</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, java.lang.Class)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.Class&lt;? extends T&gt;&nbsp;implementation)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, implementation)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class)"><CODE>factory(Class, String, Class)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, type)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class)"><CODE>factory(Class, String, Class)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, java.lang.String)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.String&nbsp;name)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type, name, type)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class)"><CODE>factory(Class, String, Class)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, java.lang.Class, com.google.inject.Scope)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.Class&lt;? extends T&gt;&nbsp;implementation,
+                                    <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, implementation, scope)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class, com.google.inject.Scope)"><CODE>factory(Class, String, Class, Scope)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, com.google.inject.Scope)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, type, scope)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class, com.google.inject.Scope)"><CODE>factory(Class, String, Class, Scope)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="factory(java.lang.Class, java.lang.String, com.google.inject.Scope)"><!-- --></A><H3>
+factory</H3>
+<PRE>
+public &lt;T&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>factory</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                                    java.lang.String&nbsp;name,
+                                    <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&nbsp;scope)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type, name, type,
+ scope)</code>.
+<P>
+<DD><DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class, com.google.inject.Scope)"><CODE>factory(Class, String, Class, Scope)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, java.lang.String)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 java.lang.String&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, int)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 int&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, long)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 long&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, boolean)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 boolean&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, double)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 double&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, float)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 float&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, short)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 short&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, char)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 char&nbsp;value)</PRE>
+<DL>
+<DD>Maps a constant value to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String, java.lang.Class)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                 java.lang.Class&nbsp;value)</PRE>
+<DL>
+<DD>Maps a class to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="constant(java.lang.String,java.lang.Enum)"><!-- --></A><A NAME="constant(java.lang.String, E)"><!-- --></A><H3>
+constant</H3>
+<PRE>
+public &lt;E extends java.lang.Enum&lt;E&gt;&gt; <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>constant</B>(java.lang.String&nbsp;name,
+                                                               E&nbsp;value)</PRE>
+<DL>
+<DD>Maps an enum to the given name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="injectStatics(java.lang.Class...)"><!-- --></A><H3>
+injectStatics</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A> <B>injectStatics</B>(java.lang.Class&lt;?&gt;...&nbsp;types)</PRE>
+<DL>
+<DD>Upon creation, the <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A> will inject static fields and methods
+ into the given classes.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>types</CODE> - for which static members will be injected</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Class, java.lang.String)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(java.lang.Class&lt;?&gt;&nbsp;type,
+                        java.lang.String&nbsp;name)</PRE>
+<DL>
+<DD>Returns true if this builder contains a mapping for the given type and
+ name.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Class)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(java.lang.Class&lt;?&gt;&nbsp;type)</PRE>
+<DL>
+<DD>Convenience method.&nbsp;Equivalent to <code>contains(type,
+ Container.DEFAULT_NAME)</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="create(boolean)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject">Container</A> <B>create</B>(boolean&nbsp;loadSingletons)</PRE>
+<DL>
+<DD>Creates a <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A> instance. Injects static members for classes
+ which were registered using <A HREF="../../../com/google/inject/ContainerBuilder.html#injectStatics(java.lang.Class...)"><CODE>injectStatics(Class...)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>loadSingletons</CODE> - If true, the container will load all singletons
+  now. If false, the container will lazily load singletons. Eager loading
+  is appropriate for production use while lazy loading can speed
+  development.
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.IllegalStateException</CODE> - if called more than once</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/ContainerBuilder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="ContainerBuilder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/Context.html b/javadoc/com/google/inject/Context.html
new file mode 100644
index 0000000000..b2b0e1fb29
--- /dev/null
+++ b/javadoc/com/google/inject/Context.html
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Context (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.Context interface">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Context (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/DependencyException.html" title="class in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Context.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Context.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Interface Context</H2>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Context</B></DL>
+</PRE>
+
+<P>
+Context of the current injection.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob@google.com (Bob Lee)</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject">Container</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Context.html#getContainer()">getContainer</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;java.lang.reflect.Member</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Context.html#getMember()">getMember</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the field, method or constructor which is being injected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Context.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the name of the injection specified by <A HREF="../../../com/google/inject/Inject.html#value()"><CODE>Inject.value()</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Context.html#getScopeStrategy()">getScopeStrategy</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the current scope strategy.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;java.lang.Class&lt;?&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Context.html#getType()">getType</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the type of the field or parameter which is being injected.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="getContainer()"><!-- --></A><H3>
+getContainer</H3>
+<PRE>
+<A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject">Container</A> <B>getContainer</B>()</PRE>
+<DL>
+<DD>Gets the <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getScopeStrategy()"><!-- --></A><H3>
+getScopeStrategy</H3>
+<PRE>
+<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A> <B>getScopeStrategy</B>()</PRE>
+<DL>
+<DD>Gets the current scope strategy. See <A HREF="../../../com/google/inject/Container.html#setScopeStrategy(com.google.inject.Scope.Strategy)"><CODE>Container.setScopeStrategy(Scope.Strategy)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.IllegalStateException</CODE> - if no strategy has been set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMember()"><!-- --></A><H3>
+getMember</H3>
+<PRE>
+java.lang.reflect.Member <B>getMember</B>()</PRE>
+<DL>
+<DD>Gets the field, method or constructor which is being injected. Returns
+ <code>null</code> if the object currently being constructed is pre-loaded as
+ a singleton or requested from <A HREF="../../../com/google/inject/Container.html#getInstance(java.lang.Class)"><CODE>Container.getInstance(Class)</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getType()"><!-- --></A><H3>
+getType</H3>
+<PRE>
+java.lang.Class&lt;?&gt; <B>getType</B>()</PRE>
+<DL>
+<DD>Gets the type of the field or parameter which is being injected.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD>Gets the name of the injection specified by <A HREF="../../../com/google/inject/Inject.html#value()"><CODE>Inject.value()</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/DependencyException.html" title="class in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Context.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Context.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/DependencyException.html b/javadoc/com/google/inject/DependencyException.html
new file mode 100644
index 0000000000..6479eff899
--- /dev/null
+++ b/javadoc/com/google/inject/DependencyException.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+DependencyException (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.DependencyException class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="DependencyException (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/DependencyException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="DependencyException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Class DependencyException</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Throwable
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Exception
+          <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.RuntimeException
+              <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.google.inject.DependencyException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>DependencyException</B><DT>extends java.lang.RuntimeException</DL>
+</PRE>
+
+<P>
+Thrown when a dependency is misconfigured.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob@google.com (Bob Lee)</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#com.google.inject.DependencyException">Serialized Form</A></DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/DependencyException.html#DependencyException(java.lang.String)">DependencyException</A></B>(java.lang.String&nbsp;message)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/DependencyException.html#DependencyException(java.lang.String, java.lang.Throwable)">DependencyException</A></B>(java.lang.String&nbsp;message,
+                    java.lang.Throwable&nbsp;cause)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/DependencyException.html#DependencyException(java.lang.Throwable)">DependencyException</A></B>(java.lang.Throwable&nbsp;cause)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Throwable</B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="DependencyException(java.lang.String)"><!-- --></A><H3>
+DependencyException</H3>
+<PRE>
+public <B>DependencyException</B>(java.lang.String&nbsp;message)</PRE>
+<DL>
+</DL>
+<HR>
+
+<A NAME="DependencyException(java.lang.String, java.lang.Throwable)"><!-- --></A><H3>
+DependencyException</H3>
+<PRE>
+public <B>DependencyException</B>(java.lang.String&nbsp;message,
+                           java.lang.Throwable&nbsp;cause)</PRE>
+<DL>
+</DL>
+<HR>
+
+<A NAME="DependencyException(java.lang.Throwable)"><!-- --></A><H3>
+DependencyException</H3>
+<PRE>
+public <B>DependencyException</B>(java.lang.Throwable&nbsp;cause)</PRE>
+<DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/DependencyException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="DependencyException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/Factory.html b/javadoc/com/google/inject/Factory.html
new file mode 100644
index 0000000000..23d6bc9970
--- /dev/null
+++ b/javadoc/com/google/inject/Factory.html
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Factory (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.Factory interface">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Factory (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/DependencyException.html" title="class in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Factory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Factory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Interface Factory&lt;T&gt;</H2>
+<HR>
+<DL>
+<DT><PRE>public interface <B>Factory&lt;T&gt;</B></DL>
+</PRE>
+
+<P>
+A custom factory. Creates objects which will be injected.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob@google.com (Bob Lee)</DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/Factory.html" title="type parameter in Factory">T</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Factory.html#create(com.google.inject.Context)">create</A></B>(<A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject">Context</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an object to be injected.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create(com.google.inject.Context)"><!-- --></A><H3>
+create</H3>
+<PRE>
+<A HREF="../../../com/google/inject/Factory.html" title="type parameter in Factory">T</A> <B>create</B>(<A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject">Context</A>&nbsp;context)
+         throws java.lang.Exception</PRE>
+<DL>
+<DD>Creates an object to be injected.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>context</CODE> - of this injection
+<DT><B>Returns:</B><DD>instance to be injected
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE> - if unable to create object</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/DependencyException.html" title="class in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Factory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Factory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/Inject.html b/javadoc/com/google/inject/Inject.html
new file mode 100644
index 0000000000..40684e30f0
--- /dev/null
+++ b/javadoc/com/google/inject/Inject.html
@@ -0,0 +1,232 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Inject (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.Inject class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Inject (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Inject.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Inject.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;<A HREF="#annotation_type_optional_element_summary">OPTIONAL</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Annotation Type Inject</H2>
+<HR>
+<DL>
+<DT><PRE><FONT SIZE="-1">@Target(value={METHOD,CONSTRUCTOR,FIELD,PARAMETER})
+@Retention(value=RUNTIME)
+</FONT>public @interface <B>Inject</B></DL>
+</PRE>
+
+<P>
+<p>Annotates members and parameters which should have their value[s]
+ injected.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob@google.com (Bob Lee)</DD>
+</DL>
+<HR>
+
+<P>
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+
+<A NAME="annotation_type_optional_element_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Optional Element Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Inject.html#required()">required</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether or not injection is required.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Inject.html#value()">value</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dependency name.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="value()"><!-- --></A><H3>
+value</H3>
+<PRE>
+public abstract java.lang.String <B>value</B></PRE>
+<DL>
+<DD>Dependency name. Defaults to <A HREF="../../../com/google/inject/Container.html#DEFAULT_NAME"><CODE>Container.DEFAULT_NAME</CODE></A>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+<DL>
+<DT><B>Default:</B><DD>"default"</DD>
+</DL>
+</DL>
+<HR>
+
+<A NAME="required()"><!-- --></A><H3>
+required</H3>
+<PRE>
+public abstract boolean <B>required</B></PRE>
+<DL>
+<DD>Whether or not injection is required. Applicable only to methods and
+ fields (not constructors or parameters).
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+<DL>
+<DT><B>Default:</B><DD>true</DD>
+</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Inject.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Inject.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;<A HREF="#annotation_type_optional_element_summary">OPTIONAL</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/Scope.Strategy.html b/javadoc/com/google/inject/Scope.Strategy.html
new file mode 100644
index 0000000000..dc0f6cf737
--- /dev/null
+++ b/javadoc/com/google/inject/Scope.Strategy.html
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Scope.Strategy (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.Scope.Strategy interface">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Scope.Strategy (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Scoped.html" title="annotation in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Scope.Strategy.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Scope.Strategy.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Interface Scope.Strategy</H2>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public static interface <B>Scope.Strategy</B></DL>
+</PRE>
+
+<P>
+Pluggable scoping strategy. Enables users to provide custom
+ implementations of request, session, and wizard scopes. Implement and
+ pass to <A HREF="../../../com/google/inject/Container.html#setScopeStrategy(com.google.inject.Scope.Strategy)"><CODE>Container.setScopeStrategy(com.google.inject.Scope.Strategy)</CODE></A>.
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.Strategy.html#findInRequest(java.lang.Class, java.lang.String, java.util.concurrent.Callable)">findInRequest</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+              java.lang.String&nbsp;name,
+              java.util.concurrent.Callable&lt;? extends T&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Finds an object for the given type and name in the request scope.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.Strategy.html#findInSession(java.lang.Class, java.lang.String, java.util.concurrent.Callable)">findInSession</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+              java.lang.String&nbsp;name,
+              java.util.concurrent.Callable&lt;? extends T&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Finds an object for the given type and name in the session scope.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR ALIGN="right" VALIGN="">
+<TD NOWRAP><FONT SIZE="-1">
+<CODE>&lt;T&gt; T</CODE></FONT></TD>
+</TR>
+</TABLE>
+</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.Strategy.html#findInWizard(java.lang.Class, java.lang.String, java.util.concurrent.Callable)">findInWizard</A></B>(java.lang.Class&lt;T&gt;&nbsp;type,
+             java.lang.String&nbsp;name,
+             java.util.concurrent.Callable&lt;? extends T&gt;&nbsp;factory)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Finds an object for the given type and name in the wizard scope.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="findInRequest(java.lang.Class, java.lang.String, java.util.concurrent.Callable)"><!-- --></A><H3>
+findInRequest</H3>
+<PRE>
+&lt;T&gt; T <B>findInRequest</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                    java.lang.String&nbsp;name,
+                    java.util.concurrent.Callable&lt;? extends T&gt;&nbsp;factory)
+                throws java.lang.Exception</PRE>
+<DL>
+<DD>Finds an object for the given type and name in the request scope.
+ Creates a new object if necessary using the given factory.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="findInSession(java.lang.Class, java.lang.String, java.util.concurrent.Callable)"><!-- --></A><H3>
+findInSession</H3>
+<PRE>
+&lt;T&gt; T <B>findInSession</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                    java.lang.String&nbsp;name,
+                    java.util.concurrent.Callable&lt;? extends T&gt;&nbsp;factory)
+                throws java.lang.Exception</PRE>
+<DL>
+<DD>Finds an object for the given type and name in the session scope.
+ Creates a new object if necessary using the given factory.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="findInWizard(java.lang.Class, java.lang.String, java.util.concurrent.Callable)"><!-- --></A><H3>
+findInWizard</H3>
+<PRE>
+&lt;T&gt; T <B>findInWizard</B>(java.lang.Class&lt;T&gt;&nbsp;type,
+                   java.lang.String&nbsp;name,
+                   java.util.concurrent.Callable&lt;? extends T&gt;&nbsp;factory)
+               throws java.lang.Exception</PRE>
+<DL>
+<DD>Finds an object for the given type and name in the wizard scope.
+ Creates a new object if necessary using the given factory.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Scoped.html" title="annotation in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Scope.Strategy.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Scope.Strategy.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/Scope.html b/javadoc/com/google/inject/Scope.html
new file mode 100644
index 0000000000..c0526ee7a4
--- /dev/null
+++ b/javadoc/com/google/inject/Scope.html
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Scope (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.Scope class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Scope (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Scope.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Scope.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Enum Scope</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Enum&lt;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&gt;
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>com.google.inject.Scope</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable, java.lang.Comparable&lt;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&gt;</DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public enum <B>Scope</B><DT>extends java.lang.Enum&lt;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>&gt;</DL>
+</PRE>
+
+<P>
+Scope of an injected objects.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;interface</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pluggable scoping strategy.</TD>
+</TR>
+</TABLE>
+&nbsp;<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+
+<A NAME="enum_constant_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Enum Constant Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#DEFAULT">DEFAULT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One instance per injection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#REQUEST">REQUEST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One instance per request.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#SESSION">SESSION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One instance per session.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#SINGLETON">SINGLETON</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One instance per container.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#THREAD">THREAD</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One instance per thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#WIZARD">WIZARD</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One instance per wizard.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#valueOf(java.lang.String)">valueOf</A></B>(java.lang.String&nbsp;name)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the enum constant of this type with the specified name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Scope.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the constants of this enum type, in
+the order they're declared.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Enum"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Enum</B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>clone, compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>finalize, getClass, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+
+<A NAME="enum_constant_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Enum Constant Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="DEFAULT"><!-- --></A><H3>
+DEFAULT</H3>
+<PRE>
+public static final <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>DEFAULT</B></PRE>
+<DL>
+<DD>One instance per injection.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="SINGLETON"><!-- --></A><H3>
+SINGLETON</H3>
+<PRE>
+public static final <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>SINGLETON</B></PRE>
+<DL>
+<DD>One instance per container.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="THREAD"><!-- --></A><H3>
+THREAD</H3>
+<PRE>
+public static final <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>THREAD</B></PRE>
+<DL>
+<DD>One instance per thread.
+
+ <p><b>Note:</b> if a thread local object strongly references its <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>, neither the <code>Container</code> nor the object will be
+ eligible for garbage collection, i.e. memory leak.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="REQUEST"><!-- --></A><H3>
+REQUEST</H3>
+<PRE>
+public static final <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>REQUEST</B></PRE>
+<DL>
+<DD>One instance per request.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="SESSION"><!-- --></A><H3>
+SESSION</H3>
+<PRE>
+public static final <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>SESSION</B></PRE>
+<DL>
+<DD>One instance per session.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="WIZARD"><!-- --></A><H3>
+WIZARD</H3>
+<PRE>
+public static final <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>WIZARD</B></PRE>
+<DL>
+<DD>One instance per wizard.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public static final <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>[] <B>values</B>()</PRE>
+<DL>
+<DD>Returns an array containing the constants of this enum type, in
+the order they're declared.  This method may be used to iterate
+over the constants as follows:
+<pre>
+for(Scope c : Scope.values())
+        System.out.println(c);
+</pre>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an array containing the constants of this enum type, in
+the order they're declared</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="valueOf(java.lang.String)"><!-- --></A><H3>
+valueOf</H3>
+<PRE>
+public static <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>valueOf</B>(java.lang.String&nbsp;name)</PRE>
+<DL>
+<DD>Returns the enum constant of this type with the specified name.
+The string must match <I>exactly</I> an identifier used to declare an
+enum constant in this type.  (Extraneous whitespace characters are 
+not permitted.)
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the enum constant to be returned.
+<DT><B>Returns:</B><DD>the enum constant with the specified name
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.IllegalArgumentException</CODE> - if this enum type has no constant
+with the specified name</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Scope.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Scope.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/Scoped.html b/javadoc/com/google/inject/Scoped.html
new file mode 100644
index 0000000000..cca83f759c
--- /dev/null
+++ b/javadoc/com/google/inject/Scoped.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Scoped (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject.Scoped class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Scoped (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Scoped.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Scoped.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.inject</FONT>
+<BR>
+Annotation Type Scoped</H2>
+<HR>
+<DL>
+<DT><PRE><FONT SIZE="-1">@Target(value=TYPE)
+@Retention(value=RUNTIME)
+</FONT>public @interface <B>Scoped</B></DL>
+</PRE>
+
+<P>
+Annotates a scoped implementation class.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>crazybob</DD>
+</DL>
+<HR>
+
+<P>
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+
+<A NAME="annotation_type_required_element_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Required Element Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/google/inject/Scoped.html#value()">value</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scope.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+
+<A NAME="annotation_type_element_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Element Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="value()"><!-- --></A><H3>
+value</H3>
+<PRE>
+public abstract <A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A> <B>value</B></PRE>
+<DL>
+<DD>Scope.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/Scoped.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="Scoped.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/package-frame.html b/javadoc/com/google/inject/package-frame.html
new file mode 100644
index 0000000000..4d6daf244c
--- /dev/null
+++ b/javadoc/com/google/inject/package-frame.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+com.google.inject (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject package">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../com/google/inject/package-summary.html" target="classFrame">com.google.inject</A></FONT>
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="Container.html" title="interface in com.google.inject" target="classFrame"><I>Container</I></A>
+<BR>
+<A HREF="ContainerBuilder.Command.html" title="interface in com.google.inject" target="classFrame"><I>ContainerBuilder.Command</I></A>
+<BR>
+<A HREF="Context.html" title="interface in com.google.inject" target="classFrame"><I>Context</I></A>
+<BR>
+<A HREF="Factory.html" title="interface in com.google.inject" target="classFrame"><I>Factory</I></A>
+<BR>
+<A HREF="Scope.Strategy.html" title="interface in com.google.inject" target="classFrame"><I>Scope.Strategy</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="ContainerBuilder.html" title="class in com.google.inject" target="classFrame">ContainerBuilder</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Enums</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="Scope.html" title="enum in com.google.inject" target="classFrame">Scope</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Exceptions</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="DependencyException.html" title="class in com.google.inject" target="classFrame">DependencyException</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Annotation Types</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="Inject.html" title="annotation in com.google.inject" target="classFrame">Inject</A>
+<BR>
+<A HREF="Scoped.html" title="annotation in com.google.inject" target="classFrame">Scoped</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/package-summary.html b/javadoc/com/google/inject/package-summary.html
new file mode 100644
index 0000000000..a8a039c396
--- /dev/null
+++ b/javadoc/com/google/inject/package-summary.html
@@ -0,0 +1,253 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+com.google.inject (Guice 1.0 API)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.google.inject package">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="com.google.inject (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV PACKAGE&nbsp;
+&nbsp;NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<H2>
+Package com.google.inject
+</H2>
+<i>Guice</i> (pronounced "juice").
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject">Container</A></B></TD>
+<TD>Injects dependencies into constructors, methods and fields annotated with
+ <A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><CODE>Inject</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject">ContainerBuilder.Command</A></B></TD>
+<TD>Implemented by classes which participate in building a container.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject">Context</A></B></TD>
+<TD>Context of the current injection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject">Factory&lt;T&gt;</A></B></TD>
+<TD>A custom factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A></B></TD>
+<TD>Pluggable scoping strategy.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A></B></TD>
+<TD>Builds a dependency injection <A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Enum Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A></B></TD>
+<TD>Scope of an injected objects.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Exception Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/DependencyException.html" title="class in com.google.inject">DependencyException</A></B></TD>
+<TD>Thrown when a dependency is misconfigured.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Annotation Types Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject">Inject</A></B></TD>
+<TD>Annotates members and parameters which should have their value[s]
+ injected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../com/google/inject/Scoped.html" title="annotation in com.google.inject">Scoped</A></B></TD>
+<TD>Annotates a scoped implementation class.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.google.inject Description
+</H2>
+
+<P>
+<i>Guice</i> (pronounced "juice"). A lightweight dependency injection
+ container. Features include:
+
+ <ul>
+   <li>constructor, method, and field injection</li>
+   <li>static method and field injection</li>
+   <li>circular reference support (including constructors if you depend upon
+    interfaces)</li>
+   <li>high performance</li>
+   <li>externalize what needs to be and no more</li>
+ </ul>
+<P>
+
+<P>
+<DL>
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV PACKAGE&nbsp;
+&nbsp;NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/inject/package-tree.html b/javadoc/com/google/inject/package-tree.html
new file mode 100644
index 0000000000..f7522177eb
--- /dev/null
+++ b/javadoc/com/google/inject/package-tree.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+com.google.inject Class Hierarchy (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="com.google.inject Class Hierarchy (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.google.inject
+</H2>
+</CENTER>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.Object<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><B>ContainerBuilder</B></A><LI TYPE="circle">java.lang.Throwable (implements java.io.Serializable)
+<UL>
+<LI TYPE="circle">java.lang.Exception<UL>
+<LI TYPE="circle">java.lang.RuntimeException<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/DependencyException.html" title="class in com.google.inject"><B>DependencyException</B></A></UL>
+</UL>
+</UL>
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/Container.html" title="interface in com.google.inject"><B>Container</B></A><LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><B>ContainerBuilder.Command</B></A><LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/Context.html" title="interface in com.google.inject"><B>Context</B></A><LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/Factory.html" title="interface in com.google.inject"><B>Factory</B></A>&lt;T&gt;<LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><B>Scope.Strategy</B></A></UL>
+<H2>
+Annotation Type Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/Scoped.html" title="annotation in com.google.inject"><B>Scoped</B></A> (implements java.lang.annotation.Annotation)
+<LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/Inject.html" title="annotation in com.google.inject"><B>Inject</B></A> (implements java.lang.annotation.Annotation)
+</UL>
+<H2>
+Enum Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.Object<UL>
+<LI TYPE="circle">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)
+<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="../../../com/google/inject/Scope.html" title="enum in com.google.inject"><B>Scope</B></A></UL>
+</UL>
+</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?com/google/inject/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/constant-values.html b/javadoc/constant-values.html
new file mode 100644
index 0000000000..3973d30a38
--- /dev/null
+++ b/javadoc/constant-values.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Constant Field Values (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Constant Field Values (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+Constant Field Values</H1>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+<B>Contents</B><UL>
+<LI><A HREF="#com.google">com.google.*</A>
+</UL>
+
+<A NAME="com.google"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left"><FONT SIZE="+2">
+com.google.*</FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="3">com.google.inject.<A HREF="com/google/inject/Container.html" title="interface in com.google.inject">Container</A></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.google.inject.Container.DEFAULT_NAME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/google/inject/Container.html#DEFAULT_NAME">DEFAULT_NAME</A></CODE></TD>
+<TD ALIGN="right"><CODE>"default"</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/deprecated-list.html b/javadoc/deprecated-list.html
new file mode 100644
index 0000000000..750d0577b7
--- /dev/null
+++ b/javadoc/deprecated-list.html
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Deprecated List (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Deprecated List (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Deprecated API</B></H2>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+<B>Contents</B><UL>
+</UL>
+
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/help-doc.html b/javadoc/help-doc.html
new file mode 100644
index 0000000000..ae6a859f4e
--- /dev/null
+++ b/javadoc/help-doc.html
@@ -0,0 +1,205 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+API Help (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="API Help (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+How This API Document Is Organized</H1>
+</CENTER>
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
+Package</H3>
+<BLOCKQUOTE>
+
+<P>
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
+<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
+</BLOCKQUOTE>
+<H3>
+Class/Interface</H3>
+<BLOCKQUOTE>
+
+<P>
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
+<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
+<P>
+<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
+<P>
+<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
+</BLOCKQUOTE>
+<H3>
+Annotation Type</H3>
+<BLOCKQUOTE>
+
+<P>
+Each annotation type has its own separate page with the following sections:<UL>
+<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
+</BLOCKQUOTE>
+</BLOCKQUOTE>
+<H3>
+Enum</H3>
+<BLOCKQUOTE>
+
+<P>
+Each enum has its own separate page with the following sections:<UL>
+<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
+</BLOCKQUOTE>
+<H3>
+Tree (Class Hierarchy)</H3>
+<BLOCKQUOTE>
+There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
+<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
+</BLOCKQUOTE>
+<H3>
+Deprecated API</H3>
+<BLOCKQUOTE>
+The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
+<H3>
+Index</H3>
+<BLOCKQUOTE>
+The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
+<H3>
+Prev/Next</H3>
+These links take you to the next or previous class, interface, package, or related page.<H3>
+Frames/No Frames</H3>
+These links show and hide the HTML frames.  All pages are available with or without frames.
+<P>
+<H3>
+Serialized Form</H3>
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+<P>
+<H3>
+Constant Field Values</H3>
+The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
+<P>
+<FONT SIZE="-1">
+<EM>
+This help file applies to API documentation generated using the standard doclet.</EM>
+</FONT>
+<BR>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/index-all.html b/javadoc/index-all.html
new file mode 100644
index 0000000000..3c205595ef
--- /dev/null
+++ b/javadoc/index-all.html
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Index (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Index (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_V_">V</A> <HR>
+<A NAME="_B_"><!-- --></A><H2>
+<B>B</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/ContainerBuilder.Command.html#build(com.google.inject.ContainerBuilder)"><B>build(ContainerBuilder)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject">ContainerBuilder.Command</A>
+<DD>Contributes factories to the given builder.
+</DL>
+<HR>
+<A NAME="_C_"><!-- --></A><H2>
+<B>C</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/package-summary.html"><B>com.google.inject</B></A> - package com.google.inject<DD><i>Guice</i> (pronounced "juice").<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, java.lang.String)"><B>constant(String, String)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, int)"><B>constant(String, int)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, long)"><B>constant(String, long)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, boolean)"><B>constant(String, boolean)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, double)"><B>constant(String, double)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, float)"><B>constant(String, float)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, short)"><B>constant(String, short)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, char)"><B>constant(String, char)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a constant value to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, java.lang.Class)"><B>constant(String, Class)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a class to the given name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#constant(java.lang.String, E)"><B>constant(String, E)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps an enum to the given name.
+<DT><A HREF="./com/google/inject/Container.html" title="interface in com.google.inject"><B>Container</B></A> - Interface in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Injects dependencies into constructors, methods and fields annotated with
+ <A HREF="./com/google/inject/Inject.html" title="annotation in com.google.inject"><CODE>Inject</CODE></A>.<DT><A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><B>ContainerBuilder</B></A> - Class in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Builds a dependency injection <A HREF="./com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>.<DT><A HREF="./com/google/inject/ContainerBuilder.html#ContainerBuilder()"><B>ContainerBuilder()</B></A> - 
+Constructor for class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Constructs a new builder.
+<DT><A HREF="./com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><B>ContainerBuilder.Command</B></A> - Interface in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Implemented by classes which participate in building a container.<DT><A HREF="./com/google/inject/ContainerBuilder.html#contains(java.lang.Class, java.lang.String)"><B>contains(Class&lt;?&gt;, String)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Returns true if this builder contains a mapping for the given type and
+ name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#contains(java.lang.Class)"><B>contains(Class&lt;?&gt;)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>contains(type,
+ Container.DEFAULT_NAME)</code>.
+<DT><A HREF="./com/google/inject/Context.html" title="interface in com.google.inject"><B>Context</B></A> - Interface in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Context of the current injection.<DT><A HREF="./com/google/inject/ContainerBuilder.html#create(boolean)"><B>create(boolean)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Creates a <A HREF="./com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A> instance.
+<DT><A HREF="./com/google/inject/Factory.html#create(com.google.inject.Context)"><B>create(Context)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Factory.html" title="interface in com.google.inject">Factory</A>
+<DD>Creates an object to be injected.
+</DL>
+<HR>
+<A NAME="_D_"><!-- --></A><H2>
+<B>D</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/Container.html#DEFAULT_NAME"><B>DEFAULT_NAME</B></A> - 
+Static variable in interface com.google.inject.<A HREF="./com/google/inject/Container.html" title="interface in com.google.inject">Container</A>
+<DD>Default dependency name.
+<DT><A HREF="./com/google/inject/DependencyException.html" title="class in com.google.inject"><B>DependencyException</B></A> - Exception in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Thrown when a dependency is misconfigured.<DT><A HREF="./com/google/inject/DependencyException.html#DependencyException(java.lang.String)"><B>DependencyException(String)</B></A> - 
+Constructor for exception com.google.inject.<A HREF="./com/google/inject/DependencyException.html" title="class in com.google.inject">DependencyException</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/inject/DependencyException.html#DependencyException(java.lang.String, java.lang.Throwable)"><B>DependencyException(String, Throwable)</B></A> - 
+Constructor for exception com.google.inject.<A HREF="./com/google/inject/DependencyException.html" title="class in com.google.inject">DependencyException</A>
+<DD>&nbsp;
+<DT><A HREF="./com/google/inject/DependencyException.html#DependencyException(java.lang.Throwable)"><B>DependencyException(Throwable)</B></A> - 
+Constructor for exception com.google.inject.<A HREF="./com/google/inject/DependencyException.html" title="class in com.google.inject">DependencyException</A>
+<DD>&nbsp;
+</DL>
+<HR>
+<A NAME="_F_"><!-- --></A><H2>
+<B>F</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Factory, com.google.inject.Scope)"><B>factory(Class&lt;T&gt;, String, Factory&lt;? extends T&gt;, Scope)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps a factory to a given dependency type and name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, com.google.inject.Factory, com.google.inject.Scope)"><B>factory(Class&lt;T&gt;, Factory&lt;? extends T&gt;, Scope)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, factory, scope)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Factory)"><B>factory(Class&lt;T&gt;, String, Factory&lt;? extends T&gt;)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type, name, factory,
+ Scope.DEFAULT)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, com.google.inject.Factory)"><B>factory(Class&lt;T&gt;, Factory&lt;? extends T&gt;)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, factory, Scope.DEFAULT)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class, com.google.inject.Scope)"><B>factory(Class&lt;T&gt;, String, Class&lt;? extends T&gt;, Scope)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps an implementation class to a given dependency type and name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, java.lang.Class)"><B>factory(Class&lt;T&gt;, String, Class&lt;? extends T&gt;)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Maps an implementation class to a given dependency type and name.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.Class)"><B>factory(Class&lt;T&gt;, Class&lt;? extends T&gt;)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, implementation)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class)"><B>factory(Class&lt;T&gt;)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, type)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String)"><B>factory(Class&lt;T&gt;, String)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type, name, type)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.Class, com.google.inject.Scope)"><B>factory(Class&lt;T&gt;, Class&lt;? extends T&gt;, Scope)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, implementation, scope)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, com.google.inject.Scope)"><B>factory(Class&lt;T&gt;, Scope)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type,
+ Container.DEFAULT_NAME, type, scope)</code>.
+<DT><A HREF="./com/google/inject/ContainerBuilder.html#factory(java.lang.Class, java.lang.String, com.google.inject.Scope)"><B>factory(Class&lt;T&gt;, String, Scope)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>factory(type, name, type,
+ scope)</code>.
+<DT><A HREF="./com/google/inject/Factory.html" title="interface in com.google.inject"><B>Factory</B></A>&lt;<A HREF="./com/google/inject/Factory.html" title="type parameter in Factory">T</A>&gt; - Interface in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>A custom factory.<DT><A HREF="./com/google/inject/Scope.Strategy.html#findInRequest(java.lang.Class, java.lang.String, java.util.concurrent.Callable)"><B>findInRequest(Class&lt;T&gt;, String, Callable&lt;? extends T&gt;)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A>
+<DD>Finds an object for the given type and name in the request scope.
+<DT><A HREF="./com/google/inject/Scope.Strategy.html#findInSession(java.lang.Class, java.lang.String, java.util.concurrent.Callable)"><B>findInSession(Class&lt;T&gt;, String, Callable&lt;? extends T&gt;)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A>
+<DD>Finds an object for the given type and name in the session scope.
+<DT><A HREF="./com/google/inject/Scope.Strategy.html#findInWizard(java.lang.Class, java.lang.String, java.util.concurrent.Callable)"><B>findInWizard(Class&lt;T&gt;, String, Callable&lt;? extends T&gt;)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Scope.Strategy.html" title="interface in com.google.inject">Scope.Strategy</A>
+<DD>Finds an object for the given type and name in the wizard scope.
+</DL>
+<HR>
+<A NAME="_G_"><!-- --></A><H2>
+<B>G</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/Context.html#getContainer()"><B>getContainer()</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Context.html" title="interface in com.google.inject">Context</A>
+<DD>Gets the <A HREF="./com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A>.
+<DT><A HREF="./com/google/inject/Container.html#getInstance(java.lang.Class, java.lang.String)"><B>getInstance(Class&lt;T&gt;, String)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Container.html" title="interface in com.google.inject">Container</A>
+<DD>Gets an instance of the given dependency which was declared in
+ <A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><CODE>ContainerBuilder</CODE></A>.
+<DT><A HREF="./com/google/inject/Container.html#getInstance(java.lang.Class)"><B>getInstance(Class&lt;T&gt;)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Container.html" title="interface in com.google.inject">Container</A>
+<DD>Convenience method.&nbsp;Equivalent to <code>getInstance(type,
+ DEFAULT_NAME)</code>.
+<DT><A HREF="./com/google/inject/Context.html#getMember()"><B>getMember()</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Context.html" title="interface in com.google.inject">Context</A>
+<DD>Gets the field, method or constructor which is being injected.
+<DT><A HREF="./com/google/inject/Context.html#getName()"><B>getName()</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Context.html" title="interface in com.google.inject">Context</A>
+<DD>Gets the name of the injection specified by <A HREF="./com/google/inject/Inject.html#value()"><CODE>Inject.value()</CODE></A>.
+<DT><A HREF="./com/google/inject/Context.html#getScopeStrategy()"><B>getScopeStrategy()</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Context.html" title="interface in com.google.inject">Context</A>
+<DD>Gets the current scope strategy.
+<DT><A HREF="./com/google/inject/Context.html#getType()"><B>getType()</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Context.html" title="interface in com.google.inject">Context</A>
+<DD>Gets the type of the field or parameter which is being injected.
+</DL>
+<HR>
+<A NAME="_I_"><!-- --></A><H2>
+<B>I</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/Container.html#inject(java.lang.Object)"><B>inject(Object)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Container.html" title="interface in com.google.inject">Container</A>
+<DD>Injects dependencies into the fields and methods of an existing object.
+<DT><A HREF="./com/google/inject/Container.html#inject(java.lang.Class)"><B>inject(Class&lt;T&gt;)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Container.html" title="interface in com.google.inject">Container</A>
+<DD>Creates and injects a new instance of type <code>implementation</code>.
+<DT><A HREF="./com/google/inject/Inject.html" title="annotation in com.google.inject"><B>Inject</B></A> - Annotation Type in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Annotates members and parameters which should have their value[s]
+ injected.<DT><A HREF="./com/google/inject/ContainerBuilder.html#injectStatics(java.lang.Class...)"><B>injectStatics(Class&lt;?&gt;...)</B></A> - 
+Method in class com.google.inject.<A HREF="./com/google/inject/ContainerBuilder.html" title="class in com.google.inject">ContainerBuilder</A>
+<DD>Upon creation, the <A HREF="./com/google/inject/Container.html" title="interface in com.google.inject"><CODE>Container</CODE></A> will inject static fields and methods
+ into the given classes.
+</DL>
+<HR>
+<A NAME="_R_"><!-- --></A><H2>
+<B>R</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/Container.html#removeScopeStrategy()"><B>removeScopeStrategy()</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Container.html" title="interface in com.google.inject">Container</A>
+<DD>Removes the scope strategy for the current thread.
+</DL>
+<HR>
+<A NAME="_S_"><!-- --></A><H2>
+<B>S</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/Scope.html" title="enum in com.google.inject"><B>Scope</B></A> - Enum in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Scope of an injected objects.<DT><A HREF="./com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><B>Scope.Strategy</B></A> - Interface in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Pluggable scoping strategy.<DT><A HREF="./com/google/inject/Scoped.html" title="annotation in com.google.inject"><B>Scoped</B></A> - Annotation Type in <A HREF="./com/google/inject/package-summary.html">com.google.inject</A><DD>Annotates a scoped implementation class.<DT><A HREF="./com/google/inject/Container.html#setScopeStrategy(com.google.inject.Scope.Strategy)"><B>setScopeStrategy(Scope.Strategy)</B></A> - 
+Method in interface com.google.inject.<A HREF="./com/google/inject/Container.html" title="interface in com.google.inject">Container</A>
+<DD>Sets the scope strategy for the current thread.
+</DL>
+<HR>
+<A NAME="_V_"><!-- --></A><H2>
+<B>V</B></H2>
+<DL>
+<DT><A HREF="./com/google/inject/Scope.html#valueOf(java.lang.String)"><B>valueOf(String)</B></A> - 
+Static method in enum com.google.inject.<A HREF="./com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>
+<DD>Returns the enum constant of this type with the specified name.
+<DT><A HREF="./com/google/inject/Scope.html#values()"><B>values()</B></A> - 
+Static method in enum com.google.inject.<A HREF="./com/google/inject/Scope.html" title="enum in com.google.inject">Scope</A>
+<DD>Returns an array containing the constants of this enum type, in
+the order they're declared.
+</DL>
+<HR>
+<A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_V_">V</A> 
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/index.html b/javadoc/index.html
new file mode 100644
index 0000000000..1bbffb8d9b
--- /dev/null
+++ b/javadoc/index.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Thu Aug 24 18:43:56 PDT 2006-->
+<TITLE>
+Guice 1.0 API
+</TITLE>
+<SCRIPT type="text/javascript">
+    targetPage = "" + window.location.search;
+    if (targetPage != "" && targetPage != "undefined")
+       targetPage = targetPage.substring(1);
+    function loadFrames() {
+        if (targetPage != "" && targetPage != "undefined")
+             top.classFrame.location = top.targetPage;
+    }
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+</HEAD>
+<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
+<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+<FRAME src="com/google/inject/package-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
+<NOFRAMES>
+<H2>
+Frame Alert</H2>
+
+<P>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<BR>
+Link to<A HREF="com/google/inject/package-summary.html">Non-frame version.</A>
+</NOFRAMES>
+</FRAMESET>
+</HTML>
diff --git a/javadoc/overview-tree.html b/javadoc/overview-tree.html
new file mode 100644
index 0000000000..4129c4e83c
--- /dev/null
+++ b/javadoc/overview-tree.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Class Hierarchy (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Class Hierarchy (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For All Packages</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="com/google/inject/package-tree.html">com.google.inject</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.Object<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/ContainerBuilder.html" title="class in com.google.inject"><B>ContainerBuilder</B></A><LI TYPE="circle">java.lang.Throwable (implements java.io.Serializable)
+<UL>
+<LI TYPE="circle">java.lang.Exception<UL>
+<LI TYPE="circle">java.lang.RuntimeException<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/DependencyException.html" title="class in com.google.inject"><B>DependencyException</B></A></UL>
+</UL>
+</UL>
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/Container.html" title="interface in com.google.inject"><B>Container</B></A><LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/ContainerBuilder.Command.html" title="interface in com.google.inject"><B>ContainerBuilder.Command</B></A><LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/Context.html" title="interface in com.google.inject"><B>Context</B></A><LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/Factory.html" title="interface in com.google.inject"><B>Factory</B></A>&lt;T&gt;<LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/Scope.Strategy.html" title="interface in com.google.inject"><B>Scope.Strategy</B></A></UL>
+<H2>
+Annotation Type Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/Scoped.html" title="annotation in com.google.inject"><B>Scoped</B></A> (implements java.lang.annotation.Annotation)
+<LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/Inject.html" title="annotation in com.google.inject"><B>Inject</B></A> (implements java.lang.annotation.Annotation)
+</UL>
+<H2>
+Enum Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">java.lang.Object<UL>
+<LI TYPE="circle">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)
+<UL>
+<LI TYPE="circle">com.google.inject.<A HREF="com/google/inject/Scope.html" title="enum in com.google.inject"><B>Scope</B></A></UL>
+</UL>
+</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/package-list b/javadoc/package-list
new file mode 100644
index 0000000000..00497eac58
--- /dev/null
+++ b/javadoc/package-list
@@ -0,0 +1 @@
+com.google.inject
diff --git a/javadoc/resources/inherit.gif b/javadoc/resources/inherit.gif
new file mode 100644
index 0000000000..c814867a13
Binary files /dev/null and b/javadoc/resources/inherit.gif differ
diff --git a/javadoc/serialized-form.html b/javadoc/serialized-form.html
new file mode 100644
index 0000000000..3b49bb18a3
--- /dev/null
+++ b/javadoc/serialized-form.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_05) on Thu Aug 24 18:43:56 PDT 2006 -->
+<TITLE>
+Serialized Form (Guice 1.0 API)
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Serialized Form (Guice 1.0 API)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+Serialized Form</H1>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="center"><FONT SIZE="+2">
+<B>Package</B> <B>com.google.inject</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="com.google.inject.DependencyException"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class <A HREF="com/google/inject/DependencyException.html" title="class in com.google.inject">com.google.inject.DependencyException</A> extends java.lang.RuntimeException implements Serializable</B></FONT></TH>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="com/google/inject/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/stylesheet.css b/javadoc/stylesheet.css
new file mode 100644
index 0000000000..6d31fdbc7f
--- /dev/null
+++ b/javadoc/stylesheet.css
@@ -0,0 +1,29 @@
+/* Javadoc style sheet */
+
+/* Define colors, fonts and other style attributes here to override the defaults */
+
+/* Page background color */
+body { background-color: #FFFFFF }
+
+/* Headings */
+h1 { font-size: 145% }
+
+/* Table colors */
+.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
+.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
+.TableRowColor         { background: #FFFFFF } /* White */
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont   { font-size: 100%; font-family: Helvetica, Arial, sans-serif }
+.FrameHeadingFont { font-size:  90%; font-family: Helvetica, Arial, sans-serif }
+.FrameItemFont    { font-size:  90%; font-family: Helvetica, Arial, sans-serif }
+
+/* Navigation bar fonts and colors */
+.NavBarCell1    { background-color:#EEEEFF;} /* Light mauve */
+.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */
+.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
+
+.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+
diff --git a/lib/build/commons-logging-1.0.4.jar b/lib/build/commons-logging-1.0.4.jar
new file mode 100644
index 0000000000..b73a80fab6
Binary files /dev/null and b/lib/build/commons-logging-1.0.4.jar differ
diff --git a/lib/build/junit.jar b/lib/build/junit.jar
new file mode 100644
index 0000000000..674d71e89e
Binary files /dev/null and b/lib/build/junit.jar differ
diff --git a/lib/build/spring-beans.jar b/lib/build/spring-beans.jar
new file mode 100644
index 0000000000..901dca322a
Binary files /dev/null and b/lib/build/spring-beans.jar differ
diff --git a/lib/build/spring-core.jar b/lib/build/spring-core.jar
new file mode 100644
index 0000000000..fe89c5fbbd
Binary files /dev/null and b/lib/build/spring-core.jar differ
diff --git a/src/com/google/inject/ConstructionContext.java b/src/com/google/inject/ConstructionContext.java
new file mode 100644
index 0000000000..2da79e1d55
--- /dev/null
+++ b/src/com/google/inject/ConstructionContext.java
@@ -0,0 +1,124 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Proxy;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Context of a dependency construction. Used to manage circular references.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+class ConstructionContext<T> {
+
+  T currentReference;
+  boolean constructing;
+
+  List<DelegatingInvocationHandler<T>> invocationHandlers;
+
+  T getCurrentReference() {
+    return currentReference;
+  }
+
+  void removeCurrentReference() {
+    this.currentReference = null;
+  }
+
+  void setCurrentReference(T currentReference) {
+    this.currentReference = currentReference;
+  }
+
+  boolean isConstructing() {
+    return constructing;
+  }
+
+  void startConstruction() {
+    this.constructing = true;
+  }
+
+  void finishConstruction() {
+    this.constructing = false;
+    invocationHandlers = null;
+  }
+
+  Object createProxy(Class<? super T> expectedType) {
+    // TODO: if I create a proxy which implements all the interfaces of
+    // the implementation type, I'll be able to get away with one proxy
+    // instance (as opposed to one per caller).
+
+    if (!expectedType.isInterface()) {
+      throw new DependencyException(
+          expectedType.getName() + " is not an interface.");
+    }
+
+    if (invocationHandlers == null) {
+      invocationHandlers = new ArrayList<DelegatingInvocationHandler<T>>();
+    }
+
+    DelegatingInvocationHandler<T> invocationHandler =
+        new DelegatingInvocationHandler<T>();
+    invocationHandlers.add(invocationHandler);
+
+    return Proxy.newProxyInstance(
+      expectedType.getClassLoader(),
+      new Class[] { expectedType },
+      invocationHandler
+    );
+  }
+
+  void setProxyDelegates(T delegate) {
+    if (invocationHandlers != null) {
+      for (DelegatingInvocationHandler<T> invocationHandler
+          : invocationHandlers) {
+        invocationHandler.setDelegate(delegate);
+      }
+    }
+  }
+
+  static class DelegatingInvocationHandler<T> implements InvocationHandler {
+
+    T delegate;
+
+    public Object invoke(Object proxy, Method method, Object[] args)
+        throws Throwable {
+      if (delegate == null) {
+        throw new IllegalStateException(
+            "Not finished constructing. Please don't call methods on this"
+                + " object until the caller's construction is complete.");
+      }
+
+      try {
+        return method.invoke(delegate, args);
+      } catch (IllegalAccessException e) {
+        throw new RuntimeException(e);
+      } catch (IllegalArgumentException e) {
+        throw new RuntimeException(e);
+      } catch (InvocationTargetException e) {
+        throw e.getTargetException();
+      }
+    }
+
+    void setDelegate(T delegate) {
+      this.delegate = delegate;
+    }
+  }
+}
diff --git a/src/com/google/inject/Container.java b/src/com/google/inject/Container.java
new file mode 100644
index 0000000000..8b87ef9e99
--- /dev/null
+++ b/src/com/google/inject/Container.java
@@ -0,0 +1,103 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+/**
+ * Injects dependencies into constructors, methods and fields annotated with
+ * {@link Inject}. Immutable.
+ *
+ * <p>When injecting a method or constructor, you can additionally annotate
+ * its parameters with {@link Inject} and specify a dependency name. When a
+ * parameter has no annotation, the container uses the name from the method or
+ * constructor's {@link Inject} annotation respectively.
+ *
+ * <p>For example:
+ *
+ * <pre>
+ *  class Foo {
+ *
+ *    // Inject the int constant named "i".
+ *    &#64;Inject("i") int i;
+ *
+ *    // Inject the default implementation of Bar and the String constant
+ *    // named "s".
+ *    &#64;Inject Foo(Bar bar, @Inject("s") String s) {
+ *      ...
+ *    }
+ *
+ *    // Inject the default implementation of Baz and the Bob implementation
+ *    // named "foo".
+ *    &#64;Inject void initialize(Baz baz, @Inject("foo") Bob bob) {
+ *      ...
+ *    }
+ *
+ *    // Inject the default implementation of Tee.
+ *    &#64;Inject void setTee(Tee tee) {
+ *      ...
+ *    }
+ *  }
+ * </pre>
+ *
+ * <p>To create and inject an instance of {@code Foo}:
+ *
+ * <pre>
+ *  Container c = ...;
+ *  Foo foo = c.inject(Foo.class);
+ * </pre>
+ *
+ * @see ContainerBuilder
+ * @author crazybob@google.com (Bob Lee)
+ */
+public interface Container {
+
+  /**
+   * Default dependency name.
+   */
+  String DEFAULT_NAME = "default";
+
+  /**
+   * Injects dependencies into the fields and methods of an existing object.
+   */
+  void inject(Object o);
+
+  /**
+   * Creates and injects a new instance of type {@code implementation}.
+   */
+  <T> T inject(Class<T> implementation);
+
+  /**
+   * Gets an instance of the given dependency which was declared in
+   * {@link com.google.inject.ContainerBuilder}.
+   */
+  <T> T getInstance(Class<T> type, String name);
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code getInstance(type,
+   * DEFAULT_NAME)}.
+   */
+  <T> T getInstance(Class<T> type);
+
+  /**
+   * Sets the scope strategy for the current thread.
+   */
+  void setScopeStrategy(Scope.Strategy scopeStrategy);
+
+  /**
+   * Removes the scope strategy for the current thread.
+   */
+  void removeScopeStrategy();
+}
diff --git a/src/com/google/inject/ContainerBuilder.java b/src/com/google/inject/ContainerBuilder.java
new file mode 100644
index 0000000000..c47e88bd04
--- /dev/null
+++ b/src/com/google/inject/ContainerBuilder.java
@@ -0,0 +1,483 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import java.lang.reflect.Member;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+/**
+ * Builds a dependency injection {@link Container}. The combination of
+ * dependency type and name uniquely identifies a dependency mapping; you can
+ * use the same name for two different types. Not safe for concurrent use.
+ *
+ * <p>Adds the following factories by default:
+ *
+ * <ul>
+ *   <li>Injects the current {@link Container}.
+ *   <li>Injects the {@link Logger} for the injected member's declaring class.
+ * </ul>
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public final class ContainerBuilder {
+
+  final Map<Key<?>, InternalFactory<?>> factories =
+      new HashMap<Key<?>, InternalFactory<?>>();
+  final List<InternalFactory<?>> singletonFactories =
+      new ArrayList<InternalFactory<?>>();
+  final List<Class<?>> staticInjections = new ArrayList<Class<?>>();
+  boolean created;
+
+  private static final InternalFactory<Container> CONTAINER_FACTORY =
+      new InternalFactory<Container>() {
+        public Container create(InternalContext context) {
+          return context.getContainer();
+        }
+      };
+
+  private static final InternalFactory<Logger> LOGGER_FACTORY =
+      new InternalFactory<Logger>() {
+        public Logger create(InternalContext context) {
+          Member member = context.getExternalContext().getMember();
+          return member == null ? Logger.getAnonymousLogger()
+              : Logger.getLogger(member.getDeclaringClass().getName());
+        }
+      };
+
+  /**
+   * Constructs a new builder.
+   */
+  public ContainerBuilder() {
+    // In the current container as the default Container implementation.
+    factories.put(Key.newInstance(Container.class, Container.DEFAULT_NAME),
+        CONTAINER_FACTORY);
+
+    // Inject the logger for the injected member's declaring class.
+    factories.put(Key.newInstance(Logger.class, Container.DEFAULT_NAME),
+        LOGGER_FACTORY);
+  }
+
+  /**
+   * Maps a dependency. All methods in this class ultimately funnel through
+   * here.
+   */
+  private <T> ContainerBuilder factory(final Key<T> key,
+      InternalFactory<? extends T> factory, Scope scope) {
+    ensureNotCreated();
+    checkKey(key);
+    final InternalFactory<? extends T> scopedFactory =
+        scope.scopeFactory(key.getType(), key.getName(), factory);
+    factories.put(key, scopedFactory);
+    if (scope == Scope.SINGLETON) {
+      singletonFactories.add(new InternalFactory<T>() {
+        public T create(InternalContext context) {
+          try {
+            context.setExternalContext(ExternalContext.newInstance(
+                null, key, context.getContainerImpl()));
+            return scopedFactory.create(context);
+          } finally {
+            context.setExternalContext(null);
+          }
+        }
+      });
+    }
+    return this;
+  }
+
+  /**
+   * Ensures a key isn't already mapped.
+   */
+  private void checkKey(Key<?> key) {
+    if (factories.containsKey(key)) {
+      throw new DependencyException(
+          "Dependency mapping for " + key + " already exists.");
+    }
+  }
+
+  /**
+   * Maps a factory to a given dependency type and name.
+   *
+   * @param type of dependency
+   * @param name of dependency
+   * @param factory creates objects to inject
+   * @param scope scope of injected instances
+   * @return this builder
+   */
+  public <T> ContainerBuilder factory(final Class<T> type, final String name,
+      final Factory<? extends T> factory, Scope scope) {
+    InternalFactory<T> internalFactory =
+        new InternalFactory<T>() {
+
+      public T create(InternalContext context) {
+        try {
+          Context externalContext = context.getExternalContext();
+          return factory.create(externalContext);
+        } catch (Exception e) {
+          throw new RuntimeException(e);
+        }
+      }
+
+      public String toString() {
+        return new LinkedHashMap<String, Object>() {{
+          put("type", type);
+          put("name", name);
+          put("factory", factory);
+        }}.toString();
+      }
+    };
+
+    return factory(Key.newInstance(type, name), internalFactory, scope);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type,
+   * Container.DEFAULT_NAME, factory, scope)}.
+   *
+   * @see #factory(Class, String, Factory, Scope)
+   */
+  public <T> ContainerBuilder factory(Class<T> type,
+      Factory<? extends T> factory, Scope scope) {
+    return factory(type, Container.DEFAULT_NAME, factory, scope);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type, name, factory,
+   * Scope.DEFAULT)}.
+   *
+   * @see #factory(Class, String, Factory, Scope)
+   */
+  public <T> ContainerBuilder factory(Class<T> type, String name,
+      Factory<? extends T> factory) {
+    return factory(type, name, factory, Scope.DEFAULT);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type,
+   * Container.DEFAULT_NAME, factory, Scope.DEFAULT)}.
+   *
+   * @see #factory(Class, String, Factory, Scope)
+   */
+  public <T> ContainerBuilder factory(Class<T> type,
+      Factory<? extends T> factory) {
+    return factory(type, Container.DEFAULT_NAME, factory, Scope.DEFAULT);
+  }
+
+  /**
+   * Maps an implementation class to a given dependency type and name. Creates
+   * instances using the container, recursively injecting dependencies.
+   *
+   * @param type of dependency
+   * @param name of dependency
+   * @param implementation class
+   * @param scope scope of injected instances
+   * @return this builder
+   */
+  public <T> ContainerBuilder factory(final Class<T> type, final String name,
+      final Class<? extends T> implementation, final Scope scope) {
+    // This factory creates new instances of the given implementation.
+    // We have to lazy load the constructor because the Container
+    // hasn't been created yet.
+    InternalFactory<? extends T> factory = new InternalFactory<T>() {
+
+      volatile ContainerImpl.ConstructorInjector<? extends T> constructor;
+
+      @SuppressWarnings("unchecked")
+      public T create(InternalContext context) {
+        if (constructor == null) {
+          this.constructor =
+              context.getContainerImpl().getConstructor(implementation);
+        }
+        return (T) constructor.construct(context, type);
+      }
+
+      public String toString() {
+        return new LinkedHashMap<String, Object>() {{
+          put("type", type);
+          put("name", name);
+          put("implementation", implementation);
+          put("scope", scope);
+        }}.toString();
+      }
+    };
+
+    return factory(Key.newInstance(type, name), factory, scope);
+  }
+
+  /**
+   * Maps an implementation class to a given dependency type and name. Creates
+   * instances using the container, recursively injecting dependencies.
+   *
+   * <p>Sets scope to value from {@link Scoped} annotation on the
+   * implementation class. Defaults to {@link Scope#DEFAULT} if no annotation
+   * is found.
+   *
+   * @param type of dependency
+   * @param name of dependency
+   * @param implementation class
+   * @return this builder
+   */
+  public <T> ContainerBuilder factory(final Class<T> type, String name,
+      final Class<? extends T> implementation) {
+    Scoped scoped = implementation.getAnnotation(Scoped.class);
+    Scope scope = scoped == null ? Scope.DEFAULT : scoped.value();
+    return factory(type, name, implementation, scope);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type,
+   * Container.DEFAULT_NAME, implementation)}.
+   *
+   * @see #factory(Class, String, Class)
+   */
+  public <T> ContainerBuilder factory(Class<T> type,
+      Class<? extends T> implementation) {
+    return factory(type, Container.DEFAULT_NAME, implementation);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type,
+   * Container.DEFAULT_NAME, type)}.
+   *
+   * @see #factory(Class, String, Class)
+   */
+  public <T> ContainerBuilder factory(Class<T> type) {
+    return factory(type, Container.DEFAULT_NAME, type);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type, name, type)}.
+   *
+   * @see #factory(Class, String, Class)
+   */
+  public <T> ContainerBuilder factory(Class<T> type, String name) {
+    return factory(type, name, type);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type,
+   * Container.DEFAULT_NAME, implementation, scope)}.
+   *
+   * @see #factory(Class, String, Class, Scope)
+   */
+  public <T> ContainerBuilder factory(Class<T> type,
+      Class<? extends T> implementation, Scope scope) {
+    return factory(type, Container.DEFAULT_NAME, implementation, scope);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type,
+   * Container.DEFAULT_NAME, type, scope)}.
+   *
+   * @see #factory(Class, String, Class, Scope)
+   */
+  public <T> ContainerBuilder factory(Class<T> type, Scope scope) {
+    return factory(type, Container.DEFAULT_NAME, type, scope);
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code factory(type, name, type,
+   * scope)}.
+   *
+   * @see #factory(Class, String, Class, Scope)
+   */
+  public <T> ContainerBuilder factory(Class<T> type, String name, Scope scope) {
+    return factory(type, name, type, scope);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, String value) {
+    return constant(String.class, name, value);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, int value) {
+    return constant(int.class, name, value);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, long value) {
+    return constant(long.class, name, value);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, boolean value) {
+    return constant(boolean.class, name, value);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, double value) {
+    return constant(double.class, name, value);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, float value) {
+    return constant(float.class, name, value);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, short value) {
+    return constant(short.class, name, value);
+  }
+
+  /**
+   * Maps a constant value to the given name.
+   */
+  public ContainerBuilder constant(String name, char value) {
+    return constant(char.class, name, value);
+  }
+
+  /**
+   * Maps a class to the given name.
+   */
+  public ContainerBuilder constant(String name, Class value) {
+    return constant(Class.class, name, value);
+  }
+
+  /**
+   * Maps an enum to the given name.
+   */
+  public <E extends Enum<E>> ContainerBuilder constant(String name, E value) {
+    return constant(value.getDeclaringClass(), name, value);
+  }
+
+  /**
+   * Maps a constant value to the given type and name.
+   */
+  private <T> ContainerBuilder constant(final Class<T> type, final String name,
+      final T value) {
+    InternalFactory<T> factory = new InternalFactory<T>() {
+      public T create(InternalContext ignored) {
+        return value;
+      }
+
+      public String toString() {
+        return new LinkedHashMap<String, Object>() {
+          {
+            put("type", type);
+            put("name", name);
+            put("value", value);
+          }
+        }.toString();
+      }
+    };
+
+    return factory(Key.newInstance(type, name), factory, Scope.DEFAULT);
+  }
+
+  /**
+   * Upon creation, the {@link Container} will inject static fields and methods
+   * into the given classes.
+   *
+   * @param types for which static members will be injected
+   */
+  public ContainerBuilder injectStatics(Class<?>... types) {
+    staticInjections.addAll(Arrays.asList(types));
+    return this;
+  }
+
+  /**
+   * Returns true if this builder contains a mapping for the given type and
+   * name.
+   */
+  public boolean contains(Class<?> type, String name) {
+    return factories.containsKey(Key.newInstance(type, name));
+  }
+
+  /**
+   * Convenience method.&nbsp;Equivalent to {@code contains(type,
+   * Container.DEFAULT_NAME)}.
+   */
+  public boolean contains(Class<?> type) {
+    return contains(type, Container.DEFAULT_NAME);
+  }
+
+  /**
+   * Creates a {@link Container} instance. Injects static members for classes
+   * which were registered using {@link #injectStatics(Class...)}.
+   *
+   * @param loadSingletons If true, the container will load all singletons
+   *  now. If false, the container will lazily load singletons. Eager loading
+   *  is appropriate for production use while lazy loading can speed
+   *  development.
+   * @throws IllegalStateException if called more than once
+   */
+  public Container create(boolean loadSingletons) {
+    ensureNotCreated();
+    created = true;
+    final ContainerImpl container = new ContainerImpl(
+        new HashMap<Key<?>, InternalFactory<?>>(factories));
+    if (loadSingletons) {
+      container.callInContext(new ContainerImpl.ContextualCallable<Void>() {
+        public Void call(InternalContext context) {
+          for (InternalFactory<?> factory : singletonFactories) {
+            factory.create(context);
+          }
+          return null;
+        }
+      });
+    }
+    container.injectStatics(staticInjections);
+    return container;
+  }
+
+  /**
+   * Currently we only support creating one Container instance per builder.
+   * If we want to support creating more than one container per builder,
+   * we should move to a "factory factory" model where we create a factory
+   * instance per Container. Right now, one factory instance would be
+   * shared across all the containers, singletons synchronize on the
+   * container when lazy loading, etc.
+   */
+  private void ensureNotCreated() {
+    if (created) {
+      throw new IllegalStateException("Container already created.");
+    }
+  }
+
+  /**
+   * Implemented by classes which participate in building a container.
+   */
+  public interface Command {
+
+    /**
+     * Contributes factories to the given builder.
+     *
+     * @param builder
+     */
+    void build(ContainerBuilder builder);
+  }
+}
diff --git a/src/com/google/inject/ContainerImpl.java b/src/com/google/inject/ContainerImpl.java
new file mode 100644
index 0000000000..acadc68483
--- /dev/null
+++ b/src/com/google/inject/ContainerImpl.java
@@ -0,0 +1,556 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import com.google.inject.util.ReferenceCache;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Default {@link Container} implementation.
+ *
+ * @see ContainerBuilder
+ * @author crazybob@google.com (Bob Lee)
+ */
+class ContainerImpl implements Container {
+
+  final Map<Key<?>, InternalFactory<?>> factories;
+
+  ContainerImpl(Map<Key<?>, InternalFactory<?>> factories) {
+    this.factories = factories;
+  }
+
+  @SuppressWarnings("unchecked")
+  <T> InternalFactory<? extends T> getFactory(Key<T> key) {
+    return (InternalFactory<T>) factories.get(key);
+  }
+
+  /**
+   * Field and method injectors.
+   */
+  final Map<Class<?>, List<Injector>> injectors =
+      new ReferenceCache<Class<?>, List<Injector>>() {
+        protected List<Injector> create(Class<?> key) {
+          List<Injector> injectors = new ArrayList<Injector>();
+          addInjectors(key, injectors);
+          return injectors;
+        }
+      };
+
+  /**
+   * Recursively adds injectors for fields and methods from the given class to
+   * the given list. Injects parent classes before sub classes.
+   */
+  void addInjectors(Class clazz, List<Injector> injectors) {
+    if (clazz == Object.class) {
+      return;
+    }
+
+    // Add injectors for superclass first.
+    addInjectors(clazz.getSuperclass(), injectors);
+
+    // TODO (crazybob): Filter out overridden members.
+    addInjectorsForFields(clazz.getDeclaredFields(), false, injectors);
+    addInjectorsForMethods(clazz.getDeclaredMethods(), false, injectors);
+  }
+
+  void injectStatics(List<Class<?>> staticInjections) {
+    final List<Injector> injectors = new ArrayList<Injector>();
+
+    for (Class<?> clazz : staticInjections) {
+      addInjectorsForFields(clazz.getDeclaredFields(), true, injectors);
+      addInjectorsForMethods(clazz.getDeclaredMethods(), true, injectors);
+    }
+
+    callInContext(new ContextualCallable<Void>() {
+      public Void call(InternalContext context) {
+        for (Injector injector : injectors) {
+          injector.inject(context, null);
+        }
+        return null;
+      }
+    });
+  }
+
+  void addInjectorsForMethods(Method[] methods, boolean statics,
+      List<Injector> injectors) {
+    addInjectorsForMembers(Arrays.asList(methods), statics, injectors,
+        new InjectorFactory<Method>() {
+          public Injector create(ContainerImpl container, Method method,
+              String name) throws MissingDependencyException {
+            return new MethodInjector(container, method, name);
+          }
+        });
+  }
+
+  void addInjectorsForFields(Field[] fields, boolean statics,
+      List<Injector> injectors) {
+    addInjectorsForMembers(Arrays.asList(fields), statics, injectors,
+        new InjectorFactory<Field>() {
+          public Injector create(ContainerImpl container, Field field,
+              String name) throws MissingDependencyException {
+            return new FieldInjector(container, field, name);
+          }
+        });
+  }
+
+  <M extends Member & AnnotatedElement> void addInjectorsForMembers(
+      List<M> members, boolean statics, List<Injector> injectors,
+      InjectorFactory<M> injectorFactory) {
+    for (M member : members) {
+      if (isStatic(member) == statics) {
+        Inject inject = member.getAnnotation(Inject.class);
+        if (inject != null) {
+          try {
+            injectors.add(injectorFactory.create(this, member, inject.value()));
+          } catch (MissingDependencyException e) {
+            if (inject.required()) {
+              throw new DependencyException(e);
+            }
+          }
+        }
+      }
+    }
+  }
+
+  interface InjectorFactory<M extends Member & AnnotatedElement> {
+    Injector create(ContainerImpl container, M member, String name)
+        throws MissingDependencyException;
+  }
+
+  private boolean isStatic(Member member) {
+    return Modifier.isStatic(member.getModifiers());
+  }
+
+  static class FieldInjector implements Injector {
+
+    final Field field;
+    final InternalFactory<?> factory;
+    final ExternalContext<?> externalContext;
+
+    public FieldInjector(ContainerImpl container, Field field, String name)
+        throws MissingDependencyException {
+      this.field = field;
+      field.setAccessible(true);
+
+      Key<?> key = Key.newInstance(field.getType(), name);
+      factory = container.getFactory(key);
+      if (factory == null) {
+        throw new MissingDependencyException(
+            "No mapping found for dependency " + key + " in " + field + ".");
+      }
+
+      this.externalContext = ExternalContext.newInstance(field, key, container);
+    }
+
+    public void inject(InternalContext context, Object o) {
+      ExternalContext<?> previous = context.getExternalContext();
+      context.setExternalContext(externalContext);
+      try {
+        field.set(o, factory.create(context));
+      } catch (IllegalAccessException e) {
+        throw new AssertionError(e);
+      } finally {
+        context.setExternalContext(previous);
+      }
+    }
+  }
+
+  /**
+   * Gets parameter injectors.
+   *
+   * @param member to which the parameters belong
+   * @param annotations on the parameters
+   * @param parameterTypes parameter types
+   * @return injections
+   */
+  <M extends AccessibleObject & Member> ParameterInjector<?>[]
+      getParametersInjectors(M member,
+      Annotation[][] annotations, Class[] parameterTypes, String defaultName)
+      throws MissingDependencyException {
+    List<ParameterInjector<?>> parameterInjectors =
+        new ArrayList<ParameterInjector<?>>();
+
+    Iterator<Annotation[]> annotationsIterator =
+        Arrays.asList(annotations).iterator();
+    for (Class<?> parameterType : parameterTypes) {
+      Inject annotation = findInject(annotationsIterator.next());
+      String name = annotation == null ? defaultName : annotation.value();
+      Key<?> key = Key.newInstance(parameterType, name);
+      parameterInjectors.add(createParameterInjector(key, member));
+    }
+
+    return toArray(parameterInjectors);
+  }
+
+  <T> ParameterInjector<T> createParameterInjector(
+      Key<T> key, Member member) throws MissingDependencyException {
+    InternalFactory<? extends T> factory = getFactory(key);
+    if (factory == null) {
+      throw new MissingDependencyException(
+          "No mapping found for dependency " + key + " in " + member + ".");
+    }
+
+    ExternalContext<T> externalContext =
+        ExternalContext.newInstance(member, key, this);
+    return new ParameterInjector<T>(externalContext, factory);
+  }
+
+  @SuppressWarnings("unchecked")
+  private ParameterInjector<?>[] toArray(
+      List<ParameterInjector<?>> parameterInjections) {
+    return parameterInjections.toArray(
+        new ParameterInjector[parameterInjections.size()]);
+  }
+
+  /**
+   * Finds the {@link Inject} annotation in an array of annotations.
+   */
+  Inject findInject(Annotation[] annotations) {
+    for (Annotation annotation : annotations) {
+      if (annotation.annotationType() == Inject.class) {
+        return Inject.class.cast(annotation);
+      }
+    }
+    return null;
+  }
+
+  static class MethodInjector implements Injector {
+
+    final Method method;
+    final ParameterInjector<?>[] parameterInjectors;
+
+    public MethodInjector(ContainerImpl container, Method method, String name)
+        throws MissingDependencyException {
+      this.method = method;
+      method.setAccessible(true);
+
+      Class<?>[] parameterTypes = method.getParameterTypes();
+      if (parameterTypes.length == 0) {
+        throw new DependencyException(
+            method + " has no parameters to inject.");
+      }
+      parameterInjectors = container.getParametersInjectors(
+          method, method.getParameterAnnotations(), parameterTypes, name);
+    }
+
+    public void inject(InternalContext context, Object o) {
+      try {
+        method.invoke(o, getParameters(method, context, parameterInjectors));
+      } catch (Exception e) {
+        throw new RuntimeException(e);
+      }
+    }
+  }
+
+  Map<Class<?>, ConstructorInjector> constructors =
+      new ReferenceCache<Class<?>, ConstructorInjector>() {
+        @SuppressWarnings("unchecked")
+        protected ConstructorInjector<?> create(Class<?> implementation) {
+          return new ConstructorInjector(ContainerImpl.this, implementation);
+        }
+      };
+
+  static class ConstructorInjector<T> {
+
+    final Class<T> implementation;
+    final List<Injector> injectors;
+    final Constructor<T> constructor;
+    final ParameterInjector<?>[] parameterInjectors;
+
+    ConstructorInjector(ContainerImpl container, Class<T> implementation) {
+      this.implementation = implementation;
+
+      constructor = findConstructorIn(implementation);
+      constructor.setAccessible(true);
+
+      try {
+        Inject inject = constructor.getAnnotation(Inject.class);
+        parameterInjectors = inject == null
+            ? null // default constructor.
+            : container.getParametersInjectors(
+                constructor,
+                constructor.getParameterAnnotations(),
+                constructor.getParameterTypes(),
+                inject.value()
+              );
+      } catch (MissingDependencyException e) {
+        throw new DependencyException(e);
+      }
+      injectors = container.injectors.get(implementation);
+    }
+
+    private Constructor<T> findConstructorIn(Class<T> implementation) {
+      Constructor<T> found = null;
+      for (Constructor<T> constructor
+          : implementation.getDeclaredConstructors()) {
+        if (constructor.getAnnotation(Inject.class) != null) {
+          if (found != null) {
+            throw new DependencyException("More than one constructor annotated"
+              + " with @Inject found in " + implementation + ".");
+          }
+          found = constructor;
+        }
+      }
+      if (found != null) {
+        return found;
+      }
+
+      // If no annotated constructor is found, look for a no-arg constructor
+      // instead.
+      try {
+        return implementation.getDeclaredConstructor();
+      } catch (NoSuchMethodException e) {
+        throw new DependencyException("Could not find a suitable constructor"
+            + " in " + implementation.getName() + ".");
+      }
+    }
+
+    /**
+     * Construct an instance. Returns {@code Object} instead of {@code T}
+     * because it may return a proxy.
+     */
+    Object construct(InternalContext context, Class<? super T> expectedType) {
+      ConstructionContext<T> constructionContext =
+          context.getConstructionContext(this);
+
+      // We have a circular reference between constructors. Return a proxy.
+      if (constructionContext.isConstructing()) {
+        // TODO (crazybob): if we can't proxy this object, can we proxy the
+        // other object?
+        return constructionContext.createProxy(expectedType);
+      }
+
+      // If we're re-entering this factory while injecting fields or methods,
+      // return the same instance. This prevents infinite loops.
+      T t = constructionContext.getCurrentReference();
+      if (t != null) {
+        return t;
+      }
+
+      try {
+        // First time through...
+        constructionContext.startConstruction();
+        try {
+          Object[] parameters =
+              getParameters(constructor, context, parameterInjectors);
+          t = constructor.newInstance(parameters);
+          constructionContext.setProxyDelegates(t);
+        } finally {
+          constructionContext.finishConstruction();
+        }
+
+        // Store reference. If an injector re-enters this factory, they'll
+        // get the same reference.
+        constructionContext.setCurrentReference(t);
+
+        // Inject fields and methods.
+        for (Injector injector : injectors) {
+          injector.inject(context, t);
+        }
+
+        return t;
+      } catch (InstantiationException e) {
+        throw new RuntimeException(e);
+      } catch (IllegalAccessException e) {
+        throw new RuntimeException(e);
+      } catch (InvocationTargetException e) {
+        throw new RuntimeException(e);
+      } finally {
+        constructionContext.removeCurrentReference();
+      }
+    }
+  }
+
+  static class ParameterInjector<T> {
+
+    final ExternalContext<T> externalContext;
+    final InternalFactory<? extends T> factory;
+
+    public ParameterInjector(ExternalContext<T> externalContext,
+        InternalFactory<? extends T> factory) {
+      this.externalContext = externalContext;
+      this.factory = factory;
+    }
+
+    T inject(Member member, InternalContext context) {
+      ExternalContext<?> previous = context.getExternalContext();
+      context.setExternalContext(externalContext);
+      try {
+        return factory.create(context);
+      } finally {
+        context.setExternalContext(previous);
+      }
+    }
+  }
+
+  private static Object[] getParameters(Member member, InternalContext context,
+      ParameterInjector[] parameterInjectors) {
+    if (parameterInjectors == null) {
+      return null;
+    }
+
+    Object[] parameters = new Object[parameterInjectors.length];
+    for (int i = 0; i < parameters.length; i++) {
+      parameters[i] = parameterInjectors[i].inject(member, context);
+    }
+    return parameters;
+  }
+
+  void inject(Object o, InternalContext context) {
+    List<Injector> injectors = this.injectors.get(o.getClass());
+    for (Injector injector : injectors) {
+      injector.inject(context, o);
+    }
+  }
+
+  <T> T inject(Class<T> implementation, InternalContext context) {
+    try {
+      ConstructorInjector<T> constructor = getConstructor(implementation);
+      return implementation.cast(
+          constructor.construct(context, implementation));
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  <T> T getInstance(Class<T> type, String name, InternalContext context) {
+    ExternalContext<?> previous = context.getExternalContext();
+    Key<T> key = Key.newInstance(type, name);
+    context.setExternalContext(ExternalContext.newInstance(null, key, this));
+    try {
+      return getFactory(key).create(context);
+    } finally {
+      context.setExternalContext(previous);
+    }
+  }
+
+  <T> T getInstance(Class<T> type, InternalContext context) {
+    return getInstance(type, DEFAULT_NAME, context);
+  }
+
+  public void inject(final Object o) {
+    callInContext(new ContextualCallable<Void>() {
+      public Void call(InternalContext context) {
+        inject(o, context);
+        return null;
+      }
+    });
+  }
+
+  public <T> T inject(final Class<T> implementation) {
+    return callInContext(new ContextualCallable<T>() {
+      public T call(InternalContext context) {
+        return inject(implementation, context);
+      }
+    });
+  }
+
+  public <T> T getInstance(final Class<T> type, final String name) {
+    return callInContext(new ContextualCallable<T>() {
+      public T call(InternalContext context) {
+        return getInstance(type, name, context);
+      }
+    });
+  }
+
+  public <T> T getInstance(final Class<T> type) {
+    return callInContext(new ContextualCallable<T>() {
+      public T call(InternalContext context) {
+        return getInstance(type, context);
+      }
+    });
+  }
+
+  ThreadLocal<InternalContext[]> localContext =
+      new ThreadLocal<InternalContext[]>() {
+        protected InternalContext[] initialValue() {
+          return new InternalContext[1];
+        }
+      };
+
+  /**
+   * Looks up thread local context. Creates (and removes) a new context if
+   * necessary.
+   */
+  <T> T callInContext(ContextualCallable<T> callable) {
+    InternalContext[] reference = localContext.get();
+    if (reference[0] == null) {
+      reference[0] = new InternalContext(this);
+      try {
+        return callable.call(reference[0]);
+      } finally {
+        // Only remove the context if this call created it.
+        reference[0] = null;
+      }
+    } else {
+      // Someone else will clean up this context.
+      return callable.call(reference[0]);
+    }
+  }
+
+  interface ContextualCallable<T> {
+    T call(InternalContext context);
+  }
+
+  /**
+   * Gets a constructor function for a given implementation class.
+   */
+  @SuppressWarnings("unchecked")
+  <T> ConstructorInjector<T> getConstructor(Class<T> implementation) {
+    return constructors.get(implementation);
+  }
+
+  final ThreadLocal<Scope.Strategy> localScopeStrategy =
+      new ThreadLocal<Scope.Strategy>();
+
+  public void setScopeStrategy(Scope.Strategy scopeStrategy) {
+    this.localScopeStrategy.set(scopeStrategy);
+  }
+
+  public void removeScopeStrategy() {
+    this.localScopeStrategy.remove();
+  }
+
+  /**
+   * Injects a field or method in a given object.
+   */
+  interface Injector {
+    void inject(InternalContext context, Object o);
+  }
+
+  static class MissingDependencyException extends Exception {
+
+    MissingDependencyException(String message) {
+      super(message);
+    }
+  }
+}
diff --git a/src/com/google/inject/Context.java b/src/com/google/inject/Context.java
new file mode 100644
index 0000000000..7d2b1b34da
--- /dev/null
+++ b/src/com/google/inject/Context.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import java.lang.reflect.Member;
+
+/**
+ * Context of the current injection.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public interface Context {
+
+  /**
+   * Gets the {@link Container}.
+   */
+  Container getContainer();
+
+  /**
+   * Gets the current scope strategy. See {@link
+   * Container#setScopeStrategy(Scope.Strategy)}.
+   *
+   * @throws IllegalStateException if no strategy has been set
+   */
+  Scope.Strategy getScopeStrategy();
+
+  /**
+   * Gets the field, method or constructor which is being injected. Returns
+   * {@code null} if the object currently being constructed is pre-loaded as
+   * a singleton or requested from {@link Container#getInstance(Class)}.
+   */
+  Member getMember();
+
+  /**
+   * Gets the type of the field or parameter which is being injected.
+   */
+  Class<?> getType();
+
+  /**
+   * Gets the name of the injection specified by {@link Inject#value()}.
+   */
+  String getName();
+}
diff --git a/src/com/google/inject/DependencyException.java b/src/com/google/inject/DependencyException.java
new file mode 100644
index 0000000000..25fa5b1342
--- /dev/null
+++ b/src/com/google/inject/DependencyException.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+/**
+ * Thrown when a dependency is misconfigured.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class DependencyException extends RuntimeException {
+
+  public DependencyException(String message) {
+    super(message);
+  }
+
+  public DependencyException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  public DependencyException(Throwable cause) {
+    super(cause);
+  }
+}
diff --git a/src/com/google/inject/ExternalContext.java b/src/com/google/inject/ExternalContext.java
new file mode 100644
index 0000000000..f3e5ae228f
--- /dev/null
+++ b/src/com/google/inject/ExternalContext.java
@@ -0,0 +1,73 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import java.lang.reflect.Member;
+import java.util.LinkedHashMap;
+
+/**
+ * An immutable snapshot of the current context which is safe to
+ * expose to client code.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+class ExternalContext<T> implements Context {
+
+  final Member member;
+  final Key<T> key;
+  final ContainerImpl container;
+
+  public ExternalContext(Member member, Key<T> key, ContainerImpl container) {
+    this.member = member;
+    this.key = key;
+    this.container = container;
+  }
+
+  public Class<T> getType() {
+    return key.getType();
+  }
+
+  public Scope.Strategy getScopeStrategy() {
+    return container.localScopeStrategy.get();
+  }
+
+  public Container getContainer() {
+    return container;
+  }
+
+  public Member getMember() {
+    return member;
+  }
+
+  public String getName() {
+    return key.getName();
+  }
+
+  public String toString() {
+    return "Context" + new LinkedHashMap<String, Object>() {{
+      put("member", member);
+      put("type", getType());
+      put("name", getName());
+      put("container", container);
+    }}.toString();
+  }
+
+  static <T> ExternalContext<T> newInstance(Member member, Key<T> key,
+      ContainerImpl container) {
+    return new ExternalContext<T>(member, key, container);
+  }
+}
diff --git a/src/com/google/inject/Factory.java b/src/com/google/inject/Factory.java
new file mode 100644
index 0000000000..130488c9da
--- /dev/null
+++ b/src/com/google/inject/Factory.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+/**
+ * A custom factory. Creates objects which will be injected.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public interface Factory<T> {
+
+  /**
+   * Creates an object to be injected.
+   *
+   * @param context of this injection
+   * @return instance to be injected
+   * @throws Exception if unable to create object
+   */
+  T create(Context context) throws Exception;
+}
diff --git a/src/com/google/inject/Inject.java b/src/com/google/inject/Inject.java
new file mode 100644
index 0000000000..86a9b2bfca
--- /dev/null
+++ b/src/com/google/inject/Inject.java
@@ -0,0 +1,46 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import static com.google.inject.Container.*;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.*;
+import java.lang.annotation.Target;
+
+/**
+ * <p>Annotates members and parameters which should have their value[s]
+ * injected.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+@Target({METHOD, CONSTRUCTOR, FIELD, PARAMETER})
+@Retention(RUNTIME)
+public @interface Inject {
+
+  /**
+   * Dependency name. Defaults to {@link Container#DEFAULT_NAME}.
+   */
+  String value() default DEFAULT_NAME;
+
+  /**
+   * Whether or not injection is required. Applicable only to methods and
+   * fields (not constructors or parameters).
+   */
+  boolean required() default true;
+}
diff --git a/src/com/google/inject/InternalContext.java b/src/com/google/inject/InternalContext.java
new file mode 100644
index 0000000000..d9d9879736
--- /dev/null
+++ b/src/com/google/inject/InternalContext.java
@@ -0,0 +1,80 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Internal context. Used to coordinate injections and support circular
+ * dependencies.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+class InternalContext {
+
+  final ContainerImpl container;
+  final Map<Object, ConstructionContext<?>> constructionContexts =
+      new HashMap<Object, ConstructionContext<?>>();
+  Scope.Strategy scopeStrategy;
+  ExternalContext<?> externalContext;
+
+  InternalContext(ContainerImpl container) {
+    this.container = container;
+  }
+
+  public Container getContainer() {
+    return container;
+  }
+
+  ContainerImpl getContainerImpl() {
+    return container;
+  }
+
+  Scope.Strategy getScopeStrategy() {
+    if (scopeStrategy == null) {
+      scopeStrategy = container.localScopeStrategy.get();
+
+      if (scopeStrategy == null) {
+        throw new IllegalStateException("Scope strategy not set. "
+            + "Please call Container.setScopeStrategy().");
+      }
+    }
+
+    return scopeStrategy;
+  }
+
+  @SuppressWarnings("unchecked")
+  <T> ConstructionContext<T> getConstructionContext(Object key) {
+    ConstructionContext<T> constructionContext =
+        (ConstructionContext<T>) constructionContexts.get(key);
+    if (constructionContext == null) {
+      constructionContext = new ConstructionContext<T>();
+      constructionContexts.put(key, constructionContext);
+    }
+    return constructionContext;
+  }
+
+  @SuppressWarnings("unchecked")
+  <T> ExternalContext<T> getExternalContext() {
+    return (ExternalContext<T>) externalContext;
+  }
+
+  void setExternalContext(ExternalContext<?> externalContext) {
+    this.externalContext = externalContext;
+  }
+}
diff --git a/src/com/google/inject/InternalFactory.java b/src/com/google/inject/InternalFactory.java
new file mode 100644
index 0000000000..fa5ec04e7a
--- /dev/null
+++ b/src/com/google/inject/InternalFactory.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+/**
+ * Creates objects which will be injected.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+interface InternalFactory<T> {
+
+  /**
+   * Creates an object to be injected.
+   *
+   * @param context of this injection
+   * @return instance to be injected
+   */
+  T create(InternalContext context);
+}
diff --git a/src/com/google/inject/Key.java b/src/com/google/inject/Key.java
new file mode 100644
index 0000000000..30664831c8
--- /dev/null
+++ b/src/com/google/inject/Key.java
@@ -0,0 +1,74 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+/**
+ * Dependency mapping key. Uniquely identified by the required type and name.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+class Key<T> {
+
+  final Class<T> type;
+  final String name;
+  final int hashCode;
+
+  private Key(Class<T> type, String name) {
+    if (type == null) {
+      throw new NullPointerException("Type is null.");
+    }
+    if (name == null) {
+      throw new NullPointerException("Name is null.");
+    }
+
+    this.type = type;
+    this.name = name;
+
+    hashCode = type.hashCode() * 31 + name.hashCode();
+  }
+
+  Class<T> getType() {
+    return type;
+  }
+
+  String getName() {
+    return name;
+  }
+
+  public int hashCode() {
+    return hashCode;
+  }
+
+  public boolean equals(Object o) {
+    if (!(o instanceof Key)) {
+      return false;
+    }
+    if (o == this) {
+      return true;
+    }
+    Key other = (Key) o;
+    return name.equals(other.name) && type.equals(other.type);
+  }
+
+  public String toString() {
+    return "[type=" + type.getName() + ", name='" + name + "']";
+  }
+
+  static <T> Key<T> newInstance(Class<T> type, String name) {
+    return new Key<T>(type, name);
+  }
+}
diff --git a/src/com/google/inject/Scope.java b/src/com/google/inject/Scope.java
new file mode 100644
index 0000000000..66a4d94e0c
--- /dev/null
+++ b/src/com/google/inject/Scope.java
@@ -0,0 +1,206 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import java.util.concurrent.Callable;
+
+/**
+ * Scope of an injected objects.
+ *
+ * @author crazybob
+ */
+public enum Scope {
+
+  /**
+   * One instance per injection.
+   */
+  DEFAULT {
+    <T> InternalFactory<? extends T> scopeFactory(Class<T> type, String name,
+        InternalFactory<? extends T> factory) {
+      return factory;
+    }
+  },
+
+  /**
+   * One instance per container.
+   */
+  SINGLETON {
+    <T> InternalFactory<? extends T> scopeFactory(Class<T> type, String name,
+        final InternalFactory<? extends T> factory) {
+      return new InternalFactory<T>() {
+        T instance;
+        public T create(InternalContext context) {
+          synchronized (context.getContainer()) {
+            if (instance == null) {
+              instance = factory.create(context);
+            }
+            return instance;
+          }
+        }
+
+        public String toString() {
+          return factory.toString();
+        }
+      };
+    }
+  },
+
+  /**
+   * One instance per thread.
+   *
+   * <p><b>Note:</b> if a thread local object strongly references its {@link
+   * Container}, neither the {@code Container} nor the object will be
+   * eligible for garbage collection, i.e. memory leak.
+   */
+  THREAD {
+    <T> InternalFactory<? extends T> scopeFactory(Class<T> type, String name,
+        final InternalFactory<? extends T> factory) {
+      return new InternalFactory<T>() {
+        final ThreadLocal<T> threadLocal = new ThreadLocal<T>();
+        public T create(final InternalContext context) {
+          T t = threadLocal.get();
+          if (t == null) {
+            t = factory.create(context);
+            threadLocal.set(t);
+          }
+          return t;
+        }
+
+        public String toString() {
+          return factory.toString();
+        }
+      };
+    }
+  },
+
+  /**
+   * One instance per request.
+   */
+  REQUEST {
+    <T> InternalFactory<? extends T> scopeFactory(final Class<T> type,
+        final String name, final InternalFactory<? extends T> factory) {
+      return new InternalFactory<T>() {
+        public T create(InternalContext context) {
+          Strategy strategy = context.getScopeStrategy();
+          try {
+            return strategy.findInRequest(
+                type, name, toCallable(context, factory));
+          } catch (Exception e) {
+            throw new RuntimeException(e);
+          }
+        }
+
+        public String toString() {
+          return factory.toString();
+        }
+      };
+    }
+  },
+
+  /**
+   * One instance per session.
+   */
+  SESSION {
+    <T> InternalFactory<? extends T> scopeFactory(final Class<T> type,
+        final String name, final InternalFactory<? extends T> factory) {
+      return new InternalFactory<T>() {
+        public T create(InternalContext context) {
+          Strategy strategy = context.getScopeStrategy();
+          try {
+            return strategy.findInSession(
+                type, name, toCallable(context, factory));
+          } catch (Exception e) {
+            throw new RuntimeException(e);
+          }
+        }
+
+        public String toString() {
+          return factory.toString();
+        }
+      };
+    }
+  },
+
+  /**
+   * One instance per wizard.
+   */
+  WIZARD {
+    <T> InternalFactory<? extends T> scopeFactory(final Class<T> type,
+        final String name, final InternalFactory<? extends T> factory) {
+      return new InternalFactory<T>() {
+        public T create(InternalContext context) {
+          Strategy strategy = context.getScopeStrategy();
+          try {
+            return strategy.findInWizard(
+                type, name, toCallable(context, factory));
+          } catch (Exception e) {
+            throw new RuntimeException(e);
+          }
+        }
+
+        public String toString() {
+          return factory.toString();
+        }
+      };
+    }
+  };
+
+  <T> Callable<? extends T> toCallable(final InternalContext context,
+      final InternalFactory<? extends T> factory) {
+    return new Callable<T>() {
+      public T call() throws Exception {
+        return factory.create(context);
+      }
+    };
+  }
+
+  /**
+   * Wraps factory with scoping logic.
+   */
+  abstract <T> InternalFactory<? extends T> scopeFactory(
+      Class<T> type, String name, InternalFactory<? extends T> factory);
+
+  /**
+   * Pluggable scoping strategy. Enables users to provide custom
+   * implementations of request, session, and wizard scopes. Implement and
+   * pass to {@link
+   * Container#setScopeStrategy(com.google.inject.Scope.Strategy)}.
+   */
+  public interface Strategy {
+
+    /**
+     * Finds an object for the given type and name in the request scope.
+     * Creates a new object if necessary using the given factory.
+     */
+    <T> T findInRequest(Class<T> type, String name,
+        Callable<? extends T> factory) throws Exception;
+
+    /**
+     * Finds an object for the given type and name in the session scope.
+     * Creates a new object if necessary using the given factory.
+     */
+    <T> T findInSession(Class<T> type, String name,
+        Callable<? extends T> factory) throws Exception;
+
+    /**
+     * Finds an object for the given type and name in the wizard scope.
+     * Creates a new object if necessary using the given factory.
+     */
+    <T> T findInWizard(Class<T> type, String name,
+        Callable<? extends T> factory) throws Exception;
+  }
+}
diff --git a/src/com/google/inject/Scoped.java b/src/com/google/inject/Scoped.java
new file mode 100644
index 0000000000..cf143297e3
--- /dev/null
+++ b/src/com/google/inject/Scoped.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Annotates a scoped implementation class.
+ *
+ * @author crazybob
+ */
+@Target(ElementType.TYPE)
+@Retention(RUNTIME)
+public @interface Scoped {
+
+  /**
+   * Scope.
+   */
+  Scope value();
+}
diff --git a/src/com/google/inject/package-info.java b/src/com/google/inject/package-info.java
new file mode 100644
index 0000000000..28c8b9087a
--- /dev/null
+++ b/src/com/google/inject/package-info.java
@@ -0,0 +1,30 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <i>Guice</i> (pronounced "juice"). A lightweight dependency injection
+ * container. Features include:
+ *
+ * <ul>
+ *   <li>constructor, method, and field injection</li>
+ *   <li>static method and field injection</li>
+ *   <li>circular reference support (including constructors if you depend upon
+ *    interfaces)</li>
+ *   <li>high performance</li>
+ *   <li>externalize what needs to be and no more</li>
+ * </ul>
+ */
+package com.google.inject;
diff --git a/src/com/google/inject/util/FinalizablePhantomReference.java b/src/com/google/inject/util/FinalizablePhantomReference.java
new file mode 100644
index 0000000000..a61a132d5d
--- /dev/null
+++ b/src/com/google/inject/util/FinalizablePhantomReference.java
@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import java.lang.ref.PhantomReference;
+
+/**
+ * Phantom reference with a {@link #finalizeReferent()} method which a
+ * background thread invokes after the garbage collector reclaims the
+ * referent. This is a simpler alternative to using a {@link
+ * java.lang.ref.ReferenceQueue}.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public abstract class FinalizablePhantomReference<T>
+    extends PhantomReference<T> implements FinalizableReference {
+
+  protected FinalizablePhantomReference(T referent) {
+    super(referent, FinalizableReferenceQueue.getInstance());
+  }
+}
diff --git a/src/com/google/inject/util/FinalizableReference.java b/src/com/google/inject/util/FinalizableReference.java
new file mode 100644
index 0000000000..b655b22f1b
--- /dev/null
+++ b/src/com/google/inject/util/FinalizableReference.java
@@ -0,0 +1,32 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+/**
+ * Package-private interface implemented by references that have code to run
+ * after garbage collection of their referents.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+interface FinalizableReference {
+
+  /**
+   * Invoked on a background thread after the referent has been garbage
+   * collected.
+   */
+  void finalizeReferent();
+}
diff --git a/src/com/google/inject/util/FinalizableReferenceQueue.java b/src/com/google/inject/util/FinalizableReferenceQueue.java
new file mode 100644
index 0000000000..bcf0ede166
--- /dev/null
+++ b/src/com/google/inject/util/FinalizableReferenceQueue.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import com.google.inject.util.FinalizableReference;
+
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Starts a background thread that cleans up after reclaimed referents.
+ *
+ * @author Bob Lee (crazybob@google.com)
+ */
+class FinalizableReferenceQueue extends ReferenceQueue<Object> {
+
+  private static final Logger logger =
+      Logger.getLogger(FinalizableReferenceQueue.class.getName());
+
+  private FinalizableReferenceQueue() {}
+
+  void cleanUp(Reference reference) {
+    try {
+      ((FinalizableReference) reference).finalizeReferent();
+    } catch (Throwable t) {
+      deliverBadNews(t);
+    }
+  }
+
+  void deliverBadNews(Throwable t) {
+    logger.log(Level.SEVERE, "Error cleaning up after reference.", t);
+  }
+
+  void start() {
+    Thread thread = new Thread("FinalizableReferenceQueue") {
+      public void run() {
+        while (true) {
+          try {
+            cleanUp(remove());
+          } catch (InterruptedException e) { /* ignore */ }
+        }
+      }
+    };
+    thread.setDaemon(true);
+    thread.start();
+  }
+
+  static ReferenceQueue<Object> instance = createAndStart();
+
+  static FinalizableReferenceQueue createAndStart() {
+    FinalizableReferenceQueue queue = new FinalizableReferenceQueue();
+    queue.start();
+    return queue;
+  }
+
+  /**
+   * Gets instance.
+   */
+  public static ReferenceQueue<Object> getInstance() {
+    return instance;
+  }
+}
diff --git a/src/com/google/inject/util/FinalizableSoftReference.java b/src/com/google/inject/util/FinalizableSoftReference.java
new file mode 100644
index 0000000000..b9af0819bd
--- /dev/null
+++ b/src/com/google/inject/util/FinalizableSoftReference.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import java.lang.ref.SoftReference;
+
+/**
+ * Soft reference with a {@link #finalizeReferent()} method which a background
+ * thread invokes after the garbage collector reclaims the referent. This is a
+ * simpler alternative to using a {@link java.lang.ref.ReferenceQueue}.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public abstract class FinalizableSoftReference<T> extends SoftReference<T>
+    implements FinalizableReference {
+
+  protected FinalizableSoftReference(T referent) {
+    super(referent, FinalizableReferenceQueue.getInstance());
+  }
+}
diff --git a/src/com/google/inject/util/FinalizableWeakReference.java b/src/com/google/inject/util/FinalizableWeakReference.java
new file mode 100644
index 0000000000..b92b7b8ac0
--- /dev/null
+++ b/src/com/google/inject/util/FinalizableWeakReference.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Weak reference with a {@link #finalizeReferent()} method which a background
+ * thread invokes after the garbage collector reclaims the referent. This is a
+ * simpler alternative to using a {@link java.lang.ref.ReferenceQueue}.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public abstract class FinalizableWeakReference<T> extends WeakReference<T>
+    implements FinalizableReference {
+
+  protected FinalizableWeakReference(T referent) {
+    super(referent, FinalizableReferenceQueue.getInstance());
+  }
+}
diff --git a/src/com/google/inject/util/Function.java b/src/com/google/inject/util/Function.java
new file mode 100644
index 0000000000..8d5a349c8e
--- /dev/null
+++ b/src/com/google/inject/util/Function.java
@@ -0,0 +1,44 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+/**
+ * A Function provides a transformation on an object and returns the resulting
+ * object.  For example, a {@code StringToIntegerFunction} may implement
+ * <code>Function&lt;String,Integer&gt;</code> and transform integers in String
+ * format to Integer format.
+ *
+ * <p>The transformation on the source object does not necessarily result in
+ * an object of a different type.  For example, a
+ * {@code FarenheitToCelciusFunction} may implement
+ * <code>Function&lt;Float,Float&gt;</code>.
+ *
+ * <p>Implementors of Function which may cause side effects upon evaluation are
+ * strongly encouraged to state this fact clearly in their API documentation.
+ */
+public interface Function<F,T> {
+
+  /**
+   * Applies the function to an object of type {@code F}, resulting in an object
+   * of type {@code T}.  Note that types {@code F} and {@code T} may or may not
+   * be the same.
+   *
+   * @param from The source object.
+   * @return The resulting object.
+   */
+  T apply(F from);
+}
diff --git a/src/com/google/inject/util/ReferenceCache.java b/src/com/google/inject/util/ReferenceCache.java
new file mode 100644
index 0000000000..8de78a9f1f
--- /dev/null
+++ b/src/com/google/inject/util/ReferenceCache.java
@@ -0,0 +1,188 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import static com.google.inject.util.ReferenceType.STRONG;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+
+/**
+ * Extends {@link ReferenceMap} to support lazy loading values by overriding
+ * {@link #create(Object)}.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public abstract class ReferenceCache<K, V> extends ReferenceMap<K, V> {
+
+  private static final long serialVersionUID = 0;
+
+  transient ConcurrentMap<Object, Future<V>> futures =
+      new ConcurrentHashMap<Object, Future<V>>();
+
+  transient ThreadLocal<Future<V>> localFuture = new ThreadLocal<Future<V>>();
+
+  public ReferenceCache(ReferenceType keyReferenceType,
+      ReferenceType valueReferenceType) {
+    super(keyReferenceType, valueReferenceType);
+  }
+
+  /**
+   * Equivalent to {@code new ReferenceCache(STRONG, STRONG)}.
+   */
+  public ReferenceCache() {
+    super(STRONG, STRONG);
+  }
+
+  /**
+   * Override to lazy load values. Use as an alternative to {@link
+   * #put(Object,Object)}. Invoked by getter if value isn't already cached.
+   * Must not return {@code null}. This method will not be called again until
+   * the garbage collector reclaims the returned value.
+   */
+  protected abstract V create(K key);
+
+  V internalCreate(K key) {
+    try {
+      FutureTask<V> futureTask = new FutureTask<V>(
+          new CallableCreate(key));
+
+      // use a reference so we get the same equality semantics.
+      Object keyReference = referenceKey(key);
+      Future<V> future = futures.putIfAbsent(keyReference, futureTask);
+      if (future == null) {
+        // winning thread.
+        try {
+          if (localFuture.get() != null) {
+            throw new IllegalStateException(
+                "Nested creations within the same cache are not allowed.");
+          }
+          localFuture.set(futureTask);
+          futureTask.run();
+          V value = futureTask.get();
+          putStrategy().execute(this,
+              keyReference, referenceValue(keyReference, value));
+          return value;
+        } finally {
+          localFuture.remove();
+          futures.remove(keyReference);
+        }
+      } else {
+        // wait for winning thread.
+        return future.get();
+      }
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    } catch (ExecutionException e) {
+      Throwable cause = e.getCause();
+      if (cause instanceof RuntimeException) {
+        throw (RuntimeException) cause;
+      } else if (cause instanceof Error) {
+        throw (Error) cause;
+      }
+      throw new RuntimeException(cause);
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * If this map does not contain an entry for the given key and {@link
+   * #create(Object)} has been overridden, this method will create a new
+   * value, put it in the map, and return it.
+   *
+   * @throws NullPointerException if {@link #create(Object)} returns null.
+   * @throws java.util.concurrent.CancellationException if the creation is
+   *  cancelled. See {@link #cancel()}.
+   */
+  @SuppressWarnings("unchecked")
+  @Override public V get(final Object key) {
+    V value = super.get(key);
+    return (value == null)
+      ? internalCreate((K) key)
+      : value;
+  }
+
+  /**
+   * Cancels the current {@link #create(Object)}. Throws {@link
+   * java.util.concurrent.CancellationException} to all clients currently
+   * blocked on {@link #get(Object)}.
+   */
+  protected void cancel() {
+    Future<V> future = localFuture.get();
+    if (future == null) {
+      throw new IllegalStateException("Not in create().");
+    }
+    future.cancel(false);
+  }
+
+  class CallableCreate implements Callable<V> {
+
+    K key;
+
+    public CallableCreate(K key) {
+      this.key = key;
+    }
+
+    public V call() {
+      // try one more time (a previous future could have come and gone.)
+      V value = internalGet(key);
+      if (value != null) {
+        return value;
+      }
+
+      // create value.
+      value = create(key);
+      if (value == null) {
+        throw new NullPointerException(
+            "create(K) returned null for: " + key);
+      }
+      return value;
+    }
+  }
+
+  /**
+   * Returns a {@code ReferenceCache} delegating to the specified {@code
+   * function}. The specified function must not return {@code null}.
+   */
+  public static <K, V> ReferenceCache<K, V> of(
+      ReferenceType keyReferenceType,
+      ReferenceType valueReferenceType,
+      final Function<? super K, ? extends V> function) {
+    ensureNotNull(function);
+    return new ReferenceCache<K, V>(keyReferenceType, valueReferenceType) {
+      protected V create(K key) {
+        return function.apply(key);
+      }
+      private static final long serialVersionUID = 0;
+    };
+  }
+
+  private void readObject(ObjectInputStream in) throws IOException,
+      ClassNotFoundException {
+    in.defaultReadObject();
+    this.futures = new ConcurrentHashMap<Object, Future<V>>();
+    this.localFuture = new ThreadLocal<Future<V>>();
+  }
+
+}
diff --git a/src/com/google/inject/util/ReferenceMap.java b/src/com/google/inject/util/ReferenceMap.java
new file mode 100644
index 0000000000..9a5d6f31fc
--- /dev/null
+++ b/src/com/google/inject/util/ReferenceMap.java
@@ -0,0 +1,615 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import static com.google.inject.util.ReferenceType.STRONG;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.ref.Reference;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Concurrent hash map that wraps keys and/or values in soft or weak
+ * references. Does not support null keys or values. Uses identity equality
+ * for weak and soft keys.
+ *
+ * <p>The concurrent semantics of {@link ConcurrentHashMap} combined with the
+ * fact that the garbage collector can asynchronously reclaim and clean up
+ * after keys and values at any time can lead to some racy semantics. For
+ * example, {@link #size()} returns an upper bound on the size, i.e. the actual
+ * size may be smaller in cases where the key or value has been reclaimed but
+ * the map entry has not been cleaned up yet.
+ *
+ * <p>Another example: If {@link #get(Object)} cannot find an existing entry
+ * for a key, it will try to create one. This operation is not atomic. One
+ * thread could {@link #put(Object, Object)} a value between the time another
+ * thread running {@code get()} checks for an entry and decides to create one.
+ * In this case, the newly created value will replace the put value in the
+ * map. Also, two threads running {@code get()} concurrently can potentially
+ * create duplicate values for a given key.
+ *
+ * <p>In other words, this class is great for caching but not atomicity.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+@SuppressWarnings("unchecked")
+public class ReferenceMap<K, V> implements Map<K, V>, Serializable {
+
+  private static final long serialVersionUID = 0;
+
+  transient ConcurrentMap<Object, Object> delegate;
+
+  final ReferenceType keyReferenceType;
+  final ReferenceType valueReferenceType;
+
+  /**
+   * Concurrent hash map that wraps keys and/or values based on specified
+   * reference types.
+   *
+   * @param keyReferenceType key reference type
+   * @param valueReferenceType value reference type
+   */
+  public ReferenceMap(ReferenceType keyReferenceType,
+      ReferenceType valueReferenceType) {
+    ensureNotNull(keyReferenceType, valueReferenceType);
+
+    if (keyReferenceType == ReferenceType.PHANTOM
+        || valueReferenceType == ReferenceType.PHANTOM) {
+      throw new IllegalArgumentException("Phantom references not supported.");
+    }
+
+    this.delegate = new ConcurrentHashMap<Object, Object>();
+    this.keyReferenceType = keyReferenceType;
+    this.valueReferenceType = valueReferenceType;
+  }
+
+  V internalGet(K key) {
+    Object valueReference = delegate.get(makeKeyReferenceAware(key));
+    return valueReference == null
+        ? null
+        : (V) dereferenceValue(valueReference);
+  }
+
+  public V get(final Object key) {
+    ensureNotNull(key);
+    return internalGet((K) key);
+  }
+
+  V execute(Strategy strategy, K key, V value) {
+    ensureNotNull(key, value);
+    Object keyReference = referenceKey(key);
+    Object valueReference = strategy.execute(
+      this,
+      keyReference,
+      referenceValue(keyReference, value)
+    );
+    return valueReference == null ? null
+        : (V) dereferenceValue(valueReference);
+  }
+
+  public V put(K key, V value) {
+    return execute(putStrategy(), key, value);
+  }
+
+  public V remove(Object key) {
+    ensureNotNull(key);
+    Object referenceAwareKey = makeKeyReferenceAware(key);
+    Object valueReference = delegate.remove(referenceAwareKey);
+    return valueReference == null ? null
+        : (V) dereferenceValue(valueReference);
+  }
+
+  public int size() {
+    return delegate.size();
+  }
+
+  public boolean isEmpty() {
+    return delegate.isEmpty();
+  }
+
+  public boolean containsKey(Object key) {
+    ensureNotNull(key);
+    Object referenceAwareKey = makeKeyReferenceAware(key);
+    return delegate.containsKey(referenceAwareKey);
+  }
+
+  public boolean containsValue(Object value) {
+    ensureNotNull(value);
+    for (Object valueReference : delegate.values()) {
+      if (value.equals(dereferenceValue(valueReference))) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public void putAll(Map<? extends K, ? extends V> t) {
+    for (Map.Entry<? extends K, ? extends V> entry : t.entrySet()) {
+      put(entry.getKey(), entry.getValue());
+    }
+  }
+
+  public void clear() {
+    delegate.clear();
+  }
+
+  /**
+   * Returns an unmodifiable set view of the keys in this map. As this method
+   * creates a defensive copy, the performance is O(n).
+   */
+  public Set<K> keySet() {
+    return Collections.unmodifiableSet(
+        dereferenceKeySet(delegate.keySet()));
+  }
+
+  /**
+   * Returns an unmodifiable set view of the values in this map. As this
+   * method creates a defensive copy, the performance is O(n).
+   */
+  public Collection<V> values() {
+    return Collections.unmodifiableCollection(
+        dereferenceValues(delegate.values()));
+  }
+
+  public V putIfAbsent(K key, V value) {
+    // TODO (crazybob) if the value has been gc'ed but the entry hasn't been
+    // cleaned up yet, this put will fail.
+    return execute(putIfAbsentStrategy(), key, value);
+  }
+
+  public boolean remove(Object key, Object value) {
+    ensureNotNull(key, value);
+    Object referenceAwareKey = makeKeyReferenceAware(key);
+    Object referenceAwareValue = makeValueReferenceAware(value);
+    return delegate.remove(referenceAwareKey, referenceAwareValue);
+  }
+
+  public boolean replace(K key, V oldValue, V newValue) {
+    ensureNotNull(key, oldValue, newValue);
+    Object keyReference = referenceKey(key);
+
+    Object referenceAwareOldValue = makeValueReferenceAware(oldValue);
+    return delegate.replace(
+      keyReference,
+      referenceAwareOldValue,
+      referenceValue(keyReference, newValue)
+    );
+  }
+
+  public V replace(K key, V value) {
+    // TODO (crazybob) if the value has been gc'ed but the entry hasn't been
+    // cleaned up yet, this will succeed when it probably shouldn't.
+    return execute(replaceStrategy(), key, value);
+  }
+
+  /**
+   * Returns an unmodifiable set view of the entries in this map. As this
+   * method creates a defensive copy, the performance is O(n).
+   */
+  public Set<Map.Entry<K, V>> entrySet() {
+    Set<Map.Entry<K, V>> entrySet = new HashSet<Map.Entry<K, V>>();
+    for (Map.Entry<Object, Object> entry : delegate.entrySet()) {
+      Map.Entry<K, V> dereferenced = dereferenceEntry(entry);
+      if (dereferenced != null) {
+        entrySet.add(dereferenced);
+      }
+    }
+    return Collections.unmodifiableSet(entrySet);
+  }
+
+  /**
+   * Dereferences an entry. Returns null if the key or value has been gc'ed.
+   */
+  Entry dereferenceEntry(Map.Entry<Object, Object> entry) {
+    K key = dereferenceKey(entry.getKey()); 
+    V value = dereferenceValue(entry.getValue());
+    return (key == null || value == null)
+        ? null
+        : new Entry(key, value);
+  }
+
+  /**
+   * Creates a reference for a key.
+   */
+  Object referenceKey(K key) {
+    switch (keyReferenceType) {
+      case STRONG: return key;
+      case SOFT: return new SoftKeyReference(key);
+      case WEAK: return new WeakKeyReference(key);
+      default: throw new AssertionError();
+    }
+  }
+
+  /**
+   * Converts a reference to a key.
+   */
+  K dereferenceKey(Object o) {
+    return (K) dereference(keyReferenceType, o);
+  }
+
+  /**
+   * Converts a reference to a value.
+   */
+  V dereferenceValue(Object o) {
+    return (V) dereference(valueReferenceType, o);
+  }
+
+  /**
+   * Returns the refererent for reference given its reference type.
+   */
+  Object dereference(ReferenceType referenceType, Object reference) {
+    return referenceType == STRONG ? reference : ((Reference) reference).get();
+  }
+
+  /**
+   * Creates a reference for a value.
+   */
+  Object referenceValue(Object keyReference, Object value) {
+    switch (valueReferenceType) {
+      case STRONG: return value;
+      case SOFT: return new SoftValueReference(keyReference, value);
+      case WEAK: return new WeakValueReference(keyReference, value);
+      default: throw new AssertionError();
+    }
+  }
+
+  /**
+   * Dereferences a set of key references.
+   */
+  Set<K> dereferenceKeySet(Set keyReferences) {
+    return keyReferenceType == STRONG
+        ? keyReferences
+        : dereferenceCollection(keyReferenceType, keyReferences, new HashSet());
+  }
+
+  /**
+   * Dereferences a collection of value references.
+   */
+  Collection<V> dereferenceValues(Collection valueReferences) {
+    return valueReferenceType == STRONG
+        ? valueReferences
+        : dereferenceCollection(valueReferenceType, valueReferences,
+            new ArrayList(valueReferences.size()));
+  }
+
+  /**
+   * Wraps key so it can be compared to a referenced key for equality.
+   */
+  Object makeKeyReferenceAware(Object o) {
+    return keyReferenceType == STRONG ? o : new KeyReferenceAwareWrapper(o);
+  }
+
+  /**
+   * Wraps value so it can be compared to a referenced value for equality.
+   */
+  Object makeValueReferenceAware(Object o) {
+    return valueReferenceType == STRONG ? o : new ReferenceAwareWrapper(o);
+  }
+
+  /**
+   * Dereferences elements in {@code in} using
+   * {@code referenceType} and puts them in {@code out}. Returns
+   * {@code out}.
+   */
+  <T extends Collection<Object>> T dereferenceCollection(
+      ReferenceType referenceType, T in, T out) {
+    for (Object reference : in) {
+      out.add(dereference(referenceType, reference));
+    }
+    return out;
+  }
+
+  /**
+   * Marker interface to differentiate external and internal references.
+   */
+  interface InternalReference {}
+
+  static int keyHashCode(Object key) {
+    return System.identityHashCode(key);
+  }
+
+  /**
+   * Tests weak and soft references for identity equality. Compares references
+   * to other references and wrappers. If o is a reference, this returns true
+   * if r == o or if r and o reference the same non null object. If o is a
+   * wrapper, this returns true if r's referent is identical to the wrapped
+   * object.
+   */
+  static boolean referenceEquals(Reference r, Object o) {
+    // compare reference to reference.
+    if (o instanceof InternalReference) {
+      // are they the same reference? used in cleanup.
+      if (o == r) {
+        return true;
+      }
+
+      // do they reference identical values? used in conditional puts.
+      Object referent = ((Reference) o).get();
+      return referent != null && referent == r.get();
+    }
+
+    // is the wrapped object identical to the referent? used in lookups.
+    return ((ReferenceAwareWrapper) o).unwrap() == r.get();
+  }
+
+  /**
+   * Big hack. Used to compare keys and values to referenced keys and values
+   * without creating more references.
+   */
+  static class ReferenceAwareWrapper {
+
+    Object wrapped;
+
+    ReferenceAwareWrapper(Object wrapped) {
+      this.wrapped = wrapped;
+    }
+
+    Object unwrap() {
+      return wrapped;
+    }
+
+    public int hashCode() {
+      return wrapped.hashCode();
+    }
+
+    public boolean equals(Object obj) {
+      // defer to reference's equals() logic.
+      return obj.equals(this);
+    }
+  }
+
+  /**
+   * Used for keys. Overrides hash code to use identity hash code.
+   */
+  static class KeyReferenceAwareWrapper extends ReferenceAwareWrapper {
+
+    public KeyReferenceAwareWrapper(Object wrapped) {
+      super(wrapped);
+    }
+
+    public int hashCode() {
+      return System.identityHashCode(wrapped);
+    }
+  }
+
+  class SoftKeyReference extends FinalizableSoftReference<Object>
+      implements InternalReference {
+
+    int hashCode;
+
+    public SoftKeyReference(Object key) {
+      super(key);
+      this.hashCode = keyHashCode(key);
+    }
+
+    public void finalizeReferent() {
+      delegate.remove(this);
+    }
+
+    @Override public int hashCode() {
+      return this.hashCode;
+    }
+
+    @Override public boolean equals(Object o) {
+      return referenceEquals(this, o);
+    }
+  }
+
+  class WeakKeyReference extends FinalizableWeakReference<Object>
+      implements InternalReference {
+
+    int hashCode;
+
+    public WeakKeyReference(Object key) {
+      super(key);
+      this.hashCode = keyHashCode(key);
+    }
+
+    public void finalizeReferent() {
+      delegate.remove(this);
+    }
+
+    @Override public int hashCode() {
+      return this.hashCode;
+    }
+
+    @Override public boolean equals(Object o) {
+      return referenceEquals(this, o);
+    }
+  }
+
+  class SoftValueReference extends FinalizableSoftReference<Object>
+      implements InternalReference {
+
+    Object keyReference;
+
+    public SoftValueReference(Object keyReference, Object value) {
+      super(value);
+      this.keyReference = keyReference;
+    }
+
+    public void finalizeReferent() {
+      delegate.remove(keyReference, this);
+    }
+
+    @Override public boolean equals(Object obj) {
+      return referenceEquals(this, obj);
+    }
+  }
+
+  class WeakValueReference extends FinalizableWeakReference<Object>
+      implements InternalReference {
+
+    Object keyReference;
+
+    public WeakValueReference(Object keyReference, Object value) {
+      super(value);
+      this.keyReference = keyReference;
+    }
+
+    public void finalizeReferent() {
+      delegate.remove(keyReference, this);
+    }
+
+    @Override public boolean equals(Object obj) {
+      return referenceEquals(this, obj);
+    }
+  }
+
+  protected interface Strategy {
+    public Object execute(ReferenceMap map, Object keyReference,
+        Object valueReference);
+  }
+
+  protected Strategy putStrategy() {
+    return PutStrategy.PUT;
+  }
+
+  protected Strategy putIfAbsentStrategy() {
+    return PutStrategy.PUT_IF_ABSENT;
+  }
+
+  protected Strategy replaceStrategy() {
+    return PutStrategy.REPLACE;
+  }
+
+  private enum PutStrategy implements Strategy {
+    PUT {
+      public Object execute(ReferenceMap map, Object keyReference,
+          Object valueReference) {
+        return map.delegate.put(keyReference, valueReference);
+      }
+    },
+
+    REPLACE {
+      public Object execute(ReferenceMap map, Object keyReference,
+          Object valueReference) {
+        return map.delegate.replace(keyReference, valueReference);
+      }
+    },
+
+    PUT_IF_ABSENT {
+      public Object execute(ReferenceMap map, Object keyReference,
+          Object valueReference) {
+        return map.delegate.putIfAbsent(keyReference, valueReference);
+      }
+    };
+  };
+
+  private static PutStrategy defaultPutStrategy;
+
+  protected PutStrategy getPutStrategy() {
+    return defaultPutStrategy;
+  }
+
+
+  class Entry implements Map.Entry<K, V> {
+
+    K key;
+    V value;
+
+    public Entry(K key, V value) {
+      this.key = key;
+      this.value = value;
+    }
+
+    public K getKey() {
+      return this.key;
+    }
+
+    public V getValue() {
+      return this.value;
+    }
+
+    public V setValue(V value) {
+      return put(key, value);
+    }
+
+    public int hashCode() {
+      return key.hashCode() * 31 + value.hashCode();
+    }
+
+    public boolean equals(Object o) {
+      if (!(o instanceof ReferenceMap.Entry)) {
+        return false;
+      }
+
+      Entry entry = (Entry) o;
+      return key.equals(entry.key) && value.equals(entry.value);
+    }
+
+    public String toString() {
+      return key + "=" + value;
+    }
+  }
+
+  static void ensureNotNull(Object o) {
+    if (o == null) {
+      throw new NullPointerException();
+    }
+  }
+
+  static void ensureNotNull(Object... array) {
+    for (int i = 0; i < array.length; i++) {
+      if (array[i] == null) {
+        throw new NullPointerException("Argument #" + i + " is null.");
+      }
+    }
+  }
+
+  private void writeObject(ObjectOutputStream out) throws IOException  {
+    out.defaultWriteObject();
+    out.writeInt(size());
+    for (Map.Entry<Object, Object> entry : delegate.entrySet()) {
+      Object key = dereferenceKey(entry.getKey());
+      Object value = dereferenceValue(entry.getValue());
+
+      // don't persist gc'ed entries.
+      if (key != null && value != null) {
+        out.writeObject(key);
+        out.writeObject(value);
+      }
+    }
+    out.writeObject(null);
+  }
+
+  private void readObject(ObjectInputStream in) throws IOException,
+      ClassNotFoundException {
+    in.defaultReadObject();
+    int size = in.readInt();
+    this.delegate = new ConcurrentHashMap<Object, Object>(size);
+    while (true) {
+      K key = (K) in.readObject();
+      if (key == null) {
+        break;
+      }
+      V value = (V) in.readObject();
+      put(key, value);
+    }
+  }
+
+}
diff --git a/src/com/google/inject/util/ReferenceType.java b/src/com/google/inject/util/ReferenceType.java
new file mode 100644
index 0000000000..8ec8f38e77
--- /dev/null
+++ b/src/com/google/inject/util/ReferenceType.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+/**
+ * Reference type. Used to specify what type of reference to keep to a
+ * referent.
+ *
+ * @see java.lang.ref.Reference
+ * @author crazybob@google.com (Bob Lee)
+ */
+public enum ReferenceType {
+
+  /**
+   * Prevents referent from being reclaimed by the garbage collector.
+   */
+  STRONG,
+
+  /**
+   * Referent reclaimed in an LRU fashion when the VM runs low on memory and
+   * no strong references exist.
+   *
+   * @see java.lang.ref.SoftReference
+   */
+  SOFT,
+
+  /**
+   * Referent reclaimed when no strong or soft references exist.
+   *
+   * @see java.lang.ref.WeakReference
+   */
+  WEAK,
+
+  /**
+   * Similar to weak references except the garbage collector doesn't actually
+   * reclaim the referent. More flexible alternative to finalization.
+   *
+   * @see java.lang.ref.PhantomReference
+   */
+  PHANTOM;
+}
diff --git a/src/com/google/inject/util/Strings.java b/src/com/google/inject/util/Strings.java
new file mode 100644
index 0000000000..56a674e699
--- /dev/null
+++ b/src/com/google/inject/util/Strings.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+/**
+ * String utilities.
+ * 
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class Strings {
+
+  /**
+   * Returns a string that is equivalent to the specified string with its
+   * first character converted to uppercase as by {@link String#toUpperCase}.
+   * The returned string will have the same value as the specified string if
+   * its first character is non-alphabetic, if its first character is already
+   * uppercase, or if the specified string is of length 0.
+   *
+   * <p>For example:
+   * <pre>
+   *    capitalize("foo bar").equals("Foo bar");
+   *    capitalize("2b or not 2b").equals("2b or not 2b")
+   *    capitalize("Foo bar").equals("Foo bar");
+   *    capitalize("").equals("");
+   * </pre>
+   *
+   * @param s the string whose first character is to be uppercased
+   * @return a string equivalent to <tt>s</tt> with its first character
+   *     converted to uppercase
+   * @throws NullPointerException if <tt>s</tt> is null
+   */
+  public static String capitalize(String s) {
+    if (s.length() == 0)
+      return s;
+    char first = s.charAt(0);
+    char capitalized = Character.toUpperCase(first);
+    return (first == capitalized)
+        ? s
+        : capitalized + s.substring(1);
+  }
+}
diff --git a/test/com/google/inject/AllTests.java b/test/com/google/inject/AllTests.java
new file mode 100644
index 0000000000..c102116703
--- /dev/null
+++ b/test/com/google/inject/AllTests.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import com.google.inject.util.FinalizableReferenceQueueTest;
+import com.google.inject.util.ReferenceCacheTest;
+import com.google.inject.util.ReferenceMapTest;
+import com.google.inject.util.ReferenceMapTestSuite;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class AllTests {
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTestSuite(ContainerTest.class);
+    suite.addTestSuite(CircularDependencyTest.class);
+    suite.addTestSuite(StaticInjectionTest.class);
+    suite.addTestSuite(NotRequiredTest.class);
+    suite.addTestSuite(FactoryTest.class);
+    suite.addTestSuite(SuperclassTest.class);
+
+    // util.
+    suite.addTestSuite(FinalizableReferenceQueueTest.class);
+    suite.addTestSuite(ReferenceMapTest.class);
+    suite.addTestSuite(ReferenceCacheTest.class);
+
+    suite.addTest(ReferenceMapTestSuite.suite());
+
+    return suite;
+  }
+}
diff --git a/test/com/google/inject/CircularDependencyTest.java b/test/com/google/inject/CircularDependencyTest.java
new file mode 100644
index 0000000000..d0d54ee2dd
--- /dev/null
+++ b/test/com/google/inject/CircularDependencyTest.java
@@ -0,0 +1,68 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import static com.google.inject.Scope.SINGLETON;
+
+import junit.framework.TestCase;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class CircularDependencyTest extends TestCase {
+
+  public void testCircularlyDependentConstructors() {
+    ContainerBuilder builder = new ContainerBuilder();
+    builder
+        .factory(A.class, AImpl.class)
+        .factory(B.class, BImpl.class);
+
+    Container container = builder.create(false);
+    A a = container.inject(AImpl.class);
+    assertNotNull(a.getB().getA());
+  }
+
+  interface A {
+    B getB();
+  }
+
+  @Scoped(SINGLETON)
+  static class AImpl implements A {
+    final B b;
+    @Inject public AImpl(B b) {
+      this.b = b;
+    }
+    public B getB() {
+      return b;
+    }
+  }
+
+  interface B {
+    A getA();
+  }
+
+  static class BImpl implements B {
+    final A a;
+    @Inject public BImpl(A a) {
+      this.a = a;
+    }
+    public A getA() {
+      return a;
+    }
+  }
+
+}
diff --git a/test/com/google/inject/ContainerTest.java b/test/com/google/inject/ContainerTest.java
new file mode 100644
index 0000000000..2a2bf27a13
--- /dev/null
+++ b/test/com/google/inject/ContainerTest.java
@@ -0,0 +1,189 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import static com.google.inject.Scope.SINGLETON;
+
+import junit.framework.TestCase;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class ContainerTest extends TestCase {
+
+  public void testInjection() {
+    Container container = createFooContainer();
+    Foo foo = container.inject(Foo.class);
+
+    assertEquals("test", foo.s);
+    assertEquals("test", foo.bar.getTee().getS());
+    assertSame(foo.bar, foo.copy);
+    assertEquals(5, foo.i);
+    assertEquals(5, foo.bar.getI());
+
+    // Test circular dependency.
+    assertSame(foo.bar, foo.bar.getTee().getBar());
+  }
+
+  private Container createFooContainer() {
+    ContainerBuilder builder = new ContainerBuilder();
+    builder
+      .factory(Bar.class, BarImpl.class)
+      .factory(Tee.class, TeeImpl.class)
+      .constant("s", "test")
+      .constant("i", 5);
+
+    return builder.create(false);
+  }
+
+  public void testGetInstance() {
+    Container container = createFooContainer();
+
+    Bar bar = container.getInstance(Bar.class, Container.DEFAULT_NAME);
+    assertEquals("test", bar.getTee().getS());
+    assertEquals(5, bar.getI());
+  }
+
+  static class Foo {
+
+    @Inject Bar bar;
+    @Inject Bar copy;
+
+    @Inject("s") String s;
+
+    int i;
+
+    @Inject("i")
+    void setI(int i) {
+      this.i = i;
+    }
+  }
+
+  interface Bar {
+
+    Tee getTee();
+    int getI();
+  }
+
+  @Scoped(SINGLETON)
+  static class BarImpl implements Bar {
+
+    @Inject("i") int i;
+
+    Tee tee;
+
+    @Inject
+    void initialize(Tee tee) {
+      this.tee = tee;
+    }
+
+    public Tee getTee() {
+      return tee;
+    }
+
+    public int getI() {
+      return i;
+    }
+  }
+
+  interface Tee {
+
+    String getS();
+    Bar getBar();
+  }
+
+  static class TeeImpl implements Tee {
+
+    final String s;
+    @Inject Bar bar;
+
+    @Inject
+    TeeImpl(@Inject("s") String s) {
+      this.s = s;
+    }
+
+    public String getS() {
+      return s;
+    }
+
+    public Bar getBar() {
+      return bar;
+    }
+  }
+
+  public void testCircularlyDependentConstructors() {
+    ContainerBuilder builder = new ContainerBuilder();
+    builder
+        .factory(A.class, AImpl.class)
+        .factory(B.class, BImpl.class);
+
+    Container container = builder.create(false);
+    A a = container.inject(AImpl.class);
+    assertNotNull(a.getB().getA());
+  }
+
+  interface A {
+    B getB();
+  }
+
+  @Scoped(SINGLETON)
+  static class AImpl implements A {
+    final B b;
+    @Inject public AImpl(B b) {
+      this.b = b;
+    }
+    public B getB() {
+      return b;
+    }
+  }
+
+  interface B {
+    A getA();
+  }
+
+  static class BImpl implements B {
+    final A a;
+    @Inject public BImpl(A a) {
+      this.a = a;
+    }
+    public A getA() {
+      return a;
+    }
+  }
+
+  public void testInjectStatics() {
+    Container c = new ContainerBuilder()
+        .constant("s", "test")
+        .constant("i", 5)
+        .injectStatics(Static.class)
+        .create(false);
+
+    assertEquals("test", Static.s);
+    assertEquals(5, Static.i);
+  }
+
+  static class Static {
+
+    @Inject("i") static int i;
+
+    static String s;
+
+    @Inject("s") static void setS(String s) {
+      Static.s = s;
+    }
+  }
+}
diff --git a/test/com/google/inject/FactoryTest.java b/test/com/google/inject/FactoryTest.java
new file mode 100644
index 0000000000..7356fd60a6
--- /dev/null
+++ b/test/com/google/inject/FactoryTest.java
@@ -0,0 +1,105 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class FactoryTest extends TestCase {
+
+  public void testInjection() throws Exception {
+    ContainerBuilder cb = new ContainerBuilder();
+
+    // Called from getInstance().
+    cb.factory(Foo.class, createFactory(Foo.class, "default", null));
+
+    // Called during singleton loading.
+    cb.factory(Bar.class, "fooBar",
+        createFactory(Bar.class, "fooBar", null), Scope.SINGLETON);
+
+    cb.factory(Tee.class, "tee1",
+        createFactory(Tee.class, "tee1",
+            Bar.class.getDeclaredConstructor(Tee.class)));
+
+    cb.factory(Tee.class, "tee2",
+        createFactory(Tee.class, "tee2",
+            Bar.class.getDeclaredField("tee2")));
+
+    final Method execute = Tee.class.getDeclaredMethod(
+        "execute", Bob.class, Bob.class);
+    cb.factory(Bob.class, "bob1",
+        createFactory(Bob.class, "bob1", execute));
+    cb.factory(Bob.class, "bob2",
+        createFactory(Bob.class, "bob2", execute));
+
+    Container c = cb.create(true);
+
+    Foo foo = c.getInstance(Foo.class);
+
+    assertNotNull(foo.bar);
+    assertNotNull(foo.bar.tee1);
+    assertNotNull(foo.bar.tee2);
+    assertNotNull(foo.bar.tee1.bob1);
+    assertNotNull(foo.bar.tee1.bob2);
+    assertNotNull(foo.bar.tee2.bob1);
+    assertNotNull(foo.bar.tee2.bob2);
+  }
+
+  <T> Factory<T> createFactory(final Class<T> type, final String name,
+      final Member expectedMember) {
+    return new Factory<T>() {
+      public T create(Context context) throws Exception {
+        assertEquals(expectedMember, context.getMember());
+        assertEquals(name, context.getName());
+        assertEquals(type, context.getType());
+        return context.getContainer().inject(type);
+      }
+    };
+  }
+
+  static class Foo {
+    final Bar bar;
+    @Inject("fooBar") Foo(Bar bar) {
+      this.bar = bar;
+    }
+  }
+
+  static class Bar {
+    @Inject("tee2") Tee tee2;
+    final Tee tee1;
+    @Inject("tee1") Bar(Tee tee1) {
+      this.tee1 = tee1;
+    }
+  }
+
+  static class Tee {
+    Bob bob1, bob2;
+    @Inject void execute(
+        @Inject("bob1") Bob bob1,
+        @Inject("bob2") Bob bob2) {
+      this.bob1 = bob1;
+      this.bob2 = bob2;
+    }
+  }
+
+  static class Bob {}
+}
diff --git a/test/com/google/inject/NotRequiredTest.java b/test/com/google/inject/NotRequiredTest.java
new file mode 100644
index 0000000000..2f4f7257f3
--- /dev/null
+++ b/test/com/google/inject/NotRequiredTest.java
@@ -0,0 +1,54 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import junit.framework.TestCase;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class NotRequiredTest extends TestCase {
+
+  public void testProvided() {
+    Container c = new ContainerBuilder()
+        .factory(Bar.class)
+        .create(false);
+    Foo foo = c.inject(Foo.class);
+    assertNotNull(foo.bar);
+    assertNotNull(foo.fromMethod);
+  }
+
+  public void testNotProvided() {
+    Container c = new ContainerBuilder()
+        .create(false);
+    Foo foo = c.inject(Foo.class);
+    assertNull(foo.bar);
+    assertNull(foo.fromMethod);
+  }
+
+  static class Foo {
+    @Inject(required=false) Bar bar;
+
+    Bar fromMethod;
+
+    @Inject(required=false) void setBar(Bar bar) {
+      fromMethod = bar;
+    }
+  }
+
+  static class Bar {}
+}
diff --git a/test/com/google/inject/SpringTest.java b/test/com/google/inject/SpringTest.java
new file mode 100644
index 0000000000..859eaae0d2
--- /dev/null
+++ b/test/com/google/inject/SpringTest.java
@@ -0,0 +1,194 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import static com.google.inject.Scope.*;
+
+import junit.framework.TestCase;
+
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.factory.config.ConstructorArgumentValues;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+
+import java.util.concurrent.Callable;
+
+/**
+ * Performance test.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class SpringTest extends TestCase {
+
+  static final Callable<Foo> springFactory = new Callable<Foo>() {
+
+    final DefaultListableBeanFactory beanFactory;
+
+    {
+      beanFactory = new DefaultListableBeanFactory();
+
+      RootBeanDefinition tee = new RootBeanDefinition(TeeImpl.class, true);
+      tee.setLazyInit(true);
+      ConstructorArgumentValues teeValues = new ConstructorArgumentValues();
+      teeValues.addGenericArgumentValue("test");
+      tee.setConstructorArgumentValues(teeValues);
+
+      RootBeanDefinition bar = new RootBeanDefinition(BarImpl.class, false);
+      ConstructorArgumentValues barValues = new ConstructorArgumentValues();
+      barValues.addGenericArgumentValue(new RuntimeBeanReference("tee"));
+      barValues.addGenericArgumentValue(5);
+      bar.setConstructorArgumentValues(barValues);
+
+      RootBeanDefinition foo = new RootBeanDefinition(Foo.class, false);
+      MutablePropertyValues fooValues = new MutablePropertyValues();
+      fooValues.addPropertyValue("i", 5);
+      fooValues.addPropertyValue("bar", new RuntimeBeanReference("bar"));
+      fooValues.addPropertyValue("copy", new RuntimeBeanReference("bar"));
+      fooValues.addPropertyValue("s", "test");
+      foo.setPropertyValues(fooValues);
+
+      beanFactory.registerBeanDefinition("foo", foo);
+      beanFactory.registerBeanDefinition("bar", bar);
+      beanFactory.registerBeanDefinition("tee", tee);
+    }
+
+    public Foo call() throws Exception {
+      return (Foo) beanFactory.getBean("foo");
+    }
+  };
+
+  static final Callable<Foo> juiceFactory = new Callable<Foo>() {
+
+    final Container container = new ContainerBuilder()
+        .factory(Tee.class, TeeImpl.class)
+        .factory(Bar.class, BarImpl.class)
+        .factory(Foo.class, Foo.class)
+        .constant("i", 5)
+        .constant("s", "test")
+        .create(false);
+
+    public Foo call() throws Exception {
+      return container.inject(Foo.class);
+    }
+  };
+
+  static void validate(Callable<Foo> t) throws Exception {
+    Foo foo = t.call();
+    assertEquals(5, foo.i);
+    assertEquals("test", foo.s);
+    assertSame(foo.bar.getTee(), foo.copy.getTee());
+    assertEquals(5, foo.bar.getI());
+    assertEquals("test", foo.bar.getTee().getS());
+  }
+
+  public static void main(String[] args) throws Exception {
+    validate(springFactory);
+    validate(springFactory);
+    validate(juiceFactory);
+    validate(juiceFactory);
+
+    int count = 100000;
+    for (int i2 = 0; i2 < 10; i2++) {
+      long time = System.currentTimeMillis();
+      for (int i = 0; i < count; i++)
+        springFactory.call();
+      time = System.currentTimeMillis() - time;
+      System.err.println("Spring: " + count * 1000 / time + "/s");
+
+      time = System.currentTimeMillis();
+      for (int i = 0; i < count; i++)
+        juiceFactory.call();
+      time = System.currentTimeMillis() - time;
+      System.err.println("Juice:  " + count * 1000 / time + "/s");
+    }
+  }
+
+  public static class Foo {
+
+    Bar bar;
+    Bar copy;
+    String s;
+    int i;
+
+    @Inject("i")
+    public void setI(int i) {
+      this.i = i;
+    }
+
+    @Inject
+    public void setBar(Bar bar) {
+      this.bar = bar;
+    }
+
+    @Inject
+    public void setCopy(Bar copy) {
+      this.copy = copy;
+    }
+
+    @Inject("s")
+    public void setS(String s) {
+      this.s = s;
+    }
+  }
+
+  interface Bar {
+
+    Tee getTee();
+    int getI();
+  }
+
+  public static class BarImpl implements Bar {
+
+    final int i;
+    final Tee tee;
+
+    @Inject
+    public BarImpl(Tee tee, @Inject("i") int i) {
+      this.tee = tee;
+      this.i = i;
+    }
+
+    public Tee getTee() {
+      return tee;
+    }
+
+    public int getI() {
+      return i;
+    }
+  }
+
+  interface Tee {
+
+    String getS();
+  }
+
+  @Scoped(SINGLETON)
+  public static class TeeImpl implements Tee {
+
+    final String s;
+
+    @Inject
+    public TeeImpl(@Inject("s") String s) {
+      this.s = s;
+    }
+
+    public String getS() {
+      return s;
+    }
+  }
+}
diff --git a/test/com/google/inject/StaticInjectionTest.java b/test/com/google/inject/StaticInjectionTest.java
new file mode 100644
index 0000000000..e14719bca4
--- /dev/null
+++ b/test/com/google/inject/StaticInjectionTest.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import junit.framework.TestCase;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class StaticInjectionTest extends TestCase {
+
+  public void testInjectStatics() {
+    Container c = new ContainerBuilder()
+        .constant("s", "test")
+        .constant("i", 5)
+        .injectStatics(StaticInjectionTest.Static.class)
+        .create(false);
+
+    assertEquals("test", StaticInjectionTest.Static.s);
+    assertEquals(5, StaticInjectionTest.Static.i);
+  }
+
+  static class Static {
+
+    @Inject("i") static int i;
+
+    static String s;
+
+    @Inject("s") static void setS(String s) {
+      StaticInjectionTest.Static.s = s;
+    }
+  }
+}
diff --git a/test/com/google/inject/SuperclassTest.java b/test/com/google/inject/SuperclassTest.java
new file mode 100644
index 0000000000..3ec47c07bc
--- /dev/null
+++ b/test/com/google/inject/SuperclassTest.java
@@ -0,0 +1,52 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject;
+
+import junit.framework.TestCase;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class SuperclassTest extends TestCase {
+
+  public void testSuperclassInjection() {
+    ContainerBuilder builder = new ContainerBuilder();
+    builder.factory(Foo.class);
+    Container container = builder.create(false);
+    Sub sub = container.inject(Sub.class);
+    sub = container.inject(Sub.class);
+    sub = container.inject(Sub.class);
+    sub = container.inject(Sub.class);
+    sub = container.inject(Sub.class);
+    assertNotNull(sub.field);
+    assertNotNull(sub.fromMethod);
+  }
+
+  static abstract class Super {
+    @Inject Foo field;
+
+    Foo fromMethod;
+    @Inject void setC(Foo foo) {
+      fromMethod = foo;
+    }
+  }
+
+  static class Sub extends Super {
+  }
+
+  static class Foo {}
+}
diff --git a/test/com/google/inject/util/FinalizableReferenceQueueTest.java b/test/com/google/inject/util/FinalizableReferenceQueueTest.java
new file mode 100644
index 0000000000..1b9e4eede7
--- /dev/null
+++ b/test/com/google/inject/util/FinalizableReferenceQueueTest.java
@@ -0,0 +1,53 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import junit.framework.TestCase;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class FinalizableReferenceQueueTest extends TestCase {
+
+  public void testFinalizeReferentCalled() {
+    MockReference reference = new MockReference();
+    reference.enqueue();
+    // wait up to 5s
+    for (int i = 0; i < 50; i++) {
+      if (reference.finalizeReferentCalled) {
+        return;
+      }
+      try {
+        Thread.sleep(10);
+      } catch (InterruptedException e) { /* ignore */ }
+    }
+    fail();
+  }
+
+  static class MockReference extends FinalizableWeakReference<Object> {
+
+    boolean finalizeReferentCalled;
+
+    MockReference() {
+      super(new Object());
+    }
+
+    public void finalizeReferent() {
+      finalizeReferentCalled = true;
+    }
+  }
+}
diff --git a/test/com/google/inject/util/ReferenceCacheTest.java b/test/com/google/inject/util/ReferenceCacheTest.java
new file mode 100644
index 0000000000..63afa834ea
--- /dev/null
+++ b/test/com/google/inject/util/ReferenceCacheTest.java
@@ -0,0 +1,176 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import static com.google.inject.util.ReferenceType.SOFT;
+import static com.google.inject.util.ReferenceType.STRONG;
+import static com.google.inject.util.ReferenceType.WEAK;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class ReferenceCacheTest extends TestCase {
+
+  public void testCancellation() {
+    final AtomicInteger count = new AtomicInteger();
+
+    final ReferenceCache rc = new ReferenceCache() {
+      protected Object create(Object key) {
+        try {
+          cancel();
+          Thread.sleep(10);
+          return null;
+        } catch (InterruptedException e) {
+          throw new RuntimeException(e);
+        }
+      }
+    };
+
+    Thread[] threads = new Thread[3];
+    for (int i = 0; i < 3; i++) {
+      threads[i] = new Thread() {
+        public void run() {
+          try {
+            rc.get("foo");
+            fail();
+          } catch (CancellationException e) {
+            count.incrementAndGet();
+          }
+        }
+      };
+    }
+    for (int i = 0; i < 3; i++) {
+      threads[i].start();
+    }
+    for (int i = 0; i < 3; i++) {
+      try {
+        threads[i].join();
+      } catch (InterruptedException e) {
+        throw new RuntimeException(e);
+      }
+    }
+
+    assertEquals(threads.length, count.get());
+  }
+
+  public void testApply() {
+    ReferenceMap<String, Integer> cache = ReferenceCache.of(
+        WEAK, WEAK, new SomeFunction());
+    assertEquals(Integer.valueOf(1), cache.get("foo"));
+    assertEquals(Integer.valueOf(1), cache.get("foo"));
+    assertEquals(Integer.valueOf(2), cache.get("bar"));
+    assertEquals(Integer.valueOf(1), cache.get("foo"));
+    assertEquals(Integer.valueOf(3), cache.get("baz"));
+  }
+
+  public void testSleepConcurrency() throws InterruptedException {
+    ReferenceMap<String, Integer> cache = ReferenceCache.of(
+        WEAK, WEAK, new SleepFunction());
+    assertConcurrency(cache, false);
+  }
+
+  public void testBusyConcurrency() throws InterruptedException {
+    ReferenceMap<String, Integer> cache = ReferenceCache.of(
+        WEAK, WEAK, new BusyFunction());
+    assertConcurrency(cache, false);
+  }
+
+  public void testFastConcurrency() throws InterruptedException {
+    ReferenceMap<String, Integer> cache = ReferenceCache.of(
+        WEAK, WEAK, new SomeFunction());
+    assertConcurrency(cache, false);
+  }
+
+  public void testSleepCanonical() throws InterruptedException {
+    ReferenceMap<String, Integer> cache = ReferenceCache.of(
+        STRONG, SOFT, new SleepFunction());
+    assertConcurrency(cache, true);
+  }
+
+  public void testBusyCanonical() throws InterruptedException {
+    ReferenceMap<String, Integer> cache = ReferenceCache.of(
+        STRONG, SOFT, new BusyFunction());
+    assertConcurrency(cache, true);
+  }
+
+  public void testFastCanonical() throws InterruptedException {
+    ReferenceMap<String, Integer> cache = ReferenceCache.of(
+        STRONG, SOFT, new SomeFunction());
+    assertConcurrency(cache, true);
+  }
+
+  private static void assertConcurrency(
+      final ReferenceMap<String, Integer> cache,
+      final boolean simulateAliasing) throws InterruptedException {
+    final int n = 20;
+    final CountDownLatch startSignal = new CountDownLatch(1);
+    final CountDownLatch doneSignal = new CountDownLatch(n);
+    for (int i = 0; i < n; i++) {
+      new Thread() {
+        public void run() {
+          try {
+            startSignal.await();
+            for (int j = 0; j < n; j++) {
+              cache.get(simulateAliasing ? new String("foo") : "foo");
+            }
+            doneSignal.countDown();
+          } catch (InterruptedException ignored) {}
+        }
+      }.start();
+    }
+
+    startSignal.countDown();
+    doneSignal.await();
+    assertEquals(Integer.valueOf(1), cache.get("foo"));
+    assertEquals(Integer.valueOf(2), cache.get("bar"));
+  }
+
+  private static class SomeFunction implements Function<String, Integer> {
+    private int numApplies = 0;
+    public Integer apply(String s) {
+      return ++numApplies;
+    }
+  }
+
+  private static class SleepFunction implements Function<String, Integer> {
+    private int numApplies = 0;
+    public Integer apply(String s) {
+      try {
+        Thread.sleep(100);
+      } catch (InterruptedException e) {
+        throw new RuntimeException(e);
+      }
+      return ++numApplies;
+    }
+  }
+
+  private static class BusyFunction implements Function<String, Integer> {
+    private int numApplies = 0;
+    public Integer apply(String s) {
+      for (int i = 0; i < 1000; i++) {
+        Math.sqrt(i);
+      }
+      return ++numApplies;
+    }
+  }
+}
diff --git a/test/com/google/inject/util/ReferenceMapTest.java b/test/com/google/inject/util/ReferenceMapTest.java
new file mode 100644
index 0000000000..7134432412
--- /dev/null
+++ b/test/com/google/inject/util/ReferenceMapTest.java
@@ -0,0 +1,131 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import static com.google.inject.util.ReferenceType.*;
+import com.google.inject.util.ReferenceMap;
+
+import junit.framework.TestCase;
+
+import java.lang.ref.Reference;
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Tests for {@link ReferenceMap}.
+ *
+ * @author crazybob@google.com (Bob Lee)
+ * @author mbostock@google.com (Mike Bostock)
+ */
+public class ReferenceMapTest extends TestCase {
+
+  private enum CleanupMode {
+    ENQUEUE_KEY, ENQUEUE_VALUE, GC;
+  }
+
+
+
+  public void testValueCleanupWithWeakKey() {
+    ReferenceMap map = new ReferenceMap(WEAK, STRONG);
+    map.put(new Object(), new Object());
+    assertCleanup(map, CleanupMode.GC);
+  }
+
+  /*
+   * commented out because this test is undependable
+  public void testValueCleanupWithSoftKey() {
+    ReferenceMap map = new ReferenceMap(SOFT, STRONG);
+    map.put(new Object(), new Object());
+    assertCleanup(map, CleanupMode.GC);
+  }
+  */
+
+  public void testKeyCleanupWithWeakValue() {
+    ReferenceMap map = new ReferenceMap(STRONG, WEAK);
+    map.put(new Object(), new Object());
+    assertCleanup(map, CleanupMode.GC);
+  }
+
+  /*
+   * commented out because this test is undependable
+  public void testKeyCleanupWithSoftValue() {
+    ReferenceMap map = new ReferenceMap(STRONG, SOFT);
+    map.put(new Object(), new Object());
+    assertCleanup(map, CleanupMode.GC);
+  }
+  */
+
+  public void testInternedValueCleanupWithWeakKey() {
+    ReferenceMap map = new ReferenceMap(WEAK, STRONG);
+    map.put(5, "foo");
+    assertCleanup(map, CleanupMode.ENQUEUE_KEY);
+  }
+
+  public void testInternedValueCleanupWithSoftKey() {
+    ReferenceMap map = new ReferenceMap(SOFT, STRONG);
+    map.put(5, "foo");
+    assertCleanup(map, CleanupMode.ENQUEUE_KEY);
+  }
+
+  public void testInternedKeyCleanupWithWeakValue() {
+    ReferenceMap map = new ReferenceMap(STRONG, WEAK);
+    map.put(5, "foo");
+    assertCleanup(map, CleanupMode.ENQUEUE_VALUE);
+  }
+
+  public void testInternedKeyCleanupWithSoftValue() {
+    ReferenceMap map = new ReferenceMap(STRONG, SOFT);
+    map.put(5, "foo");
+    assertCleanup(map, CleanupMode.ENQUEUE_VALUE);
+  }
+
+  private static void assertCleanup(ReferenceMap<?, ?> map,
+      CleanupMode mode) {
+    assertEquals(1, map.delegate.size());
+
+    switch (mode) {
+      case ENQUEUE_KEY: {
+        ConcurrentMap delegate = map.delegate;
+        Iterator keyIterator = delegate.keySet().iterator();
+        Reference reference = ((Reference) keyIterator.next());
+        reference.enqueue();
+        break;
+      }
+      case ENQUEUE_VALUE: {
+        ConcurrentMap delegate = map.delegate;
+        Iterator valueIterator = delegate.values().iterator();
+        Reference reference = ((Reference) valueIterator.next());
+        reference.enqueue();
+        break;
+      }
+    }
+
+    // wait up to 5s
+    for (int i = 0; i < 500; i++) {
+      if (mode == CleanupMode.GC) {
+        System.gc();
+      }
+      if (map.size() == 0) {
+        return;
+      }
+      try {
+        Thread.sleep(10);
+      } catch (InterruptedException e) { /* ignore */ }
+    }
+    fail();
+  }
+}
diff --git a/test/com/google/inject/util/ReferenceMapTestSuite.java b/test/com/google/inject/util/ReferenceMapTestSuite.java
new file mode 100644
index 0000000000..05d859db12
--- /dev/null
+++ b/test/com/google/inject/util/ReferenceMapTestSuite.java
@@ -0,0 +1,261 @@
+/**
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.util;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author crazybob@google.com (Bob Lee)
+ */
+public class ReferenceMapTestSuite {
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    Set<ReferenceType> referenceTypes =
+        new HashSet<ReferenceType>();
+    referenceTypes.addAll(Arrays.asList(ReferenceType.values()));
+    referenceTypes.remove(ReferenceType.PHANTOM);
+
+    // create test cases for each key and value type.
+    for (Method method : MapTest.class.getMethods()) {
+      String name = method.getName();
+      if (name.startsWith("test")) {
+        for (ReferenceType keyType : referenceTypes) {
+          for (ReferenceType valueType : referenceTypes) {
+            suite.addTest(new MapTest(name, keyType, valueType));
+          }
+        }
+      }
+    }
+
+    return suite;
+  }
+
+  public static class MapTest extends TestCase {
+
+    ReferenceType keyType;
+    ReferenceType valueType;
+
+    public MapTest(String name, ReferenceType keyType,
+        ReferenceType valueType) {
+      super(name);
+      this.keyType = keyType;
+      this.valueType = valueType;
+    }
+
+    public String getName() {
+      return super.getName()
+          + "For"
+          + Strings.capitalize(keyType.toString().toLowerCase())
+          + Strings.capitalize(valueType.toString().toLowerCase());
+    }
+
+    ReferenceMap newInstance() {
+      return new ReferenceMap(keyType, valueType);
+    }
+
+    public void testContainsKey() {
+      ReferenceMap map = newInstance();
+      Object k = "key";
+      map.put(k, "value");
+      assertTrue(map.containsKey(k));
+    }
+
+    public void testClear() {
+      ReferenceMap map = newInstance();
+      String k = "key";
+      map.put(k, "value");
+      assertFalse(map.isEmpty());
+      map.clear();
+      assertTrue(map.isEmpty());
+      assertNull(map.get(k));
+    }
+
+    public void testKeySet() {
+      ReferenceMap map = newInstance();
+      map.put("a", "foo");
+      map.put("b", "foo");
+      Set expected = new HashSet(Arrays.asList("a", "b"));
+      assertEquals(expected, map.keySet());
+    }
+
+    public void testValues() {
+      ReferenceMap map = newInstance();
+      map.put("a", "1");
+      map.put("b", "2");
+      Set expected = new HashSet(Arrays.asList("1", "2"));
+      Set actual = new HashSet();
+      actual.addAll(map.values());
+      assertEquals(expected, actual);
+    }
+
+    public void testPutIfAbsent() {
+      ReferenceMap map = newInstance();
+      map.putIfAbsent("a", "1");
+      assertEquals("1", map.get("a"));
+      map.putIfAbsent("a", "2");
+      assertEquals("1", map.get("a"));
+    }
+
+    public void testReplace() {
+      ReferenceMap map = newInstance();
+      map.put("a", "1");
+      map.replace("a", "2", "2");
+      assertEquals("1", map.get("a"));
+      map.replace("a", "1", "2");
+      assertEquals("2", map.get("a"));
+    }
+
+    public void testContainsValue() {
+      ReferenceMap map = newInstance();
+      Object v = "value";
+      map.put("key", v);
+      assertTrue(map.containsValue(v));
+    }
+
+    public void testEntrySet() {
+      final ReferenceMap map = newInstance();
+      map.put("a", "1");
+      map.put("b", "2");
+      Set expected = new HashSet(Arrays.asList(
+        map.new Entry("a", "1"),
+        map.new Entry("b", "2")
+      ));
+      assertEquals(expected, map.entrySet());
+    }
+
+    public void testPutAll() {
+      ReferenceMap map = newInstance();
+      Object k = "key";
+      Object v = "value";
+      map.putAll(Collections.singletonMap(k, v));
+      assertSame(v, map.get(k));
+    }
+
+    public void testRemove() {
+      ReferenceMap map = newInstance();
+      Object k = "key";
+      map.put(k, "value");
+      map.remove(k);
+      assertFalse(map.containsKey(k));
+    }
+
+    public void testPutGet() {
+      final Object k = new Object();
+      final Object v = new Object();
+      ReferenceMap map = newInstance();
+      map.put(k, v);
+      assertEquals(1, map.size());
+      assertSame(v, map.get(k));
+      assertEquals(1, map.size());
+      assertNull(map.get(new Object()));
+    }
+
+    public void testCreate() {
+      final Object k = new Object();
+      final Object v = new Object();
+      ReferenceMap map = new ReferenceCache(
+          keyType, valueType) {
+        @Override protected Object create(Object key) {
+          return key == k ? v : null;
+        }
+      };
+      assertEquals(0, map.size());
+      assertSame(v, map.get(k));
+      assertSame(v, map.get(k));
+      assertEquals(1, map.size());
+
+      try {
+        // create can't return null.
+        map.get(new Object());
+        fail();
+      } catch (NullPointerException e) {}
+    }
+
+    public void testReferenceMapSerialization() throws IOException,
+        ClassNotFoundException {
+      Map map = newInstance();
+      map.put(Key.FOO, Value.FOO);
+      map = (Map) serializeAndDeserialize(map);
+      map.put(Key.BAR, Value.BAR);
+      assertSame(Value.FOO, map.get(Key.FOO));
+      assertSame(Value.BAR, map.get(Key.BAR));
+      assertNull(map.get(Key.TEE));
+    }
+
+    static class MockReferenceCache extends ReferenceCache {
+
+      int count;
+
+      public MockReferenceCache(ReferenceType keyReferenceType,
+          ReferenceType valueReferenceType) {
+        super(keyReferenceType, valueReferenceType);
+      }
+
+      protected Object create(Object key) {
+        count++;
+        return Value.valueOf(((Key) key).toString());
+      }
+    }
+
+    public void testReferenceCacheSerialization() throws IOException,
+        ClassNotFoundException {
+      MockReferenceCache map = new MockReferenceCache(keyType, valueType);
+      assertSame(Value.FOO, map.get(Key.FOO));
+      assertSame(Value.BAR, map.get(Key.BAR));
+      map = (MockReferenceCache) serializeAndDeserialize(map);
+      assertSame(Value.FOO, map.get(Key.FOO));
+      assertSame(Value.BAR, map.get(Key.BAR));
+      assertSame(Value.TEE, map.get(Key.TEE));
+      assertEquals(3, map.count);
+    }
+
+    public Object serializeAndDeserialize(Object o) throws IOException,
+        ClassNotFoundException {
+      ByteArrayOutputStream out = new ByteArrayOutputStream();
+      new ObjectOutputStream(out).writeObject(o);
+      return new ObjectInputStream(new ByteArrayInputStream(out.toByteArray()))
+          .readObject();
+    }
+  }
+
+  /**
+   * Enums conveniently maintain instance identity across serialization.
+   */
+  enum Key {
+    FOO, BAR, TEE;
+  }
+
+  enum Value {
+    FOO, BAR, TEE;
+  }
+}
\ No newline at end of file