diff --git a/.gitignore b/.gitignore
index 4b9f8a8..1589896 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,3 @@
 .DS_Store
 /test-system
 /test-config
-.jps-build-data
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 25d4282..890698c 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -41,7 +41,6 @@
     <option name="DEPRECATION" value="false" />
   </component>
   <component name="JavacSettings">
-    <option name="DEPRECATION" value="false" />
     <option name="MAXIMUM_HEAP_SIZE" value="400" />
   </component>
 </project>
diff --git a/.idea/copyright/aosp.xml b/.idea/copyright/aosp.xml
deleted file mode 100644
index 077aec6..0000000
--- a/.idea/copyright/aosp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<component name="CopyrightManager">
-  <copyright>
-    <option name="notice" value="Copyright (C) &amp;#36;today.year The Android Open Source Project&#10;&#10;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);&#10;you may not use this file except in compliance with the License.&#10;You may obtain a copy of the License at&#10;&#10;     http://www.apache.org/licenses/LICENSE-2.0&#10;&#10;Unless required by applicable law or agreed to in writing, software&#10;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&#10;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&#10;See the License for the specific language governing permissions and&#10;limitations under the License." />
-    <option name="keyword" value="Copyright" />
-    <option name="allowReplaceKeyword" value="" />
-    <option name="myName" value="aosp" />
-    <option name="myLocal" value="true" />
-  </copyright>
-</component>
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
index 7d505fe..b84d8ef 100644
--- a/.idea/copyright/profiles_settings.xml
+++ b/.idea/copyright/profiles_settings.xml
@@ -1,8 +1,6 @@
 <component name="CopyrightManager">
-  <settings default="aosp">
-    <module2copyright>
-      <element module="aosp-code" copyright="aosp" />
-    </module2copyright>
+  <settings default="apache 2 license">
+    <module2copyright />
     <LanguageOptions name="__TEMPLATE__">
       <option name="addBlankAfter" value="false" />
     </LanguageOptions>
diff --git a/.idea/dictionaries/adt.xml b/.idea/dictionaries/adt.xml
deleted file mode 100644
index e25bf25..0000000
--- a/.idea/dictionaries/adt.xml
+++ /dev/null
@@ -1,321 +0,0 @@
-<component name="ProjectDictionaryState">
-  <dictionary name="adt">
-    <words>
-      <w>&amp;amp</w>
-      <w>aapt</w>
-      <w>aarrggbb</w>
-      <w>accessors</w>
-      <w>actionbar</w>
-      <w>adb's</w>
-      <w>adbhost</w>
-      <w>addon</w>
-      <w>addons</w>
-      <w>addr</w>
-      <w>aidl</w>
-      <w>aload</w>
-      <w>androiddebugkey</w>
-      <w>anim</w>
-      <w>aosp</w>
-      <w>apkbuilder</w>
-      <w>apos</w>
-      <w>appname</w>
-      <w>areturn</w>
-      <w>argb</w>
-      <w>argv</w>
-      <w>armeabi</w>
-      <w>ast's</w>
-      <w>async</w>
-      <w>attrs</w>
-      <w>autofocus</w>
-      <w>automator</w>
-      <w>avd's</w>
-      <w>avdname</w>
-      <w>backfill</w>
-      <w>basename</w>
-      <w>basenames</w>
-      <w>bicubic</w>
-      <w>bilinear</w>
-      <w>bindir</w>
-      <w>bipush</w>
-      <w>bitcodelib</w>
-      <w>bitmask</w>
-      <w>blockquote</w>
-      <w>bluetooth</w>
-      <w>booleans</w>
-      <w>bootloader</w>
-      <w>borderless</w>
-      <w>bytecode</w>
-      <w>calloc</w>
-      <w>charsets</w>
-      <w>checkable</w>
-      <w>chksum</w>
-      <w>classfile</w>
-      <w>classname</w>
-      <w>classpathentry</w>
-      <w>clinit</w>
-      <w>clipart</w>
-      <w>closeables</w>
-      <w>codenames</w>
-      <w>combineaccessrules</w>
-      <w>compat</w>
-      <w>configurables</w>
-      <w>conv</w>
-      <w>crlf</w>
-      <w>crypto</w>
-      <w>cygpath</w>
-      <w>cygwin</w>
-      <w>dalvik</w>
-      <w>ddmlib</w>
-      <w>ddms</w>
-      <w>debuggable</w>
-      <w>densityless</w>
-      <w>designtime</w>
-      <w>dest</w>
-      <w>dexdump</w>
-      <w>digester</w>
-      <w>dimen</w>
-      <w>dirname</w>
-      <w>disp</w>
-      <w>donottranslate</w>
-      <w>dpad</w>
-      <w>drawables</w>
-      <w>dropdown</w>
-      <w>dumpsys</w>
-      <w>eabi</w>
-      <w>easymock</w>
-      <w>emdash</w>
-      <w>endian</w>
-      <w>enqueued</w>
-      <w>errno</w>
-      <w>executables</w>
-      <w>expectedly</w>
-      <w>filenames</w>
-      <w>filepath</w>
-      <w>fixme</w>
-      <w>fqcn</w>
-      <w>framebuffer</w>
-      <w>frameworkdir</w>
-      <w>froyo</w>
-      <w>fwvga</w>
-      <w>gbdserver</w>
-      <w>gdbserver</w>
-      <w>genkey</w>
-      <w>getenv</w>
-      <w>getfield</w>
-      <w>getprop</w>
-      <w>getstatic</w>
-      <w>globbing</w>
-      <w>goto</w>
-      <w>gradle</w>
-      <w>guide's</w>
-      <w>guillemets</w>
-      <w>hardcode</w>
-      <w>hardcoding</w>
-      <w>hashcode</w>
-      <w>hdpi</w>
-      <w>holo</w>
-      <w>horiz</w>
-      <w>httpclient</w>
-      <w>hvga</w>
-      <w>iaload</w>
-      <w>iastore</w>
-      <w>iconst</w>
-      <w>inflater</w>
-      <w>infos</w>
-      <w>inlined</w>
-      <w>innerclass</w>
-      <w>inputfile</w>
-      <w>insn</w>
-      <w>instantiatable</w>
-      <w>instrumentations</w>
-      <w>intelli</w>
-      <w>interpolator</w>
-      <w>ints</w>
-      <w>invokestatic</w>
-      <w>invokevirtual</w>
-      <w>ipsum</w>
-      <w>ireturn</w>
-      <w>iterable</w>
-      <w>jarfile</w>
-      <w>jarlist</w>
-      <w>jarpath</w>
-      <w>javabuilder</w>
-      <w>javanature</w>
-      <w>jdwp</w>
-      <w>jpeg</w>
-      <w>junit</w>
-      <w>keepclasseswithmembernames</w>
-      <w>keepclasseswithmembers</w>
-      <w>keygen</w>
-      <w>keypass</w>
-      <w>keysexposed</w>
-      <w>keyshidden</w>
-      <w>keyssoft</w>
-      <w>keystore</w>
-      <w>keytool</w>
-      <w>kxml</w>
-      <w>landroid</w>
-      <w>layoublib</w>
-      <w>layoutlib</w>
-      <w>layoutlibs</w>
-      <w>layoutopt</w>
-      <w>layoutrules</w>
-      <w>ldltr</w>
-      <w>ldpi</w>
-      <w>ldrtl</w>
-      <w>levenshtein</w>
-      <w>lexing</w>
-      <w>libc</w>
-      <w>licensable</w>
-      <w>licensor</w>
-      <w>linenumber</w>
-      <w>ljava</w>
-      <w>lombok</w>
-      <w>lookups</w>
-      <w>lookupswitch</w>
-      <w>looper</w>
-      <w>lorem</w>
-      <w>lpackage</w>
-      <w>makefile</w>
-      <w>malloc</w>
-      <w>manifestmerger</w>
-      <w>manifmerger</w>
-      <w>mdpi</w>
-      <w>memalign</w>
-      <w>minsdk</w>
-      <w>mipmap</w>
-      <w>mkdirs</w>
-      <w>monospace</w>
-      <w>moreunit</w>
-      <w>multimap</w>
-      <w>multipart</w>
-      <w>multitouch</w>
-      <w>nano</w>
-      <w>nativelib</w>
-      <w>navexposed</w>
-      <w>navhidden</w>
-      <w>ninepatch</w>
-      <w>nodpi</w>
-      <w>nokeys</w>
-      <w>nonav</w>
-      <w>notlong</w>
-      <w>notnight</w>
-      <w>notouch</w>
-      <w>nullable</w>
-      <w>nulling</w>
-      <w>nullness</w>
-      <w>objectweb</w>
-      <w>opcode</w>
-      <w>opcodes</w>
-      <w>pathname</w>
-      <w>picasa</w>
-      <w>plugin's</w>
-      <w>png's</w>
-      <w>prebuilts</w>
-      <w>prefs</w>
-      <w>preload</w>
-      <w>prepending</w>
-      <w>printf</w>
-      <w>println</w>
-      <w>proc</w>
-      <w>prog</w>
-      <w>progdir</w>
-      <w>programmatically</w>
-      <w>proguard</w>
-      <w>prolog</w>
-      <w>qemu</w>
-      <w>quickfix</w>
-      <w>quickstart</w>
-      <w>qvga</w>
-      <w>rasterize</w>
-      <w>rasterizer</w>
-      <w>realloc</w>
-      <w>recurse</w>
-      <w>reflow</w>
-      <w>reformats</w>
-      <w>reimplement</w>
-      <w>renderscript</w>
-      <w>reparse</w>
-      <w>resampling</w>
-      <w>resizability</w>
-      <w>resized</w>
-      <w>rrggbb</w>
-      <w>sccs</w>
-      <w>screenshot</w>
-      <w>scroller</w>
-      <w>scrollview</w>
-      <w>sdcard</w>
-      <w>sdk's</w>
-      <w>sdkbin</w>
-      <w>sdklib</w>
-      <w>sdkman</w>
-      <w>sdks</w>
-      <w>serialnumber</w>
-      <w>severities</w>
-      <w>sparsearray</w>
-      <w>sqrt</w>
-      <w>stacktrace</w>
-      <w>stderr</w>
-      <w>stdout</w>
-      <w>stopship</w>
-      <w>storepass</w>
-      <w>storetype</w>
-      <w>styleable</w>
-      <w>subclassed</w>
-      <w>subclassing</w>
-      <w>subfolder</w>
-      <w>submenu</w>
-      <w>superset</w>
-      <w>sysdir</w>
-      <w>sysimg</w>
-      <w>targetsdk</w>
-      <w>testcase</w>
-      <w>testroot</w>
-      <w>testsuite</w>
-      <w>tmpdir</w>
-      <w>traceview</w>
-      <w>tuple</w>
-      <w>tvdpi</w>
-      <w>uiautomator</w>
-      <w>uname</w>
-      <w>unarchive</w>
-      <w>unary</w>
-      <w>uncapitalized</w>
-      <w>uncompressing</w>
-      <w>unescape</w>
-      <w>unescaping</w>
-      <w>unformatted</w>
-      <w>unlocalized</w>
-      <w>unmanages</w>
-      <w>unregister</w>
-      <w>unregisters</w>
-      <w>userdata</w>
-      <w>versioncode</w>
-      <w>vert</w>
-      <w>viewport</w>
-      <w>vmsig</w>
-      <w>wakelock</w>
-      <w>wakelocks</w>
-      <w>wakeup</w>
-      <w>webkit</w>
-      <w>wikipedia</w>
-      <w>workdir</w>
-      <w>wqvga</w>
-      <w>writeable</w>
-      <w>wvga</w>
-      <w>xdpi</w>
-      <w>xerces</w>
-      <w>xfermode</w>
-      <w>xhdpi</w>
-      <w>xhigh</w>
-      <w>xlarge</w>
-      <w>xliff</w>
-      <w>xmlns</w>
-      <w>xxhdpi</w>
-      <w>xxhigh</w>
-      <w>ydpi</w>
-      <w>yyyy</w>
-      <w>zipalign</w>
-    </words>
-  </dictionary>
-</component>
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/idea_default.xml b/.idea/inspectionProfiles/idea_default.xml
index 52f7c31..b357b21 100644
--- a/.idea/inspectionProfiles/idea_default.xml
+++ b/.idea/inspectionProfiles/idea_default.xml
@@ -50,7 +50,7 @@
     <inspection_tool class="ConstantConditionalExpressionJS" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="ConstantConditions" enabled="true" level="WARNING" enabled_by_default="true">
       <scope name="runtime.classes" level="WARNING" enabled="false">
-        <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="true" />
+        <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="false" />
         <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="false" />
       </scope>
       <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="true" />
@@ -317,10 +317,6 @@
     <inspection_tool class="MethodNamesDifferOnlyByCase" enabled="true" level="WARNING" enabled_by_default="true" />
     <inspection_tool class="MethodOverloadsParentMethod" enabled="true" level="WARNING" enabled_by_default="true" />
     <inspection_tool class="MethodOverridesStaticMethod" enabled="true" level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="MissingOverrideAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
-      <option name="ignoreObjectMethods" value="true" />
-      <option name="ignoreAnonymousClassMethods" value="false" />
-    </inspection_tool>
     <inspection_tool class="MisspelledCompareTo" enabled="true" level="WARNING" enabled_by_default="true" />
     <inspection_tool class="MisspelledEquals" enabled="true" level="WARNING" enabled_by_default="true" />
     <inspection_tool class="MisspelledHashcode" enabled="true" level="WARNING" enabled_by_default="true" />
@@ -575,7 +571,7 @@
     <inspection_tool class="UnnecessaryEnumModifier" enabled="true" level="WARNING" enabled_by_default="true" />
     <inspection_tool class="UnnecessaryFullyQualifiedName" enabled="true" level="WARNING" enabled_by_default="true">
       <scope name="Tests" level="WARNING" enabled="false">
-        <option name="m_ignoreJavadoc" value="true" />
+        <option name="m_ignoreJavadoc" value="false" />
       </scope>
       <option name="m_ignoreJavadoc" value="true" />
     </inspection_tool>
diff --git a/.idea/libraries/asm_tools.xml b/.idea/libraries/asm_tools.xml
deleted file mode 100644
index 6009e9f..0000000
--- a/.idea/libraries/asm_tools.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="asm-tools">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/asm-tools/asm-4.0.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/asm-tools/asm-analysis-4.0.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/asm-tools/asm-tree-4.0.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/asm-tools/src-4.0.zip!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/bouncy_castle.xml b/.idea/libraries/bouncy_castle.xml
deleted file mode 100644
index 70ec93b..0000000
--- a/.idea/libraries/bouncy_castle.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="bouncy-castle">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/m2/repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/m2/repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/m2/repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48-sources.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/m2/repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/commons_compress.xml b/.idea/libraries/commons_compress.xml
deleted file mode 100644
index be33df8..0000000
--- a/.idea/libraries/commons_compress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<component name="libraryTable">
-  <library name="commons-compress">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/commons-compress/commons-compress-1.0.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES />
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/easymock_tools.xml b/.idea/libraries/easymock_tools.xml
deleted file mode 100644
index d01b884..0000000
--- a/.idea/libraries/easymock_tools.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="easymock-tools">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/easymock-tools/easymock-3.1.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/easymock-tools/easymock-3.1-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/easymock-tools/easymock-3.1-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/freemarker_2_3_19.xml b/.idea/libraries/freemarker_2_3_19.xml
deleted file mode 100644
index 8015e9e..0000000
--- a/.idea/libraries/freemarker_2_3_19.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<component name="libraryTable">
-  <library name="freemarker-2.3.19">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/freemarker/freemarker-2.3.19.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/freemarker/src.zip!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/guava_tools.xml b/.idea/libraries/guava_tools.xml
deleted file mode 100644
index 4e67511..0000000
--- a/.idea/libraries/guava_tools.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<component name="libraryTable">
-  <library name="guava-tools">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/guava-tools/guava-13.0.1.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/guava-tools/src.zip!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/http_client.xml b/.idea/libraries/http_client.xml
deleted file mode 100644
index 9f81f11..0000000
--- a/.idea/libraries/http_client.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<component name="libraryTable">
-  <library name="http-client">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/commons-codec-1.4.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/commons-logging-1.1.1.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/httpclient-4.1.1.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/httpcore-4.1.jar!/" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/httpmime-4.1.1.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/commons-codec-1.4-src.zip!/commons-codec-1.4-src/src/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/commons-logging-1.1.1-src.zip!/commons-logging-1.1.1-src/src/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-client-4.1.1-src.zip!/httpcomponents-client-4.1.1/httpclient/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-client-4.1.1-src.zip!/httpcomponents-client-4.1.1/httpclient-cache/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-client-4.1.1-src.zip!/httpcomponents-client-4.1.1/httpmime/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-client-4.1.1-src.zip!/httpcomponents-client-4.1.1/httpclient-benchmark/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-client-4.1.1-src.zip!/httpcomponents-client-4.1.1/httpclient-contrib/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-core-4.1-src.zip!/httpcomponents-core-4.1/httpcore-contrib/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-core-4.1-src.zip!/httpcomponents-core-4.1/httpcore-nio/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-core-4.1-src.zip!/httpcomponents-core-4.1/httpcore-benchmark/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-core-4.1-src.zip!/httpcomponents-core-4.1/httpcore/src/main/java" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/http-client/src/httpcomponents-core-4.1-src.zip!/httpcomponents-core-4.1/httpcore-ab/src/main/java" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/junit3_tools.xml b/.idea/libraries/junit3_tools.xml
deleted file mode 100644
index b3dd3f3..0000000
--- a/.idea/libraries/junit3_tools.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<component name="libraryTable">
-  <library name="junit3-tools">
-    <CLASSES>
-      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES />
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/kxml2.xml b/.idea/libraries/kxml2.xml
deleted file mode 100644
index 688c238..0000000
--- a/.idea/libraries/kxml2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="kxml2">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/kxml2-tools/kxml2-2.3.0.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/kxml2-tools/kxml2-src-2.3.0.zip!/www/kxml2/javadoc" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/kxml2-tools/kxml2-src-2.3.0.zip!/src" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/lombok_ast.xml b/.idea/libraries/lombok_ast.xml
deleted file mode 100644
index 250dbb9..0000000
--- a/.idea/libraries/lombok_ast.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<component name="libraryTable">
-  <library name="lombok-ast">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/lombok-ast/lombok-ast-0.2.1.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/lombok-ast/lombok-ast-0.2.1-src.zip!/src/template" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/lombok-ast/lombok-ast-0.2.1-src.zip!/src/ecjTransformer" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/lombok-ast/lombok-ast-0.2.1-src.zip!/src/javacTransformer" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/lombok-ast/lombok-ast-0.2.1-src.zip!/src/printer" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/lombok-ast/lombok-ast-0.2.1-src.zip!/src/main" />
-      <root url="jar://$PROJECT_DIR$/../../prebuilts/tools/common/lombok-ast/lombok-ast-0.2.1-src.zip!/build/lombok.ast_generatedSource" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 60db4ae..804f4a7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,10 @@
     <entry_points version="2.0" />
   </component>
   <component name="FrameworkDetectionExcludesConfiguration">
-    <type id="android" />
+    <file type="android" url="file://$PROJECT_DIR$/plugins/android/testData/AndroidManifest.xml" />
+    <file type="android" url="file://$PROJECT_DIR$/plugins/android/testData/lint/global/buttonsOrder/AndroidManifest.xml" />
+    <file type="android" url="file://$PROJECT_DIR$/plugins/android/testData/lint/global/manifestOrder/AndroidManifest.xml" />
+    <file type="android" url="file://$PROJECT_DIR$/plugins/android/testData/resNavigation/AndroidManifest.xml" />
   </component>
   <component name="IdProvider" IDEtalkID="88DB5D232B345F18EEFB2825E88EC093" />
   <component name="JavadocGenerationManager">
@@ -24,30 +27,6 @@
     <option name="LOCALE" />
     <option name="OPEN_IN_BROWSER" value="true" />
   </component>
-  <component name="NullableNotNullManager">
-    <option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
-    <option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
-    <option name="myNullables">
-      <value>
-        <list size="4">
-          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
-          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
-          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
-          <item index="3" class="java.lang.String" itemvalue="com.android.annotations.Nullable" />
-        </list>
-      </value>
-    </option>
-    <option name="myNotNulls">
-      <value>
-        <list size="4">
-          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
-          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
-          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
-          <item index="3" class="java.lang.String" itemvalue="com.android.annotations.NonNull" />
-        </list>
-      </value>
-    </option>
-  </component>
   <component name="ProjectDetails">
     <option name="projectName" value="idea-community" />
   </component>
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 8e79a97..bacca10 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -9,28 +9,19 @@
       <module fileurl="file://$PROJECT_DIR$/plugins/IntelliLang/IntelliLang-tests/IntelliLang-tests.iml" filepath="$PROJECT_DIR$/plugins/IntelliLang/IntelliLang-tests/IntelliLang-tests.iml" group="plugins/IntelliLang" />
       <module fileurl="file://$PROJECT_DIR$/plugins/IntelliLang/IntelliLang-xml.iml" filepath="$PROJECT_DIR$/plugins/IntelliLang/IntelliLang-xml.iml" group="plugins/IntelliLang" />
       <module fileurl="file://$PROJECT_DIR$/RegExpSupport/RegExpSupport.iml" filepath="$PROJECT_DIR$/RegExpSupport/RegExpSupport.iml" group="platform" />
-      <module fileurl="file://$PROJECT_DIR$/../adt/idea/adt-branding/adt-branding.iml" filepath="$PROJECT_DIR$/../adt/idea/adt-branding/adt-branding.iml" group="plugins/Android" />
       <module fileurl="file://$PROJECT_DIR$/platform/analysis-api/analysis-api.iml" filepath="$PROJECT_DIR$/platform/analysis-api/analysis-api.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/platform/analysis-impl/analysis-impl.iml" filepath="$PROJECT_DIR$/platform/analysis-impl/analysis-impl.iml" group="platform" />
-      <module fileurl="file://$PROJECT_DIR$/../adt/idea/android/android.iml" filepath="$PROJECT_DIR$/../adt/idea/android/android.iml" group="plugins/Android" />
-      <module fileurl="file://$PROJECT_DIR$/../adt/idea/android/common/android-common.iml" filepath="$PROJECT_DIR$/../adt/idea/android/common/android-common.iml" group="plugins/Android" />
-      <module fileurl="file://$PROJECT_DIR$/../adt/idea/android-designer/android-designer.iml" filepath="$PROJECT_DIR$/../adt/idea/android-designer/android-designer.iml" group="plugins/Android" />
-      <module fileurl="file://$PROJECT_DIR$/../adt/idea/android-gradle-jps/android-gradle-jps.iml" filepath="$PROJECT_DIR$/../adt/idea/android-gradle-jps/android-gradle-jps.iml" group="plugins/Android" />
-      <module fileurl="file://$PROJECT_DIR$/../adt/idea/android/jps-plugin/android-jps-plugin.iml" filepath="$PROJECT_DIR$/../adt/idea/android/jps-plugin/android-jps-plugin.iml" group="plugins/Android" />
-      <module fileurl="file://$PROJECT_DIR$/../adt/idea/android/rt/android-rt.iml" filepath="$PROJECT_DIR$/../adt/idea/android/rt/android-rt.iml" group="plugins/Android" />
       <module fileurl="file://$PROJECT_DIR$/platform/annotations/annotations.iml" filepath="$PROJECT_DIR$/platform/annotations/annotations.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/plugins/ant/ant.iml" filepath="$PROJECT_DIR$/plugins/ant/ant.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/plugins/ant/jps-plugin/ant-jps-plugin.iml" filepath="$PROJECT_DIR$/plugins/ant/jps-plugin/ant-jps-plugin.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/jps/antLayout/antlayout.iml" filepath="$PROJECT_DIR$/jps/antLayout/antlayout.iml" group="jps" />
       <module fileurl="file://$PROJECT_DIR$/plugins/google-app-engine/runtime/appEngine-runtime.iml" filepath="$PROJECT_DIR$/plugins/google-app-engine/runtime/appEngine-runtime.iml" group="plugins/GAE" />
-      <module fileurl="file://$PROJECT_DIR$/../base/asset-studio/assetstudio.iml" filepath="$PROJECT_DIR$/../base/asset-studio/assetstudio.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/plugins/svn4idea/bindSvn/bindSvn.iml" filepath="$PROJECT_DIR$/plugins/svn4idea/bindSvn/bindSvn.iml" group="plugins/VCS" />
       <module fileurl="file://$PROJECT_DIR$/platform/boot/boot.iml" filepath="$PROJECT_DIR$/platform/boot/boot.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/platform/bootstrap/bootstrap.iml" filepath="$PROJECT_DIR$/platform/bootstrap/bootstrap.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/build/build.iml" filepath="$PROJECT_DIR$/build/build.iml" />
       <module fileurl="file://$PROJECT_DIR$/colorSchemes/colorSchemes.iml" filepath="$PROJECT_DIR$/colorSchemes/colorSchemes.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/plugins/commander/commander.iml" filepath="$PROJECT_DIR$/plugins/commander/commander.iml" group="plugins" />
-      <module fileurl="file://$PROJECT_DIR$/../base/common/common.iml" filepath="$PROJECT_DIR$/../base/common/common.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/plugins/eclipse/common-eclipse-util/common-eclipse-util.iml" filepath="$PROJECT_DIR$/plugins/eclipse/common-eclipse-util/common-eclipse-util.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/plugins/javaFX/common-javaFX-plugin/common-javaFX-plugin.iml" filepath="$PROJECT_DIR$/plugins/javaFX/common-javaFX-plugin/common-javaFX-plugin.iml" group="plugins/JavaFX" />
       <module fileurl="file://$PROJECT_DIR$/community-main.iml" filepath="$PROJECT_DIR$/community-main.iml" />
@@ -45,7 +36,6 @@
       <module fileurl="file://$PROJECT_DIR$/build/cucumber-test-runner/cucumber-test-runner.iml" filepath="$PROJECT_DIR$/build/cucumber-test-runner/cucumber-test-runner.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/plugins/cvs/cvs-core/cvs-core.iml" filepath="$PROJECT_DIR$/plugins/cvs/cvs-core/cvs-core.iml" group="plugins/VCS/cvs" />
       <module fileurl="file://$PROJECT_DIR$/plugins/cvs/cvs-plugin/cvs-plugin.iml" filepath="$PROJECT_DIR$/plugins/cvs/cvs-plugin/cvs-plugin.iml" group="plugins/VCS/cvs" />
-      <module fileurl="file://$PROJECT_DIR$/../base/ddmlib/ddmlib.iml" filepath="$PROJECT_DIR$/../base/ddmlib/ddmlib.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/java/debugger/impl/debugger-impl.iml" filepath="$PROJECT_DIR$/java/debugger/impl/debugger-impl.iml" group="java" />
       <module fileurl="file://$PROJECT_DIR$/java/debugger/openapi/debugger-openapi.iml" filepath="$PROJECT_DIR$/java/debugger/openapi/debugger-openapi.iml" group="java" />
       <module fileurl="file://$PROJECT_DIR$/plugins/devkit/devkit.iml" filepath="$PROJECT_DIR$/plugins/devkit/devkit.iml" group="plugins" />
@@ -53,9 +43,7 @@
       <module fileurl="file://$PROJECT_DIR$/xml/dom-impl/dom-impl.iml" filepath="$PROJECT_DIR$/xml/dom-impl/dom-impl.iml" group="xml" />
       <module fileurl="file://$PROJECT_DIR$/xml/dom-openapi/dom-openapi.iml" filepath="$PROJECT_DIR$/xml/dom-openapi/dom-openapi.iml" group="xml" />
       <module fileurl="file://$PROJECT_DIR$/xml/dom-tests/dom-tests.iml" filepath="$PROJECT_DIR$/xml/dom-tests/dom-tests.iml" group="xml" />
-      <module fileurl="file://$PROJECT_DIR$/../base/draw9patch/draw9patch.iml" filepath="$PROJECT_DIR$/../base/draw9patch/draw9patch.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/platform/dvcs/dvcs.iml" filepath="$PROJECT_DIR$/platform/dvcs/dvcs.iml" group="platform" />
-      <module fileurl="file://$PROJECT_DIR$/../base/device_validator/dvlib/dvlib.iml" filepath="$PROJECT_DIR$/../base/device_validator/dvlib/dvlib.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/plugins/eclipse/eclipse.iml" filepath="$PROJECT_DIR$/plugins/eclipse/eclipse.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/plugins/eclipse/jps-plugin/eclipse-jps-plugin.iml" filepath="$PROJECT_DIR$/plugins/eclipse/jps-plugin/eclipse-jps-plugin.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/java/execution/impl/execution-impl.iml" filepath="$PROJECT_DIR$/java/execution/impl/execution-impl.iml" group="java" />
@@ -110,13 +98,8 @@
       <module fileurl="file://$PROJECT_DIR$/plugins/junit_rt/junit_rt.iml" filepath="$PROJECT_DIR$/plugins/junit_rt/junit_rt.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/platform/lang-api/lang-api.iml" filepath="$PROJECT_DIR$/platform/lang-api/lang-api.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/platform/lang-impl/lang-impl.iml" filepath="$PROJECT_DIR$/platform/lang-impl/lang-impl.iml" group="platform" />
-      <module fileurl="file://$PROJECT_DIR$/../base/layoutlib-api/layoutlib-api.iml" filepath="$PROJECT_DIR$/../base/layoutlib-api/layoutlib-api.iml" group="plugins/Android/android-sdk" />
-      <module fileurl="file://$PROJECT_DIR$/../base/lint/libs/lint-api/lint-api.iml" filepath="$PROJECT_DIR$/../base/lint/libs/lint-api/lint-api.iml" group="plugins/Android/android-sdk/lint" />
-      <module fileurl="file://$PROJECT_DIR$/../base/lint/libs/lint-checks/lint-checks.iml" filepath="$PROJECT_DIR$/../base/lint/libs/lint-checks/lint-checks.iml" group="plugins/Android/android-sdk/lint" />
-      <module fileurl="file://$PROJECT_DIR$/../base/lint/cli/lint-cli.iml" filepath="$PROJECT_DIR$/../base/lint/cli/lint-cli.iml" group="plugins/Android/android-sdk/lint" />
       <module fileurl="file://$PROJECT_DIR$/platform/lvcs-api/lvcs-api.iml" filepath="$PROJECT_DIR$/platform/lvcs-api/lvcs-api.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/platform/lvcs-impl/lvcs-impl.iml" filepath="$PROJECT_DIR$/platform/lvcs-impl/lvcs-impl.iml" group="platform" />
-      <module fileurl="file://$PROJECT_DIR$/../base/manifest-merger/manifest-merger.iml" filepath="$PROJECT_DIR$/../base/manifest-merger/manifest-merger.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/plugins/maven/maven.iml" filepath="$PROJECT_DIR$/plugins/maven/maven.iml" group="plugins/maven" />
       <module fileurl="file://$PROJECT_DIR$/plugins/maven/artifact-resolver-m2/maven-artifact-resolver-m2.iml" filepath="$PROJECT_DIR$/plugins/maven/artifact-resolver-m2/maven-artifact-resolver-m2.iml" group="plugins/maven" />
       <module fileurl="file://$PROJECT_DIR$/plugins/maven/artifact-resolver-m3/maven-artifact-resolver-m3.iml" filepath="$PROJECT_DIR$/plugins/maven/artifact-resolver-m3/maven-artifact-resolver-m3.iml" group="plugins/maven" />
@@ -124,7 +107,6 @@
       <module fileurl="file://$PROJECT_DIR$/plugins/maven/maven-server-api/maven-server-api.iml" filepath="$PROJECT_DIR$/plugins/maven/maven-server-api/maven-server-api.iml" group="plugins/maven" />
       <module fileurl="file://$PROJECT_DIR$/plugins/maven/maven2-server-impl/maven2-server-impl.iml" filepath="$PROJECT_DIR$/plugins/maven/maven2-server-impl/maven2-server-impl.iml" group="plugins/maven" />
       <module fileurl="file://$PROJECT_DIR$/plugins/maven/maven3-server-impl/maven3-server-impl.iml" filepath="$PROJECT_DIR$/plugins/maven/maven3-server-impl/maven3-server-impl.iml" group="plugins/maven" />
-      <module fileurl="file://$PROJECT_DIR$/../base/ninepatch/ninepatch.iml" filepath="$PROJECT_DIR$/../base/ninepatch/ninepatch.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/java/openapi/openapi.iml" filepath="$PROJECT_DIR$/java/openapi/openapi.iml" group="java" />
       <module fileurl="file://$PROJECT_DIR$/platform/platform-api/platform-api.iml" filepath="$PROJECT_DIR$/platform/platform-api/platform-api.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/platform/platform-impl/platform-impl.iml" filepath="$PROJECT_DIR$/platform/platform-impl/platform-impl.iml" group="platform" />
@@ -140,8 +122,6 @@
       <module fileurl="file://$PROJECT_DIR$/platform/remote-servers/impl/remote-servers-impl.iml" filepath="$PROJECT_DIR$/platform/remote-servers/impl/remote-servers-impl.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/resources/resources.iml" filepath="$PROJECT_DIR$/resources/resources.iml" />
       <module fileurl="file://$PROJECT_DIR$/resources-en/resources-en.iml" filepath="$PROJECT_DIR$/resources-en/resources-en.iml" />
-      <module fileurl="file://$PROJECT_DIR$/../base/sdk-common/sdk-common.iml" filepath="$PROJECT_DIR$/../base/sdk-common/sdk-common.iml" group="plugins/Android/android-sdk" />
-      <module fileurl="file://$PROJECT_DIR$/../base/sdklib/sdklib.iml" filepath="$PROJECT_DIR$/../base/sdklib/sdklib.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/platform/smRunner/smRunner.iml" filepath="$PROJECT_DIR$/platform/smRunner/smRunner.iml" group="platform" />
       <module fileurl="file://$PROJECT_DIR$/plugins/cvs/smartcvs-src/smartcvs-src.iml" filepath="$PROJECT_DIR$/plugins/cvs/smartcvs-src/smartcvs-src.iml" group="plugins/VCS/cvs" />
       <module fileurl="file://$PROJECT_DIR$/spellchecker/spellchecker.iml" filepath="$PROJECT_DIR$/spellchecker/spellchecker.iml" group="plugins" />
@@ -158,7 +138,6 @@
       <module fileurl="file://$PROJECT_DIR$/plugins/testng/testng.iml" filepath="$PROJECT_DIR$/plugins/testng/testng.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/plugins/testng_rt/testng_rt.iml" filepath="$PROJECT_DIR$/plugins/testng_rt/testng_rt.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/platform/testFramework/bootstrap/tests_bootstrap.iml" filepath="$PROJECT_DIR$/platform/testFramework/bootstrap/tests_bootstrap.iml" group="platform" />
-      <module fileurl="file://$PROJECT_DIR$/../base/testutils/testutils.iml" filepath="$PROJECT_DIR$/../base/testutils/testutils.iml" group="plugins/Android/android-sdk" />
       <module fileurl="file://$PROJECT_DIR$/plugins/ui-designer/ui-designer.iml" filepath="$PROJECT_DIR$/plugins/ui-designer/ui-designer.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/plugins/ui-designer-core/ui-designer-core.iml" filepath="$PROJECT_DIR$/plugins/ui-designer-core/ui-designer-core.iml" group="plugins" />
       <module fileurl="file://$PROJECT_DIR$/plugins/ui-designer/jps-plugin/ui-designer-jps-plugin.iml" filepath="$PROJECT_DIR$/plugins/ui-designer/jps-plugin/ui-designer-jps-plugin.iml" group="plugins" />
diff --git a/.idea/runConfigurations/AndroidStudio.xml b/.idea/runConfigurations/AndroidStudio.xml
deleted file mode 100644
index b9d00df..0000000
--- a/.idea/runConfigurations/AndroidStudio.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="AndroidStudio" type="Application" factoryName="Application" singleton="true">
-    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <option name="MAIN_CLASS_NAME" value="com.intellij.idea.Main" />
-    <option name="VM_PARAMETERS" value="-ea -Xbootclasspath/p:../out/classes/production/boot -Xms384m -Xmx768m -Didea.is.internal=true -XX:MaxPermSize=384m -Dapple.awt.graphics.UseQuartz=true -Didea.platform.prefix=AndroidStudio -Dandroid.extra_templates.path=../../../sdk/templates -Dapple.laf.useScreenMenuBar=true -Dcom.apple.mrj.application.apple.menu.about.name=AndroidStudio -Dexternal.system.in.process=true -Dsun.awt.disablegrab=true" />
-    <option name="PROGRAM_PARAMETERS" value="" />
-    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/bin" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-    <option name="ALTERNATIVE_JRE_PATH" value="" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="community-main" />
-    <envs />
-    <RunnerSettings RunnerId="Debug">
-      <option name="DEBUG_PORT" value="" />
-      <option name="TRANSPORT" value="0" />
-      <option name="LOCAL" value="true" />
-    </RunnerSettings>
-    <RunnerSettings RunnerId="Run" />
-    <ConfigurationWrapper RunnerId="Debug" />
-    <ConfigurationWrapper RunnerId="Run" />
-    <method />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.idea/scopes/androidplugin.xml b/.idea/scopes/androidplugin.xml
deleted file mode 100644
index dcc1341..0000000
--- a/.idea/scopes/androidplugin.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<component name="DependencyValidationManager">
-  <scope name="androidplugin" pattern="file[group:Android]:*//*&amp;&amp;!file[group:android-sdk]:*//*" />
-</component>
\ No newline at end of file
diff --git a/.idea/scopes/aosp_code.xml b/.idea/scopes/aosp_code.xml
deleted file mode 100644
index abf77af..0000000
--- a/.idea/scopes/aosp_code.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<component name="DependencyValidationManager">
-  <scope name="aosp-code" pattern="test[group:android-sdk]:*..*||src[group:android-sdk]:*..*" />
-</component>
\ No newline at end of file
diff --git a/.idea/scopes/obsoleteplugin.xml b/.idea/scopes/obsoleteplugin.xml
deleted file mode 100644
index 0537436..0000000
--- a/.idea/scopes/obsoleteplugin.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<component name="DependencyValidationManager">
-  <scope name="obsoleteplugin" pattern="file[community-main]:plugins/android//*||file[community-main]:plugins/android-designer//*" />
-</component>
\ No newline at end of file
diff --git a/.idea/scopes/platform.xml b/.idea/scopes/platform.xml
deleted file mode 100644
index a0bafd1..0000000
--- a/.idea/scopes/platform.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<component name="DependencyValidationManager">
-  <scope name="platform" pattern="src:*..*&amp;&amp;!src[group:Android]:*..*" />
-</component>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
index cb8806f..ec8ce05 100644
--- a/.idea/uiDesigner.xml
+++ b/.idea/uiDesigner.xml
@@ -138,9 +138,6 @@
       <item class="com.intellij.ui.ReferenceEditorComboWithBrowseButton" icon="/com/intellij/uiDesigner/icons/panel.png" removable="true" auto-create-binding="true" can-attach-label="true">
         <default-constraints vsize-policy="0" hsize-policy="7" anchor="0" fill="1" />
       </item>
-      <item class="com.intellij.ui.HyperlinkLabel" icon="" removable="true" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="0" />
-      </item>
     </group>
   </component>
   <component name="uidesigner-configuration">
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index d1499b1..275077f 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,8 +2,6 @@
 <project version="4">
   <component name="VcsDirectoryMappings">
     <mapping directory="" vcs="Git" />
-    <mapping directory="$PROJECT_DIR$/../adt/idea" vcs="Git" />
-    <mapping directory="$PROJECT_DIR$/../base" vcs="Git" />
   </component>
 </project>
 
diff --git a/build/conf/mac/Contents/Info.plist b/build/conf/mac/Contents/Info.plist
index b57f202..0603a25 100644
--- a/build/conf/mac/Contents/Info.plist
+++ b/build/conf/mac/Contents/Info.plist
@@ -39,7 +39,7 @@
     <key>CFBundleSignature</key>
     <string>????</string>
     <key>CFBundleGetInfoString</key>
-    <string>@@bundle_name@@ @@version@@, build @@build@@. Copyright @@company_name@@, (c) @@min_year@@-@@max_year@@</string>
+    <string>@@bundle_name@@ @@version@@, build @@build@@. Copyright JetBrains s.r.o., (c) 2000-@@year@@</string>
     <key>CFBundleShortVersionString</key>
     <string>@@version@@</string>
     <key>CFBundleVersion</key>
diff --git a/community-main.iml b/community-main.iml
index 9e92fe4..6494bb3 100644
--- a/community-main.iml
+++ b/community-main.iml
@@ -86,8 +86,6 @@
     <orderEntry type="module" module-name="github" />
     <orderEntry type="module" module-name="hg4idea" />
     <orderEntry type="module" module-name="android" />
-    <orderEntry type="module" module-name="android-designer" />
-    <orderEntry type="module" module-name="adt-branding" />
     <orderEntry type="module" module-name="relaxng" />
     <orderEntry type="module" module-name="gradle" />
     <orderEntry type="module" module-name="remote-servers-impl" />
diff --git a/java/idea-ui/src/com/intellij/ide/actions/ShowStructureSettingsAction.java b/java/idea-ui/src/com/intellij/ide/actions/ShowStructureSettingsAction.java
index cd41313..777105f 100644
--- a/java/idea-ui/src/com/intellij/ide/actions/ShowStructureSettingsAction.java
+++ b/java/idea-ui/src/com/intellij/ide/actions/ShowStructureSettingsAction.java
@@ -15,20 +15,15 @@
  */
 package com.intellij.ide.actions;
 
-import com.intellij.facet.Facet;
-import com.intellij.facet.FacetManager;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.PlatformDataKeys;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
 import com.intellij.openapi.options.ShowSettingsUtil;
 import com.intellij.openapi.options.newEditor.OptionsEditorDialog;
 import com.intellij.openapi.project.DumbAware;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
 import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
-import com.intellij.openapi.ui.Messages;
 
 public class ShowStructureSettingsAction extends AnAction implements DumbAware {
   public void actionPerformed(AnActionEvent e) {
@@ -37,37 +32,6 @@
       project = ProjectManager.getInstance().getDefaultProject();
     }
 
-    // TEMPORARY HACK! DO NOT MERGE INTO INTELLIJ. This just works around a lot
-    // of confusion caused by the fact that the structure dialog lets you edit
-    // project state which is ignored by gradle, so temporarily disable this
-    // dialog for Android-Gradle-based projects.
-    if (isGradleProject(project)) {
-      showDisabledProjectStructureDialogMessage();
-    }
-
     ShowSettingsUtil.getInstance().editConfigurable(project, OptionsEditorDialog.DIMENSION_KEY, ProjectStructureConfigurable.getInstance(project));
   }
-
-  public static void showDisabledProjectStructureDialogMessage() {
-    Messages.showInfoMessage(
-      "We will provide a UI to configure project settings later. " +
-      "Until then, please manually edit your build.gradle file to " +
-      "configure source folders, libraries and dependencies.\n\n" +
-      "NOTE THAT EDITS MADE IN THE FOLLOWING DIALOG DO NOT AFFECT THE GRADLE BUILD.\n" +
-      "The dialog can be used for temporary adjustments to SDKs etc.",
-      "Project Structure");
-  }
-
-  public static boolean isGradleProject(Project project) {
-    ModuleManager moduleManager = ModuleManager.getInstance(project);
-    for (Module module : moduleManager.getModules()) {
-      FacetManager facetManager = FacetManager.getInstance(module);
-      for (Facet facet : facetManager.getAllFacets()) {
-        if ("android-gradle".equals(facet.getType().getStringId())) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
 }
\ No newline at end of file
diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java
index 612399a..e654eab 100644
--- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java
+++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java
@@ -16,7 +16,6 @@
 package com.intellij.openapi.roots.ui.configuration;
 
 import com.intellij.compiler.actions.ArtifactAwareProjectSettingsService;
-import com.intellij.ide.actions.ShowStructureSettingsAction;
 import com.intellij.ide.projectView.impl.ModuleGroup;
 import com.intellij.ide.util.projectWizard.JdkChooserPanel;
 import com.intellij.openapi.module.Module;
@@ -66,7 +65,6 @@
 
   @Override
   public void openLibrary(@NotNull final Library library) {
-    warnIfGradleProject();
     final ProjectStructureConfigurable config = ProjectStructureConfigurable.getInstance(myProject);
     ShowSettingsUtil.getInstance().editConfigurable(myProject, config, new Runnable() {
       @Override
@@ -83,7 +81,6 @@
 
   @Override
   public void openModuleSettings(final Module module) {
-    warnIfGradleProject();
     ModulesConfigurator.showDialog(myProject, module.getName(), null);
   }
 
@@ -94,7 +91,6 @@
 
   @Override
   public void openModuleLibrarySettings(final Module module) {
-    warnIfGradleProject();
     ModulesConfigurator.showDialog(myProject, module.getName(), ClasspathEditor.NAME);
   }
 
@@ -105,7 +101,6 @@
 
   @Override
   public void openContentEntriesSettings(final Module module) {
-    warnIfGradleProject();
     ModulesConfigurator.showDialog(myProject, module.getName(), ContentEntriesEditor.NAME);
   }
 
@@ -116,7 +111,6 @@
 
   @Override
   public void openModuleDependenciesSettings(@NotNull final Module module, @Nullable final OrderEntry orderEntry) {
-    warnIfGradleProject();
     ShowSettingsUtil.getInstance().editConfigurable(myProject, ProjectStructureConfigurable.getInstance(myProject), new Runnable() {
       @Override
       public void run() {
@@ -132,7 +126,6 @@
 
   @Override
   public void openLibraryOrSdkSettings(@NotNull final OrderEntry orderEntry) {
-    warnIfGradleProject();
     final ProjectStructureConfigurable config = ProjectStructureConfigurable.getInstance(myProject);
     ShowSettingsUtil.getInstance().editConfigurable(myProject, config, new Runnable() {
       @Override
@@ -173,14 +166,6 @@
 
   @Override
   public void openArtifactSettings(@Nullable Artifact artifact) {
-    warnIfGradleProject();
     ModulesConfigurator.showArtifactSettings(myProject, artifact);
   }
-
-  // TEMPORARY HACK!! REMOVE ME ASAP!
-  private void warnIfGradleProject() {
-    if (ShowStructureSettingsAction.isGradleProject(myProject)) {
-      ShowStructureSettingsAction.showDisabledProjectStructureDialogMessage();
-    }
-  }
 }
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java
index d0aa4f96..2cbde60 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java
@@ -27,6 +27,7 @@
 import com.intellij.openapi.projectRoots.JavaSdkVersion;
 import com.intellij.openapi.projectRoots.JavaVersionService;
 import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.TextRange;
 import com.intellij.pom.java.LanguageLevel;
 import com.intellij.psi.*;
@@ -59,49 +60,24 @@
   public static HighlightInfo checkInferredTypeArguments(PsiMethod genericMethod,
                                                          PsiMethodCallExpression call,
                                                          PsiSubstitutor substitutor) {
-    PsiTypeParameter[] typeParameters = genericMethod.getTypeParameters();
-    for (PsiTypeParameter typeParameter : typeParameters) {
-      PsiType substituted = substitutor.substitute(typeParameter);
-      if (substituted == null) return null;
-      substituted = PsiUtil.captureToplevelWildcards(substituted, call);
-      PsiClassType[] extendsTypes = typeParameter.getExtendsListTypes();
-      for (PsiClassType type : extendsTypes) {
-        PsiType extendsType = substitutor.substitute(type);
-        if (substituted instanceof PsiWildcardType) {
-          if (((PsiWildcardType)substituted).isSuper()) {
-            continue;
-          }
-          final PsiType extendsBound = ((PsiWildcardType)substituted).getExtendsBound();
-          if (TypeConversionUtil.erasure(extendsType).equals(TypeConversionUtil.erasure(extendsBound))) {
-            if (extendsBound instanceof PsiClassType) {
-              PsiType[] parameters = ((PsiClassType)extendsBound).getParameters();
-              if (parameters.length == 1) {
-                PsiType argType = parameters[0];
-                if (argType instanceof PsiCapturedWildcardType) {
-                  argType = ((PsiCapturedWildcardType)argType).getWildcard();
-                }
-                if (argType instanceof PsiWildcardType && !((PsiWildcardType)argType).isBounded()) continue;
-              }
-            }
-          }
-        }
-        if (!TypeConversionUtil.isAssignable(extendsType, substituted, false)) {
-          PsiClass boundClass = extendsType instanceof PsiClassType ? ((PsiClassType)extendsType).resolve() : null;
+    final Pair<PsiTypeParameter, PsiType> inferredTypeArgument =
+      GenericsUtil.findTypeParameterWithBoundError(genericMethod.getTypeParameters(), substitutor, call, false);
+    if (inferredTypeArgument != null) {
+      final PsiType extendsType = inferredTypeArgument.second;
+      final PsiTypeParameter typeParameter = inferredTypeArgument.first;
+      PsiClass boundClass = extendsType instanceof PsiClassType ? ((PsiClassType)extendsType).resolve() : null;
 
-          @NonNls String messageKey = boundClass == null || typeParameter.isInterface() == boundClass.isInterface()
-                                      ? "generics.inferred.type.for.type.parameter.is.not.within.its.bound.extend"
-                                      : "generics.inferred.type.for.type.parameter.is.not.within.its.bound.implement";
+      @NonNls String messageKey = boundClass == null || typeParameter.isInterface() == boundClass.isInterface()
+                                  ? "generics.inferred.type.for.type.parameter.is.not.within.its.bound.extend"
+                                  : "generics.inferred.type.for.type.parameter.is.not.within.its.bound.implement";
 
-          String description = JavaErrorMessages.message(
-            messageKey,
-            HighlightUtil.formatClass(typeParameter),
-            JavaHighlightUtil.formatType(extendsType),
-            JavaHighlightUtil.formatType(substituted)
-          );
-
-          return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(call).descriptionAndTooltip(description).create();
-        }
-      }
+      String description = JavaErrorMessages.message(
+        messageKey,
+        HighlightUtil.formatClass(typeParameter),
+        JavaHighlightUtil.formatType(extendsType),
+        JavaHighlightUtil.formatType(substitutor.substitute(typeParameter))
+      );
+      return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(call).descriptionAndTooltip(description).create();
     }
 
     return null;
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/CommentFormatter.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/CommentFormatter.java
index 624c537..aaf47cf 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/CommentFormatter.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/CommentFormatter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
 import com.intellij.lang.java.JavaLanguage;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.LanguageLevelProjectExtension;
 import com.intellij.openapi.util.text.LineTokenizer;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.psi.*;
@@ -45,7 +46,7 @@
 
   public CommentFormatter(@NotNull Project project) {
     mySettings = CodeStyleSettingsManager.getSettings(project);
-    myParser = new JDParser(mySettings);
+    myParser = new JDParser(mySettings, LanguageLevelProjectExtension.getInstance(project).getLanguageLevel());
     myProject = project;
   }
 
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParser.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParser.java
index f4ba000..5dbc025 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParser.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParser.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
 
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.pom.java.LanguageLevel;
 import com.intellij.psi.codeStyle.CodeStyleSettings;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -39,9 +40,11 @@
   private static final String SELF_CLOSED_P_TAG = "<p/>";
 
   private final CodeStyleSettings mySettings;
+  private final LanguageLevel myLanguageLevel;
 
-  public JDParser(@NotNull CodeStyleSettings settings) {
+  public JDParser(@NotNull CodeStyleSettings settings, @NotNull LanguageLevel languageLevel) {
     mySettings = settings;
+    myLanguageLevel = languageLevel;
   }
 
   private static final char lineSeparator = '\n';
@@ -514,7 +517,13 @@
         if (line.length() == 0 && !mySettings.JD_KEEP_EMPTY_LINES) continue;
         if (i != 0) sb.append(prefix);
         if (line.length() == 0 && mySettings.JD_P_AT_EMPTY_LINES && !insidePreTag) {
-          sb.append(SELF_CLOSED_P_TAG);
+          if (myLanguageLevel.isAtLeast(LanguageLevel.JDK_1_8)) {
+            //Self-closing elements are not allowed for javadoc tool from JDK8
+            sb.append(P_START_TAG);
+          }
+          else {
+            sb.append(SELF_CLOSED_P_TAG);
+          }
         }
         else {
           sb.append(line);
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PathListReferenceProvider.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PathListReferenceProvider.java
index b21c395..3685ef7 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PathListReferenceProvider.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PathListReferenceProvider.java
@@ -16,22 +16,18 @@
 
 package com.intellij.psi.impl.source.resolve.reference.impl.providers;
 
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiReference;
-import com.intellij.psi.ElementManipulator;
-import com.intellij.psi.ElementManipulators;
-import com.intellij.psi.impl.source.resolve.reference.PsiReferenceProviderBase;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.text.CharFilter;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.*;
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.ProcessingContext;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.util.text.CharFilter;
-import com.intellij.openapi.util.TextRange;
 import org.jetbrains.annotations.NotNull;
 
 /**
  * @author davdeev
  */
-public class PathListReferenceProvider extends PsiReferenceProviderBase {
+public class PathListReferenceProvider extends PsiReferenceProvider {
 
   @Override
   @NotNull
diff --git a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java
index c09660c..4132f23 100644
--- a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java
@@ -249,10 +249,17 @@
                                                   final PsiSubstitutor substitutor,
                                                   final PsiElement context,
                                                   final boolean allowUncheckedConversion) {
+    return findTypeParameterWithBoundError(typeParams, substitutor, context, allowUncheckedConversion) == null;
+  }
+
+  public static Pair<PsiTypeParameter, PsiType> findTypeParameterWithBoundError(final PsiTypeParameter[] typeParams,
+                                                                                final PsiSubstitutor substitutor,
+                                                                                final PsiElement context,
+                                                                                final boolean allowUncheckedConversion) {
     nextTypeParam:
     for (PsiTypeParameter typeParameter : typeParams) {
       PsiType substituted = substitutor.substitute(typeParameter);
-      if (substituted == null) return true;
+      if (substituted == null) return null;
       substituted = PsiUtil.captureToplevelWildcards(substituted, context);
 
       PsiClassType[] extendsTypes = typeParameter.getExtendsListTypes();
@@ -263,7 +270,7 @@
             continue;
           }
           final PsiType extendsBound = ((PsiWildcardType)substituted).getExtendsBound();
-          if (TypeConversionUtil.erasure(extendsType).equals(TypeConversionUtil.erasure(extendsBound))) {
+          if (Comparing.equal(TypeConversionUtil.erasure(extendsType), TypeConversionUtil.erasure(extendsBound))) {
             if (extendsBound instanceof PsiClassType) {
               if (acceptExtendsBound((PsiClassType)extendsBound, 0)) continue;
             } else if (extendsBound instanceof PsiIntersectionType) {
@@ -275,12 +282,12 @@
             }
           }
         }
-        if (!TypeConversionUtil.isAssignable(extendsType, substituted, allowUncheckedConversion)) {
-          return false;
+        if (extendsType != null && !TypeConversionUtil.isAssignable(extendsType, substituted, allowUncheckedConversion)) {
+          return Pair.create(typeParameter, extendsType);
         }
       }
     }
-    return true;
+    return null;
   }
 
   private static boolean acceptExtendsBound(PsiClassType extendsBound, int depth) {
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
index 6dde420..bbe39b3 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
@@ -572,10 +572,6 @@
                                                               final boolean captureWildcard) {
     if (arg instanceof PsiWildcardType && !captureWildcard) return FAILED_INFERENCE;
     if (arg != PsiType.NULL) {
-      if (arg instanceof PsiWildcardType) {
-        final PsiType bound = ((PsiWildcardType)arg).getBound();
-        if (bound instanceof PsiClassType && ((PsiClassType)bound).isRaw()) return Pair.create(null, constraintType);
-      }
       return new Pair<PsiType, ConstraintType>(arg, constraintType);
     }
     return null;
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA112122.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA112122.java
new file mode 100644
index 0000000..bb1e1ab
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA112122.java
@@ -0,0 +1,16 @@
+class Cast<T> implements SemElement {
+
+    {
+        final SemKey<? extends Cast> key = null;
+        final Cast semElement =    getSemElement(key);
+    }
+
+    public <T extends SemElement> T getSemElement(SemKey<T> key) {
+        return null;
+    }
+
+
+    class SemKey<T extends SemElement> {}
+}
+
+interface SemElement {}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV15534.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV15534.java
index d4042a5..0fc7639 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV15534.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEADEV15534.java
@@ -18,7 +18,7 @@
         list.add(t1);
         SortTest<?> t2 = new SortTest<Integer>(0);
         list.add(t2);
-        <error descr="Inferred type 'SortTest<capture<?>>' for type parameter 'T' is not within its bound; should implement 'java.lang.Comparable<? super SortTest<?>>'">Collections.sort(list)</error>;
+        <error descr="Inferred type 'SortTest<?>' for type parameter 'T' is not within its bound; should implement 'java.lang.Comparable<? super SortTest<?>>'">Collections.sort(list)</error>;
         t1.compareTo<error descr="'compareTo(SortTest<capture<? extends java.lang.Comparable<capture<?>>>>)' in 'SortTest' cannot be applied to '(SortTest<capture<?>>)'">(t2)</error>;
 
         //this should be OK
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
index 3fef647..a0c0ffa 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
@@ -300,7 +300,8 @@
   public void testIDEA67682() { doTest5(false); }
   public void testIDEA57391() { doTest5(false); }
   public void testIDEA110869() { doTest5(false); }
-  public void testIDEA110947() { doTest5(false); }
+  public void _testIDEA110947() { doTest5(false); }
+  public void testIDEA112122() { doTest5(false); }
   public void testNoInferenceFromTypeCast() { doTest5(false); }
   public void testCaptureWildcardsInTypeCasts() { doTest5(false); }
   public void testIDEA111085() { doTest5(false); }
diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavadocFormatterTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavadocFormatterTest.java
index 24adb29..d4c7274 100644
--- a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavadocFormatterTest.java
+++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavadocFormatterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +17,8 @@
 
 
 import com.intellij.lang.java.JavaLanguage;
+import com.intellij.openapi.roots.LanguageLevelProjectExtension;
+import com.intellij.pom.java.LanguageLevel;
 import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
 
 /**
@@ -95,6 +97,7 @@
     getSettings().getRootSettings().ENABLE_JAVADOC_FORMATTING = true;
     getSettings().getRootSettings().WRAP_COMMENTS = true;
     getSettings().getRootSettings().RIGHT_MARGIN = 20;
+    LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_7);
 
     doTextTest("/**\n" + " * <p />\n" + " * Another paragraph of the description placed after blank line.\n" + " */\n" + "class A{}",
                "/**\n" +
@@ -107,11 +110,31 @@
                "class A {\n" +
                "}");
   }
-  
+
+  public void testSCR2632_JDK8_LanguageLevel() throws Exception {
+    getSettings().getRootSettings().ENABLE_JAVADOC_FORMATTING = true;
+    getSettings().getRootSettings().WRAP_COMMENTS = true;
+    getSettings().getRootSettings().RIGHT_MARGIN = 20;
+    LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_8);
+
+    doTextTest("/**\n" + " * <p />\n" + " * Another paragraph of the description placed after blank line.\n" + " */\n" + "class A{}",
+               "/**\n" +
+               " * <p>\n" +
+               " * Another paragraph\n" +
+               " * of the description\n" +
+               " * placed after\n" +
+               " * blank line.\n" +
+               " */\n" +
+               "class A {\n" +
+               "}");
+  }
+
+
   public void testParagraphTagGeneration() {
     // Inspired by IDEA-61811
     getSettings().getRootSettings().ENABLE_JAVADOC_FORMATTING = true;
     getSettings().getRootSettings().JD_P_AT_EMPTY_LINES = true;
+    LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_7);
     doTextTest(
       "/**\n" +
       " * line 1\n" +
@@ -618,4 +641,47 @@
                     "}";
     doTextTest(before, before);
   }
+
+
+  public void testNotGenerateSelfClosingPTagIfLanguageLevelJava8() throws Exception {
+    getSettings().getRootSettings().JD_P_AT_EMPTY_LINES = true;
+    getSettings().getRootSettings().ENABLE_JAVADOC_FORMATTING = true;
+    String before = "/**\n" +
+                    " * Super method\n" +
+                    " *\n" +
+                    " * Super multiple times\n" +
+                    " */\n" +
+                    "public void voo() {\n" +
+                    "}\n";
+    String after = "/**\n" +
+                    " * Super method\n" +
+                    " * <p>\n" +
+                    " * Super multiple times\n" +
+                    " */\n" +
+                    "public void voo() {\n" +
+                    "}\n";
+    doClassTest(before, after);
+  }
+
+  public void testGenerateSelfClosingPTagIfLanguageLevelNotJava8() throws Exception {
+    getSettings().getRootSettings().JD_P_AT_EMPTY_LINES = true;
+    getSettings().getRootSettings().ENABLE_JAVADOC_FORMATTING = true;
+    LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_7);
+    String before = "/**\n" +
+                    " * Super method\n" +
+                    " *\n" +
+                    " * Super multiple times\n" +
+                    " */\n" +
+                    "public void voo() {\n" +
+                    "}\n";
+    String after = "/**\n" +
+                   " * Super method\n" +
+                   " * <p/>\n" +
+                   " * Super multiple times\n" +
+                   " */\n" +
+                   "public void voo() {\n" +
+                   "}\n";
+    doClassTest(before, after);
+  }
+
 }
\ No newline at end of file
diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java
index 5b89e1c..bab6a66 100644
--- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java
+++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java
@@ -293,8 +293,7 @@
             externalProjectPath,
             callback,
             false,
-            true,
-            false
+            true
           );
         }
         catch (IllegalArgumentException e) {
diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java
index dc8aff7..b9692ef 100644
--- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java
+++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java
@@ -244,7 +244,7 @@
     if (!toRefresh.isEmpty()) {
       counter[0] = toRefresh.size();
       for (String path : toRefresh) {
-        refreshProject(project, externalSystemId, path, callback, true, false, true);
+        refreshProject(project, externalSystemId, path, callback, true, false);
       }
     }
   }
@@ -361,7 +361,25 @@
    * @param externalProjectPath   path of the target gradle project's file
    * @param callback              callback to be notified on refresh result
    * @param resolveLibraries      flag that identifies whether gradle libraries should be resolved during the refresh
-   * @param refreshingAllProjects indicates 'refreshing all projects' action
+   * @return the most up-to-date gradle project (if any)
+   */
+  public static void refreshProject(@NotNull final Project project,
+                                    @NotNull final ProjectSystemId externalSystemId,
+                                    @NotNull final String externalProjectPath,
+                                    @NotNull final ExternalProjectRefreshCallback callback,
+                                    final boolean resolveLibraries,
+                                    final boolean modal) {
+    refreshProject(project, externalSystemId, externalProjectPath, callback, resolveLibraries, modal, true);
+  }
+
+  /**
+   * Queries slave gradle process to refresh target gradle project.
+   *
+   * @param project               target intellij project to use
+   * @param externalProjectPath   path of the target gradle project's file
+   * @param callback              callback to be notified on refresh result
+   * @param resolveLibraries      flag that identifies whether gradle libraries should be resolved during the refresh
+   * @param reportRefreshError    prevent to show annoying error notification, e.g. if auto-import mode used
    * @return the most up-to-date gradle project (if any)
    */
   public static void refreshProject(@NotNull final Project project,
@@ -370,7 +388,7 @@
                                     @NotNull final ExternalProjectRefreshCallback callback,
                                     final boolean resolveLibraries,
                                     final boolean modal,
-                                    final boolean refreshingAllProjects)
+                                    final boolean reportRefreshError)
   {
     File projectFile = new File(externalProjectPath);
     final String projectName;
@@ -415,7 +433,7 @@
         }
         AbstractExternalSystemSettings<?, ?, ?> settings = manager.getSettingsProvider().fun(project);
         ExternalProjectSettings projectSettings = settings.getLinkedProjectSettings(externalProjectPath);
-        if (projectSettings == null || (projectSettings.isUseAutoImport() && !refreshingAllProjects)) {
+        if (projectSettings == null || !reportRefreshError) {
           return;
         }
         ExternalSystemIdeNotificationManager notificationManager = ServiceManager.getService(ExternalSystemIdeNotificationManager.class);
@@ -650,7 +668,7 @@
         }
       }
     };
-    refreshProject(project, externalSystemId, projectSettings.getExternalProjectPath(), callback, resolveLibraries, modal, false);
+    refreshProject(project, externalSystemId, projectSettings.getExternalProjectPath(), callback, resolveLibraries, modal);
   }
   
   private interface TaskUnderProgress {
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java
index 537e85c..fd5eef8 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java
@@ -118,9 +118,8 @@
     final RefEntity refElement = refElementDescriptor.getUserObject();
     InspectionToolPresentation presentation = context.getPresentation(toolWrapper);
     if (context.getUIOptions().SHOW_ONLY_DIFF && presentation.getElementStatus(refElement) == FileStatus.NOT_CHANGED) return;
-    if (toolWrapper instanceof LocalInspectionToolWrapper) {
-      final CommonProblemDescriptor[] problems = refElementDescriptor.getProblemDescriptors();
-      if (problems != null) {
+    final CommonProblemDescriptor[] problems = refElementDescriptor.getProblemDescriptors();
+    if (problems != null) {
         final RefElementNode elemNode = addNodeToParent(container, presentation, pNode);
         for (CommonProblemDescriptor problem : problems) {
           assert problem != null;
@@ -132,7 +131,6 @@
             elemNode.setProblem(problems[0]);
           }
         }
-      }
     }
     else {
       if (canPackageRepeat) {
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java
index 7d0575d..b9aa7ec 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java
@@ -79,11 +79,12 @@
       return;
     }
 
+    e.getPresentation().setVisible(false);
+    e.getPresentation().setEnabled(false);
+
     final InspectionTree tree = view.getTree();
     final InspectionToolWrapper toolWrapper = tree.getSelectedToolWrapper();
     if (!view.isSingleToolInSelection() || toolWrapper != myToolWrapper) {
-      e.getPresentation().setVisible(false);
-      e.getPresentation().setEnabled(false);
       return;
     }
 
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java
index 295e608..d50bddc 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java
@@ -165,7 +165,7 @@
 
   public CommonProblemDescriptor[] getSelectedDescriptors() {
     final InspectionToolWrapper toolWrapper = getSelectedToolWrapper();
-    if (getSelectionCount() == 0 || !(toolWrapper instanceof LocalInspectionToolWrapper)) return EMPTY_DESCRIPTORS;
+    if (getSelectionCount() == 0) return EMPTY_DESCRIPTORS;
     final TreePath[] paths = getSelectionPaths();
     final LinkedHashSet<CommonProblemDescriptor> descriptors = new LinkedHashSet<CommonProblemDescriptor>();
     for (TreePath path : paths) {
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameToIgnoredDirectoryFileInputValidator.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameToIgnoredDirectoryFileInputValidator.java
index 64b8136..8af7040 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameToIgnoredDirectoryFileInputValidator.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameToIgnoredDirectoryFileInputValidator.java
@@ -46,6 +46,6 @@
 
   @Override
   public boolean isInputValid(String newName, PsiElement element, ProcessingContext context) {
-    return newName != null && newName.length() > 0 && newName.indexOf('\\') < 0 && newName.indexOf('/') < 0;
+    return newName != null && newName.length() > 0 && newName.indexOf('\\') < 0 && newName.indexOf('/') < 0 && newName.indexOf('\n') < 0;
   }
 }
diff --git a/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java b/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java
index ef79094..1077453 100644
--- a/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java
+++ b/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java
@@ -235,11 +235,6 @@
       setupEnvironment(builder.environment());
       builder.directory(myWorkDirectory);
       builder.redirectErrorStream(myRedirectErrorStream);
-
-      LOG.info("Command: " + getPreparedCommandLine(Platform.current()));
-      LOG.info("Working directory: " + myWorkDirectory);
-      LOG.info("Environment: " + builder.environment());
-
       return builder.start();
     }
     catch (IOException e) {
@@ -261,7 +256,7 @@
     }
   }
 
-  void setupEnvironment(final Map<String, String> environment) {
+  private void setupEnvironment(final Map<String, String> environment) {
     environment.clear();
 
     if (myPassParentEnvironment) {
diff --git a/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java b/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java
index 30dad25..e80a037 100644
--- a/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java
+++ b/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java
@@ -1012,11 +1012,6 @@
     }
     ErrorReportSubmitter submitter = null;
     for (ErrorReportSubmitter reporter : reporters) {
-      /** Android Studio: Always use the android error reporter */
-      String canonicalName = reporter.getClass().getCanonicalName();
-      if (canonicalName != null && canonicalName.contains("android")) {
-        return reporter;
-      }
       final PluginDescriptor descriptor = reporter.getPluginDescriptor();
       if (pluginId == null && (descriptor == null || PluginId.getId("com.intellij") == descriptor.getPluginId())
           || descriptor != null && Comparing.equal(pluginId, descriptor.getPluginId())) {
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java b/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java
index 48b9698..c84f7e2 100644
--- a/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java
+++ b/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java
@@ -198,10 +198,6 @@
     execPath = binPath + '/' + productName.toLowerCase() + ".sh";
     if (new File(execPath).canExecute()) return execPath;
 
-    final String scriptName = ApplicationNamesInfo.getInstance().getScriptName();
-    String scriptPath = binPath + '/' + scriptName + ".sh";
-    if (new File(scriptPath).canExecute()) return scriptPath;
-
     return null;
   }
 
diff --git a/platform/platform-impl/src/com/intellij/ide/actions/SendFeedbackAction.java b/platform/platform-impl/src/com/intellij/ide/actions/SendFeedbackAction.java
index 4f4e5ab..c1e32c6 100644
--- a/platform/platform-impl/src/com/intellij/ide/actions/SendFeedbackAction.java
+++ b/platform/platform-impl/src/com/intellij/ide/actions/SendFeedbackAction.java
@@ -40,7 +40,6 @@
     urlTemplate = urlTemplate
       .replace("$BUILD", appInfo.getBuild().asString())
       .replace("$TIMEZONE", System.getProperty("user.timezone"))
-      .replace("$VERSION", appInfo.getFullVersion())
       .replace("$EVAL", isEvaluationLicense() ? "true" : "false");
     BrowserUtil.launchBrowser(urlTemplate);
   }
diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java b/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java
index 28a17e2..0e5ac83 100644
--- a/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java
+++ b/platform/platform-impl/src/com/intellij/internal/statistic/updater/SendStatisticsProjectComponent.java
@@ -71,7 +71,18 @@
       StatisticsNotificationManager.showNotification(statisticsService, myProject);
     }
     else if (StatisticsUploadAssistant.isSendAllowed() && StatisticsUploadAssistant.isTimeToSend()) {
-      runWithDelay(statisticsService);
+      StatisticsService serviceToUse = null;
+      StatisticsServiceEP[] extensions = StatisticsService.EP_NAME.getExtensions();
+      if (extensions.length > 1) {
+        LOG.warn(String.format("More than one stats service detected (%s). Falling back to the built-in one", Arrays.toString(extensions)));
+      }
+      else if (extensions.length == 1) {
+        serviceToUse = extensions[0].getInstance();
+      }
+      if (serviceToUse == null) {
+        serviceToUse = statisticsService;
+      }
+      runWithDelay(serviceToUse);
     }
   }
 
diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java
index 0200ae0..dd2490f 100755
--- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java
@@ -378,9 +378,7 @@
     @NonNls StringBuilder buffer = new StringBuilder();
     buffer.append(getVersionName());
     buffer.append(" ");
-    // Android Studio: Show version numbers even though we are on EAP
-    // if (getMajorVersion() != null && !isEAP() && !isBetaOrRC()) {
-    if (getMajorVersion() != null) {
+    if (getMajorVersion() != null && !isEAP() && !isBetaOrRC()) {
       buffer.append(getMajorVersion());
 
       if (getMinorVersion() != null && getMinorVersion().length() > 0){
diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java
index 32d6e41..d8172a6 100644
--- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java
+++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java
@@ -15,7 +15,6 @@
  */
 package com.intellij.openapi.updateSettings.impl;
 
-import com.google.common.net.HttpHeaders;
 import com.intellij.ide.IdeBundle;
 import com.intellij.ide.plugins.*;
 import com.intellij.ide.reporter.ConnectionException;
@@ -742,27 +741,7 @@
 
     OutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile));
     try {
-      URL requestUrl = new URL(new URL(getPatchesUrl()), fileName);
-      URLConnection connection;
-
-      int followCount = 2;
-      while(true) {
-        connection = requestUrl.openConnection();
-
-        if (connection instanceof HttpURLConnection) {
-          HttpURLConnection hcnx = (HttpURLConnection)connection;
-          int code = hcnx.getResponseCode();
-          if (code >= 301 && code <= 307 && --followCount >= 0) {
-            String loc = hcnx.getHeaderField(HttpHeaders.LOCATION);
-            if (loc != null) {
-              requestUrl = new URL(loc);
-              continue;
-            }
-          }
-        }
-        break;
-      }
-
+      URLConnection connection = new URL(new URL(getPatchesUrl()), fileName).openConnection();
       try {
         InputStream in = UrlConnectionUtil.getConnectionInputStreamWithException(connection, i);
         try {
diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesXmlLoader.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesXmlLoader.java
index 0c33e2c..d1010f5 100644
--- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesXmlLoader.java
+++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesXmlLoader.java
@@ -16,7 +16,6 @@
 package com.intellij.openapi.updateSettings.impl;
 
 
-import com.google.common.net.HttpHeaders;
 import com.intellij.ide.IdeBundle;
 import com.intellij.ide.reporter.ConnectionException;
 import com.intellij.openapi.application.ApplicationManager;
@@ -25,7 +24,6 @@
 import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.util.net.HttpConfigurable;
-import org.apache.commons.httpclient.HttpStatus;
 import org.jdom.JDOMException;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -33,9 +31,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
-import java.net.HttpURLConnection;
 import java.net.URL;
-import java.net.URLConnection;
 import java.util.concurrent.Callable;
 import java.util.concurrent.FutureTask;
 import java.util.concurrent.TimeUnit;
@@ -71,27 +67,7 @@
 
           URL requestUrl = prepareRequestUrl(updateUrl);
 
-          URLConnection cnx;
-          int followCount = 2;
-          while(true) {
-            cnx = requestUrl.openConnection();
-
-            if (cnx instanceof HttpURLConnection) {
-              HttpURLConnection hcnx = (HttpURLConnection)cnx;
-              int code = hcnx.getResponseCode();
-              if (code >= 301 && code <= 307 && --followCount >= 0) {
-                String loc = hcnx.getHeaderField(HttpHeaders.LOCATION);
-                if (loc != null) {
-                  prepareUrl(loc);
-                  requestUrl = prepareRequestUrl(loc);
-                  continue;
-                }
-              }
-            }
-            break;
-          }
-
-          final InputStream inputStream = cnx.getInputStream();
+          final InputStream inputStream = requestUrl.openStream();
           Reader reader = new InputStreamReader(inputStream);
           try {
             return new UpdatesInfo(JDOMUtil.loadDocument(inputStream).getRootElement());
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java
index 5942f08..9932590 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java
@@ -72,7 +72,7 @@
   private final List<String> myCustomComponentIds = new ArrayList<String>();
 
   private final Set<IdeStatusBarImpl> myChildren = new HashSet<IdeStatusBarImpl>();
-  private ToolWindowsWidget myToolWindowWidget;
+  //private ToolWindowsWidget myToolWindowWidget;
 
   private static class WidgetBean {
     JComponent component;
@@ -164,7 +164,7 @@
     }
 
     if (master == null) {
-      addWidget(myToolWindowWidget = new ToolWindowsWidget(this), Position.LEFT);
+      addWidget(new ToolWindowsWidget(this), Position.LEFT);
     }
 
     enableEvents(AWTEvent.MOUSE_EVENT_MASK);
@@ -254,28 +254,28 @@
     myCustomComponentIds.add(customId);
   }
 
-  @Override
-  protected void processMouseMotionEvent(MouseEvent e) {
-    final Point point = e.getPoint();
-    if (myToolWindowWidget != null) {
-      if(point.x < 42 && 0 <= point.y && point.y <= getHeight()) {
-        myToolWindowWidget.mouseEntered();
-      } else {
-        myToolWindowWidget.mouseExited();
-      }
-    }
-    super.processMouseMotionEvent(e);
-  }
+  //@Override
+  //protected void processMouseMotionEvent(MouseEvent e) {
+  //  final Point point = e.getPoint();
+  //  if (myToolWindowWidget != null) {
+  //    if(point.x < 42 && 0 <= point.y && point.y <= getHeight()) {
+  //      myToolWindowWidget.mouseEntered();
+  //    } else {
+  //      myToolWindowWidget.mouseExited();
+  //    }
+  //  }
+  //  super.processMouseMotionEvent(e);
+  //}
 
-  @Override
-  protected void processMouseEvent(MouseEvent e) {
-    if (e.getID() == MouseEvent.MOUSE_EXITED && myToolWindowWidget != null) {
-      if (!new Rectangle(0,0,22, getHeight()).contains(e.getPoint())) {
-        myToolWindowWidget.mouseExited();
-      }
-    }
-    super.processMouseEvent(e);
-  }
+  //@Override
+  //protected void processMouseEvent(MouseEvent e) {
+  //  if (e.getID() == MouseEvent.MOUSE_EXITED && myToolWindowWidget != null) {
+  //    if (!new Rectangle(0,0,22, getHeight()).contains(e.getPoint())) {
+  //      myToolWindowWidget.mouseExited();
+  //    }
+  //  }
+  //  super.processMouseEvent(e);
+  //}
 
   @Override
   public void removeCustomIndicationComponent(@NotNull final JComponent c) {
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToolWindowsWidget.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToolWindowsWidget.java
index 7680beb..1ebb011 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToolWindowsWidget.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToolWindowsWidget.java
@@ -16,6 +16,7 @@
 package com.intellij.openapi.wm.impl.status;
 
 import com.intellij.icons.AllIcons;
+import com.intellij.ide.IdeEventQueue;
 import com.intellij.ide.ui.UISettings;
 import com.intellij.ide.ui.UISettingsListener;
 import com.intellij.openapi.Disposable;
@@ -38,7 +39,6 @@
 
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
@@ -52,6 +52,7 @@
   private final Alarm myAlarm;
   private StatusBar myStatusBar;
   private JBPopup popup;
+  private boolean wasExited = false;
 
   ToolWindowsWidget(Disposable parent) {
     new BaseButtonBehavior(this, TimedDeadzone.NULL) {
@@ -61,95 +62,116 @@
       }
     }.setActionTrigger(MouseEvent.MOUSE_PRESSED);
 
+    IdeEventQueue.getInstance().addDispatcher(new IdeEventQueue.EventDispatcher() {
+      @Override
+      public boolean dispatch(AWTEvent e) {
+        if (e instanceof MouseEvent) {
+          if (e.getID() == MouseEvent.MOUSE_MOVED && isShowing()) {
+            Point p = ((MouseEvent)e).getLocationOnScreen();
+            Point screen = ToolWindowsWidget.this.getLocationOnScreen();
+            if (new Rectangle(screen.x - 4, screen.y - 2, getWidth() + 4, getHeight() + 4).contains(p)) {
+              mouseEntered();
+              wasExited = false;
+            } else {
+              if (!wasExited) {
+                wasExited = mouseExited(p);
+              }
+            }
+          }
+        }
+        return false;
+      }
+    }, parent);
+
     UISettings.getInstance().addUISettingsListener(this, this);
     KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", this);
     myAlarm = new Alarm(parent);
   }
 
-  public void mouseExited() {
+  public boolean mouseExited(Point currentLocationOnScreen) {
     myAlarm.cancelAllRequests();
+    if (popup != null && popup.isVisible()) {
+      final Point screen = popup.getLocationOnScreen();
+      final Rectangle popupScreenRect = new Rectangle(screen.x, screen.y, popup.getSize().width, popup.getSize().height);
+      if (! popupScreenRect.contains(currentLocationOnScreen)) {
+        myAlarm.cancelAllRequests();
+        myAlarm.addRequest(new Runnable() {
+          @Override
+          public void run() {
+            if (popup != null && popup.isVisible()) {
+              popup.cancel();
+            }
+          }
+        }, 150);
+        return true;
+      }
+    }
+    return false;
   }
 
   public void mouseEntered() {
-    if (myAlarm.getActiveRequestCount() == 0)
-    myAlarm.addRequest(new Runnable() {
-      @Override
-      public void run() {
-        DefaultListModel model = new DefaultListModel();
-        final IdeFrameImpl frame = UIUtil.getParentOfType(IdeFrameImpl.class, ToolWindowsWidget.this);
-        if (frame == null) return;
-        final ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(frame.getProject());
-        for (String id : toolWindowManager.getToolWindowIds()) {
-          final ToolWindow tw = toolWindowManager.getToolWindow(id);
-          if (tw.isAvailable()) {
-            model.addElement(tw);
-          }
-        }
-
-        final JBList list = new JBList(model);
-        list.addMouseListener(new MouseAdapter() {
-          @Override
-          public void mouseEntered(MouseEvent e) {
-            myAlarm.cancelAllRequests();
+    if (myAlarm.getActiveRequestCount() == 0) {
+      myAlarm.addRequest(new Runnable() {
+        @Override
+        public void run() {
+          DefaultListModel model = new DefaultListModel();
+          final IdeFrameImpl frame = UIUtil.getParentOfType(IdeFrameImpl.class, ToolWindowsWidget.this);
+          if (frame == null) return;
+          final ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(frame.getProject());
+          for (String id : toolWindowManager.getToolWindowIds()) {
+            final ToolWindow tw = toolWindowManager.getToolWindow(id);
+            if (tw.isAvailable()) {
+              model.addElement(tw);
+            }
           }
 
-          @Override
-          public void mouseExited(MouseEvent e) {
-            myAlarm.addRequest(new Runnable() {
+          final JBList list = new JBList(model);
+          list.setCellRenderer(new ListCellRenderer() {
+            final JBLabel label = new JBLabel();
+
+            @Override
+            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+              final ToolWindow toolWindow = (ToolWindow)value;
+              label.setText(toolWindow instanceof ToolWindowImpl ? ((ToolWindowImpl)toolWindow).getId() : toolWindow.getTitle());
+              label.setIcon(toolWindow.getIcon());
+              label.setBorder(IdeBorderFactory.createEmptyBorder(4, 10, 4, 10));
+              label.setForeground(UIUtil.getListForeground(isSelected));
+              label.setBackground(UIUtil.getListBackground(isSelected));
+              final JPanel panel = new JPanel(new BorderLayout());
+              panel.add(label, BorderLayout.CENTER);
+              panel.setBackground(UIUtil.getListBackground(isSelected));
+              return panel;
+            }
+          });
+
+          final Dimension size = list.getPreferredSize();
+          final JComponent c = ToolWindowsWidget.this;
+          final RelativePoint point = new RelativePoint(c, new Point(-4, -4 - size.height));
+
+
+          if (popup != null && popup.isVisible()) {
+            return;
+          }
+
+          list.setSelectedIndex(list.getItemsCount() - 1);
+          popup = JBPopupFactory.getInstance().createListPopupBuilder(list)
+            .setAutoselectOnMouseMove(true)
+            .setItemChoosenCallback(new Runnable() {
               @Override
               public void run() {
-                if (popup != null && popup.isVisible()) {
-                  popup.cancel();
+                if (popup != null) popup.closeOk(null);
+                final Object value = list.getSelectedValue();
+                if (value instanceof ToolWindow) {
+                  ((ToolWindow)value).activate(null, true, true);
                 }
               }
-            }, 300);
-          }
-        });
-        list.setCellRenderer(new ListCellRenderer() {
-          final JBLabel label = new JBLabel();
+            })
+            .createPopup();
 
-          @Override
-          public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
-            final ToolWindow toolWindow = (ToolWindow)value;
-            label.setText(toolWindow instanceof ToolWindowImpl ? ((ToolWindowImpl)toolWindow).getId() : toolWindow.getTitle());
-            label.setIcon(toolWindow.getIcon());
-            label.setBorder(IdeBorderFactory.createEmptyBorder(4, 10, 4, 10));
-            label.setForeground(UIUtil.getListForeground(isSelected));
-            label.setBackground(UIUtil.getListBackground(isSelected));
-            final JPanel panel = new JPanel(new BorderLayout());
-            panel.add(label, BorderLayout.CENTER);
-            panel.setBackground(UIUtil.getListBackground(isSelected));
-            return panel;
-          }
-        });
-
-        final Dimension size = list.getPreferredSize();
-        final JComponent c = ToolWindowsWidget.this;
-        final RelativePoint point = new RelativePoint(c, new Point(-4, -10 - size.height));
-
-
-        if (popup != null && popup.isVisible()) {
-          return;
+          popup.show(point);
         }
-
-        list.setSelectedIndex(list.getItemsCount() - 1);
-        popup = JBPopupFactory.getInstance().createListPopupBuilder(list)
-          .setAutoselectOnMouseMove(true)
-          .setItemChoosenCallback(new Runnable() {
-            @Override
-            public void run() {
-              if (popup != null) popup.closeOk(null);
-              final Object value = list.getSelectedValue();
-              if (value instanceof ToolWindow) {
-                ((ToolWindow)value).activate(null, true, true);
-              }
-            }
-          })
-          .createPopup();
-
-        popup.show(point);
-      }
-    }, 300);
+      }, 300);
+    }
   }
 
   @Override
diff --git a/platform/platform-resources-en/src/messages/UIBundle.properties b/platform/platform-resources-en/src/messages/UIBundle.properties
index 14c7351..04a5c32 100644
--- a/platform/platform-resources-en/src/messages/UIBundle.properties
+++ b/platform/platform-resources-en/src/messages/UIBundle.properties
@@ -89,7 +89,7 @@
 
 file.chooser.default.title=Select Path
 file.chooser.save.dialog.default.title=Select File to Save
-file.chooser.save.dialog.confirmation={0} is already exists.\nDo you want to replace it?
+file.chooser.save.dialog.confirmation={0} already exists.\nDo you want to replace it?
 file.chooser.save.dialog.confirmation.title=Confirm Save as
 file.chooser.select.object.title=Select {0}
 delete.dialog.title=Delete
diff --git a/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentRuntime.java b/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentRuntime.java
index 6bae6c8..7a6cbd1 100644
--- a/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentRuntime.java
+++ b/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/DeploymentRuntime.java
@@ -6,13 +6,12 @@
 /**
  * @author nik
  */
-public class DeploymentRuntime {
+public abstract class DeploymentRuntime {
   public boolean isUndeploySupported() {
-    return false;
+    return true;
   }
 
-  public void undeploy(@NotNull UndeploymentTaskCallback callback) {
-  }
+  public abstract void undeploy(@NotNull UndeploymentTaskCallback callback);
 
   public interface UndeploymentTaskCallback extends RemoteOperationCallback {
     void succeeded();
diff --git a/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/ServerRuntimeInstance.java b/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/ServerRuntimeInstance.java
index b54e564..499ec74 100644
--- a/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/ServerRuntimeInstance.java
+++ b/platform/remote-servers/api/src/com/intellij/remoteServer/runtime/deployment/ServerRuntimeInstance.java
@@ -2,12 +2,9 @@
 
 import com.intellij.remoteServer.configuration.deployment.DeploymentConfiguration;
 import com.intellij.remoteServer.configuration.deployment.DeploymentSource;
-import com.intellij.remoteServer.runtime.Deployment;
 import com.intellij.remoteServer.runtime.RemoteOperationCallback;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.List;
-
 /**
  * @author nik
  */
@@ -15,7 +12,7 @@
 
   public abstract void deploy(@NotNull DeploymentTask<D> task, @NotNull DeploymentOperationCallback callback);
 
-  public abstract void computeDeployments(@NotNull ComputeDeploymentsCallback deployments);
+  public abstract void computeDeployments(@NotNull ComputeDeploymentsCallback callback);
 
   @NotNull
   public String getDeploymentName(@NotNull DeploymentSource source) {
@@ -29,6 +26,7 @@
   }
 
   public interface ComputeDeploymentsCallback extends RemoteOperationCallback {
-    void succeeded(@NotNull List<Deployment> deployments);
+    void addDeployment(@NotNull String deploymentName);
+    void succeeded();
   }
 }
diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java
index f4de05e..ea83602 100644
--- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java
+++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java
@@ -121,11 +121,18 @@
       @Override
       public void connected(@NotNull ServerRuntimeInstance<D> instance) {
         instance.computeDeployments(new ServerRuntimeInstance.ComputeDeploymentsCallback() {
+          private final List<Deployment> myDeployments = new ArrayList<Deployment>();
+
           @Override
-          public void succeeded(@NotNull List<Deployment> deployments) {
+          public void addDeployment(@NotNull String deploymentName) {
+            myDeployments.add(new DeploymentImpl(deploymentName, DeploymentStatus.DEPLOYED, null, null));
+          }
+
+          @Override
+          public void succeeded() {
             synchronized (myRemoteDeployments) {
               myRemoteDeployments.clear();
-              for (Deployment deployment : deployments) {
+              for (Deployment deployment : myDeployments) {
                 myRemoteDeployments.put(deployment.getName(), deployment);
               }
             }
@@ -155,7 +162,7 @@
     runtime.undeploy(new DeploymentRuntime.UndeploymentTaskCallback() {
       @Override
       public void succeeded() {
-        myLocalDeployments.put(deploymentName, new DeploymentImpl(deploymentName, DeploymentStatus.NOT_DEPLOYED, null, null));
+        myLocalDeployments.remove(deploymentName);
         myEventDispatcher.queueDeploymentsChanged(ServerConnectionImpl.this);
       }
 
diff --git a/xml/dom-openapi/src/com/intellij/util/xml/converters/DelimitedListProcessor.java b/platform/util/src/com/intellij/openapi/util/text/DelimitedListProcessor.java
similarity index 97%
rename from xml/dom-openapi/src/com/intellij/util/xml/converters/DelimitedListProcessor.java
rename to platform/util/src/com/intellij/openapi/util/text/DelimitedListProcessor.java
index ba05968..07142b4 100644
--- a/xml/dom-openapi/src/com/intellij/util/xml/converters/DelimitedListProcessor.java
+++ b/platform/util/src/com/intellij/openapi/util/text/DelimitedListProcessor.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.intellij.util.xml.converters;
+package com.intellij.openapi.util.text;
 
 import org.jetbrains.annotations.NotNull;
 
diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java
index 82bd5a4..afafbaf 100644
--- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java
+++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java
@@ -248,7 +248,6 @@
     return html.replaceAll("<(.|\n)*?>", "");
   }
 
-  @Nullable
   public static String toLowerCase(@Nullable final String str) {
     //noinspection ConstantConditions
     return str == null ? null : str.toLowerCase();
diff --git a/plugins/android/lib/guava-13.0.1.jar b/plugins/android/lib/guava-13.0.1.jar
deleted file mode 100644
index 09c5449..0000000
--- a/plugins/android/lib/guava-13.0.1.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/android/lib/jarutils.jar b/plugins/android/lib/jarutils.jar
deleted file mode 100644
index 1259ccf..0000000
--- a/plugins/android/lib/jarutils.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/github/src/META-INF/github-tracker.xml b/plugins/github/src/META-INF/github-tracker.xml
index e33dd36..9264670 100644
--- a/plugins/github/src/META-INF/github-tracker.xml
+++ b/plugins/github/src/META-INF/github-tracker.xml
@@ -1,6 +1,6 @@
 <idea-plugin version="2">
   <extensions defaultExtensionNs="com.intellij">
-    <checkoutCompletedListener implementation="org.jetbrains.plugins.github.GithubCheckoutListener"
+    <checkoutCompletedListener implementation="org.jetbrains.plugins.github.extensions.GithubCheckoutListener"
                                order="after PlatformProjectCheckoutListener"/>
     <tasks.repositoryType implementation="org.jetbrains.plugins.github.tasks.GithubRepositoryType"/>
   </extensions>
diff --git a/plugins/github/src/META-INF/plugin.xml b/plugins/github/src/META-INF/plugin.xml
index cc74486..86240aa 100644
--- a/plugins/github/src/META-INF/plugin.xml
+++ b/plugins/github/src/META-INF/plugin.xml
@@ -10,19 +10,19 @@
 
   <extensions defaultExtensionNs="com.intellij">
     <errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
-    <checkoutProvider implementation="org.jetbrains.plugins.github.GithubCheckoutProvider"/>
-    <applicationService serviceInterface="org.jetbrains.plugins.github.GithubSettings"
-                        serviceImplementation="org.jetbrains.plugins.github.GithubSettings"/>
-    <vcsAnnotationGutterActionProvider implementation="org.jetbrains.plugins.github.GithubAnnotationGutterActionProvider" />
-    <checkoutCompletedListener implementation="org.jetbrains.plugins.github.GithubCheckoutListener" order="after PlatformProjectCheckoutListener"/>
+    <checkoutProvider implementation="org.jetbrains.plugins.github.extensions.GithubCheckoutProvider"/>
+    <applicationService serviceInterface="org.jetbrains.plugins.github.util.GithubSettings"
+                        serviceImplementation="org.jetbrains.plugins.github.util.GithubSettings"/>
+    <vcsAnnotationGutterActionProvider implementation="org.jetbrains.plugins.github.extensions.GithubAnnotationGutterActionProvider" />
+    <checkoutCompletedListener implementation="org.jetbrains.plugins.github.extensions.GithubCheckoutListener" order="after PlatformProjectCheckoutListener"/>
     <vcsConfigurableProvider implementation="org.jetbrains.plugins.github.ui.GithubSettingsConfigurable"/>
 
-    <applicationService serviceInterface="org.jetbrains.plugins.github.GithubSslSupport"
-                        serviceImplementation="org.jetbrains.plugins.github.GithubSslSupport"/>
+    <applicationService serviceInterface="org.jetbrains.plugins.github.util.GithubSslSupport"
+                        serviceImplementation="org.jetbrains.plugins.github.util.GithubSslSupport"/>
   </extensions>
 
   <extensions defaultExtensionNs="Git4Idea">
-    <GitHttpAuthDataProvider implementation="org.jetbrains.plugins.github.GithubHttpAuthDataProvider" />
+    <GitHttpAuthDataProvider implementation="org.jetbrains.plugins.github.extensions.GithubHttpAuthDataProvider" />
   </extensions>
 
   <actions>
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubCreateGistAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubCreateGistAction.java
index 0ca65ea..5983302 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubCreateGistAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubCreateGistAction.java
@@ -25,7 +25,6 @@
 import com.intellij.openapi.fileEditor.FileDocumentManager;
 import com.intellij.openapi.fileTypes.FileTypeManager;
 import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
 import com.intellij.openapi.progress.Task;
 import com.intellij.openapi.project.DumbAwareAction;
 import com.intellij.openapi.project.Project;
@@ -34,12 +33,17 @@
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vcs.changes.ChangeListManager;
 import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.util.ThrowableConvertor;
 import icons.GithubIcons;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.plugins.github.api.GithubApiUtil;
 import org.jetbrains.plugins.github.api.GithubGist;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationCanceledException;
 import org.jetbrains.plugins.github.ui.GithubCreateGistDialog;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import java.io.IOException;
 import java.util.*;
@@ -106,17 +110,27 @@
       return;
     }
 
-    final GithubAuthData auth = dialog.isAnonymous() ? GithubAuthData.createAnonymous() : getValidAuthData(project);
-    if (auth == null) {
-      return;
+    GithubAuthData auth = GithubAuthData.createAnonymous();
+    if (!dialog.isAnonymous()) {
+      try {
+        auth = getValidAuthData(project);
+      }
+      catch (GithubAuthenticationCanceledException e) {
+        return;
+      }
+      catch (IOException e) {
+        GithubNotifications.showError(project, "Can't create gist", e);
+        return;
+      }
     }
 
     final Ref<String> url = new Ref<String>();
+    final GithubAuthData finalAuth = auth;
     new Task.Backgroundable(project, "Creating Gist...") {
       @Override
       public void run(@NotNull ProgressIndicator indicator) {
         List<FileContent> contents = collectContents(project, editor, file, files);
-        String gistUrl = createGist(project, auth, contents, dialog.isPrivate(), dialog.getDescription(), dialog.getFileName());
+        String gistUrl = createGist(project, finalAuth, contents, dialog.isPrivate(), dialog.getDescription(), dialog.getFileName());
         url.set(gistUrl);
       }
 
@@ -135,15 +149,15 @@
     }.queue();
   }
 
-  @Nullable
-  private static GithubAuthData getValidAuthData(@NotNull final Project project) {
-    final Ref<GithubAuthData> authDataRef = new Ref<GithubAuthData>();
-    ProgressManager.getInstance().run(new Task.Modal(project, "Access to GitHub", true) {
-      public void run(@NotNull ProgressIndicator indicator) {
-        authDataRef.set(GithubUtil.getValidAuthDataFromConfig(project, indicator));
-      }
-    });
-    return authDataRef.get();
+  @NotNull
+  private static GithubAuthData getValidAuthData(@NotNull final Project project) throws IOException {
+    return GithubUtil.computeValueInModal(project, "Access to GitHub",
+                                          new ThrowableConvertor<ProgressIndicator, GithubAuthData, IOException>() {
+                                            @Override
+                                            public GithubAuthData convert(ProgressIndicator indicator) throws IOException {
+                                              return GithubUtil.getValidAuthDataFromConfig(project, indicator);
+                                            }
+                                          });
   }
 
   @NotNull
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java
index 99bf9af..ec135c2 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java
@@ -21,7 +21,6 @@
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
 import com.intellij.openapi.progress.Task;
 import com.intellij.openapi.project.DumbAwareAction;
 import com.intellij.openapi.project.Project;
@@ -39,6 +38,7 @@
 import com.intellij.util.Function;
 
 import com.intellij.util.ThrowableConsumer;
+import com.intellij.util.ThrowableConvertor;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.containers.HashSet;
 import com.intellij.util.ui.UIUtil;
@@ -58,7 +58,12 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.plugins.github.api.*;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationCanceledException;
 import org.jetbrains.plugins.github.ui.GithubCreatePullRequestDialog;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubUrlUtil;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import javax.swing.*;
 import java.awt.*;
@@ -66,7 +71,7 @@
 import java.util.*;
 import java.util.List;
 
-import static org.jetbrains.plugins.github.GithubUtil.setVisibleEnabled;
+import static org.jetbrains.plugins.github.util.GithubUtil.setVisibleEnabled;
 
 /**
  * @author Aleksey Pivovarov
@@ -212,35 +217,31 @@
   private static GithubInfo loadGithubInfoWithModal(@NotNull final Project project,
                                                     @NotNull final GithubFullPath userAndRepo,
                                                     @Nullable final GithubFullPath upstreamUserAndRepo) {
-    final Ref<GithubInfo> githubInfoRef = new Ref<GithubInfo>();
-    final Ref<IOException> exceptionRef = new Ref<IOException>();
-    ProgressManager.getInstance().run(new Task.Modal(project, "Access to GitHub", true) {
-      public void run(@NotNull ProgressIndicator indicator) {
-        try {
-          final Ref<GithubRepoDetailed> reposRef = new Ref<GithubRepoDetailed>();
-          final GithubAuthData auth =
-            GithubUtil.runAndGetValidAuth(project, indicator, new ThrowableConsumer<GithubAuthData, IOException>() {
-              @Override
-              public void consume(GithubAuthData authData) throws IOException {
-                reposRef.set(GithubApiUtil.getDetailedRepoInfo(authData, userAndRepo.getUser(), userAndRepo.getRepository()));
-              }
-            });
-          List<RemoteBranch> branches = loadAvailableBranchesFromGithub(project, auth, reposRef.get(), upstreamUserAndRepo);
-          githubInfoRef.set(new GithubInfo(auth, reposRef.get(), branches));
-        }
-        catch (IOException e) {
-          exceptionRef.set(e);
-        }
-      }
-    });
-    if (!exceptionRef.isNull()) {
-      if (exceptionRef.get() instanceof GithubAuthenticationCanceledException) {
-        return null;
-      }
-      GithubNotifications.showErrorDialog(project, CANNOT_CREATE_PULL_REQUEST, exceptionRef.get());
+    try {
+      return GithubUtil
+        .computeValueInModal(project, "Access to GitHub", new ThrowableConvertor<ProgressIndicator, GithubInfo, IOException>() {
+          @Override
+          public GithubInfo convert(ProgressIndicator indicator) throws IOException {
+            final Ref<GithubRepoDetailed> reposRef = new Ref<GithubRepoDetailed>();
+            final GithubAuthData auth =
+              GithubUtil.runAndGetValidAuth(project, indicator, new ThrowableConsumer<GithubAuthData, IOException>() {
+                @Override
+                public void consume(GithubAuthData authData) throws IOException {
+                  reposRef.set(GithubApiUtil.getDetailedRepoInfo(authData, userAndRepo.getUser(), userAndRepo.getRepository()));
+                }
+              });
+            List<RemoteBranch> branches = loadAvailableBranchesFromGithub(project, auth, reposRef.get(), upstreamUserAndRepo);
+            return new GithubInfo(auth, reposRef.get(), branches);
+          }
+        });
+    }
+    catch (GithubAuthenticationCanceledException e) {
       return null;
     }
-    return githubInfoRef.get();
+    catch (IOException e) {
+      GithubNotifications.showErrorDialog(project, CANNOT_CREATE_PULL_REQUEST, e);
+      return null;
+    }
   }
 
   @Nullable
@@ -436,21 +437,21 @@
                                       @NotNull final GitRepository repository,
                                       @NotNull final String currentBranch,
                                       @NotNull final String targetBranch) {
-    final Ref<DiffInfo> infoRef = new Ref<DiffInfo>();
-    ProgressManager.getInstance().run(new Task.Modal(project, "Access to GitHub", true) {
-      public void run(@NotNull ProgressIndicator indicator) {
-        try {
+    try {
+      return GithubUtil.computeValueInModal(project, "Access to Git", new ThrowableConvertor<ProgressIndicator, DiffInfo, VcsException>() {
+        @Override
+        public DiffInfo convert(ProgressIndicator indicator) throws VcsException {
           List<GitCommit> commits = GitHistoryUtils.history(project, repository.getRoot(), targetBranch + "..");
           Collection<Change> diff =
             GitChangeUtils.getDiff(repository.getProject(), repository.getRoot(), targetBranch, currentBranch, null);
-          infoRef.set(new DiffInfo(targetBranch, currentBranch, commits, diff));
+          return new DiffInfo(targetBranch, currentBranch, commits, diff);
         }
-        catch (VcsException e) {
-          LOG.info(e);
-        }
-      }
-    });
-    return infoRef.get();
+      });
+    }
+    catch (VcsException e) {
+      LOG.info(e);
+      return null;
+    }
   }
 
   private static class GithubCreatePullRequestDiffDialog extends DialogWrapper {
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java
index f1b7d30..4399bae 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java
@@ -33,8 +33,11 @@
 import icons.GithubIcons;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubUrlUtil;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
-import static org.jetbrains.plugins.github.GithubUtil.setVisibleEnabled;
+import static org.jetbrains.plugins.github.util.GithubUtil.setVisibleEnabled;
 
 /**
  * Created by IntelliJ IDEA.
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java
index a9edef5..1db546b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java
@@ -44,11 +44,13 @@
 import org.jetbrains.plugins.github.api.GithubApiUtil;
 import org.jetbrains.plugins.github.api.GithubFullPath;
 import org.jetbrains.plugins.github.api.GithubRepoDetailed;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationCanceledException;
+import org.jetbrains.plugins.github.util.*;
 
 import java.io.IOException;
 import java.util.Collections;
 
-import static org.jetbrains.plugins.github.GithubUtil.setVisibleEnabled;
+import static org.jetbrains.plugins.github.util.GithubUtil.setVisibleEnabled;
 
 /**
  * Created by IntelliJ IDEA.
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java
index 3893969..5aa1934 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java
@@ -20,7 +20,6 @@
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
 import com.intellij.openapi.progress.Task;
 import com.intellij.openapi.project.DumbAwareAction;
 import com.intellij.openapi.project.Project;
@@ -33,6 +32,7 @@
 import com.intellij.openapi.vcs.ui.CommitMessage;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.util.ThrowableConsumer;
+import com.intellij.util.ThrowableConvertor;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.containers.HashSet;
 import com.intellij.vcsUtil.VcsFileUtil;
@@ -51,13 +51,18 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.plugins.github.api.*;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationCanceledException;
 import org.jetbrains.plugins.github.ui.GithubShareDialog;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubUrlUtil;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import javax.swing.*;
 import java.io.IOException;
 import java.util.*;
 
-import static org.jetbrains.plugins.github.GithubUtil.setVisibleEnabled;
+import static org.jetbrains.plugins.github.util.GithubUtil.setVisibleEnabled;
 
 /**
  * @author oleg
@@ -192,42 +197,38 @@
 
   @Nullable
   private static GithubInfo loadGithubInfoWithModal(@NotNull final Project project) {
-    final Ref<GithubInfo> githubInfoRef = new Ref<GithubInfo>();
-    final Ref<IOException> exceptionRef = new Ref<IOException>();
-    ProgressManager.getInstance().run(new Task.Modal(project, "Access to GitHub", true) {
-      public void run(@NotNull ProgressIndicator indicator) {
-        try {
-          // get existing github repos (network) and validate auth data
-          final Ref<List<GithubRepo>> availableReposRef = new Ref<List<GithubRepo>>();
-          final GithubAuthData auth =
-            GithubUtil.runAndGetValidAuth(project, indicator, new ThrowableConsumer<GithubAuthData, IOException>() {
-              @Override
-              public void consume(GithubAuthData authData) throws IOException {
-                availableReposRef.set(GithubApiUtil.getAvailableRepos(authData));
-              }
-            });
-          final HashSet<String> names = new HashSet<String>();
-          for (GithubRepo info : availableReposRef.get()) {
-            names.add(info.getName());
-          }
+    try {
+      return GithubUtil
+        .computeValueInModal(project, "Access to GitHub", new ThrowableConvertor<ProgressIndicator, GithubInfo, IOException>() {
+          @Override
+          public GithubInfo convert(ProgressIndicator indicator) throws IOException {
+            // get existing github repos (network) and validate auth data
+            final Ref<List<GithubRepo>> availableReposRef = new Ref<List<GithubRepo>>();
+            final GithubAuthData auth =
+              GithubUtil.runAndGetValidAuth(project, indicator, new ThrowableConsumer<GithubAuthData, IOException>() {
+                @Override
+                public void consume(GithubAuthData authData) throws IOException {
+                  availableReposRef.set(GithubApiUtil.getUserRepos(authData));
+                }
+              });
+            final HashSet<String> names = new HashSet<String>();
+            for (GithubRepo info : availableReposRef.get()) {
+              names.add(info.getName());
+            }
 
-          // check access to private repos (network)
-          final GithubUserDetailed userInfo = GithubApiUtil.getCurrentUserDetailed(auth);
-          githubInfoRef.set(new GithubInfo(auth, userInfo, names));
-        }
-        catch (IOException e) {
-          exceptionRef.set(e);
-        }
-      }
-    });
-    if (!exceptionRef.isNull()) {
-      if (exceptionRef.get() instanceof GithubAuthenticationCanceledException) {
-        return null;
-      }
-      GithubNotifications.showErrorDialog(project, "Failed to connect to GitHub", exceptionRef.get());
+            // check access to private repos (network)
+            final GithubUserDetailed userInfo = GithubApiUtil.getCurrentUserDetailed(auth);
+            return new GithubInfo(auth, userInfo, names);
+          }
+        });
+    }
+    catch (GithubAuthenticationCanceledException e) {
       return null;
     }
-    return githubInfoRef.get();
+    catch (IOException e) {
+      GithubNotifications.showErrorDialog(project, "Failed to connect to GitHub", e);
+      return null;
+    }
   }
 
   @Nullable
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserAction.java
index 4e8970e..1dc7aad 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserAction.java
@@ -22,6 +22,9 @@
 import git4idea.repo.GitRepository;
 import icons.GithubIcons;
 import org.jetbrains.plugins.github.api.GithubFullPath;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubUrlUtil;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 /**
  * @author Kirill Likhodedov
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromAnnotateAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromAnnotateAction.java
index 9f0b394..0b02a0b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromAnnotateAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromAnnotateAction.java
@@ -30,6 +30,7 @@
 import git4idea.repo.GitRepository;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 /**
  * @author Kirill Likhodedov
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromLogAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromLogAction.java
index dfb4727..139716e 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromLogAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubShowCommitInBrowserFromLogAction.java
@@ -25,6 +25,7 @@
 import git4idea.repo.GitRepository;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 /**
  * @author Kirill Likhodedov
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java
index 50da928..ba7a8cd 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java
@@ -26,12 +26,15 @@
 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.*;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationException;
+import org.jetbrains.plugins.github.exceptions.GithubJsonException;
+import org.jetbrains.plugins.github.exceptions.GithubStatusCodeException;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubSslSupport;
+import org.jetbrains.plugins.github.util.GithubUrlUtil;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
+import java.io.*;
 import java.net.URLEncoder;
 import java.util.*;
 
@@ -234,7 +237,7 @@
       return new JsonParser().parse(reader);
     }
     catch (JsonSyntaxException jse) {
-      throw new JsonException(String.format("Couldn't parse GitHub response:%n%s", githubResponse), jse);
+      throw new GithubJsonException("Couldn't parse GitHub response", jse);
     }
     finally {
       reader.close();
@@ -274,12 +277,12 @@
    */
 
   static <Raw extends DataConstructor, Result> Result createDataFromRaw(@NotNull Raw rawObject, @NotNull Class<Result> resultClass)
-    throws JsonException {
+    throws GithubJsonException {
     try {
       return rawObject.create(resultClass);
     }
     catch (Exception e) {
-      throw new JsonException("Json parse error", e);
+      throw new GithubJsonException("Json parse error", e);
     }
   }
 
@@ -316,7 +319,7 @@
       }
 
       if (!response.getJsonElement().isJsonArray()) {
-        throw new JsonException("Wrong json type: expected JsonArray");
+        throw new GithubJsonException("Wrong json type: expected JsonArray", new Exception(response.getJsonElement().toString()));
       }
 
       myNextPage = response.getNextPage();
@@ -345,7 +348,7 @@
   @NotNull
   private static <T> T fromJson(@Nullable JsonElement json, @NotNull Class<T> classT) throws IOException {
     if (json == null) {
-      throw new JsonException("Unexpected empty response");
+      throw new GithubJsonException("Unexpected empty response");
     }
 
     T res;
@@ -355,13 +358,13 @@
       res = (T)gson.fromJson(json, classT);
     }
     catch (ClassCastException e) {
-      throw new JsonException("Parse exception while converting JSON to object " + classT.toString(), e);
+      throw new GithubJsonException("Parse exception while converting JSON to object " + classT.toString(), e);
     }
     catch (JsonParseException e) {
-      throw new JsonException("Parse exception while converting JSON to object " + classT.toString(), e);
+      throw new GithubJsonException("Parse exception while converting JSON to object " + classT.toString(), e);
     }
     if (res == null) {
-      throw new JsonException("Empty Json response");
+      throw new GithubJsonException("Empty Json response");
     }
     return res;
   }
@@ -432,19 +435,8 @@
   }
 
   @NotNull
-  public static List<GithubRepo> getAvailableRepos(@NotNull GithubAuthData auth) throws IOException {
-    return doGetAvailableRepos(auth, null);
-  }
-
-  @NotNull
-  public static List<GithubRepo> getAvailableRepos(@NotNull GithubAuthData auth, @NotNull String user) throws IOException {
-    return doGetAvailableRepos(auth, user);
-  }
-
-  @NotNull
-  private static List<GithubRepo> doGetAvailableRepos(@NotNull GithubAuthData auth, @Nullable String user) throws IOException {
-    String path = user == null ? "/user/repos" : "/users/" + user + "/repos?" + PER_PAGE;
-
+  public static List<GithubRepo> getUserRepos(@NotNull GithubAuthData auth) throws IOException {
+    String path = "/user/repos?" + PER_PAGE;
 
     PagedRequest<GithubRepo> request = new PagedRequest<GithubRepo>(path, GithubRepo.class, GithubRepoRaw[].class);
 
@@ -452,6 +444,37 @@
   }
 
   @NotNull
+  public static List<GithubRepo> getUserRepos(@NotNull GithubAuthData auth, @NotNull String user) throws IOException {
+    String path = "/users/" + user + "/repos?" + PER_PAGE;
+
+    PagedRequest<GithubRepo> request = new PagedRequest<GithubRepo>(path, GithubRepo.class, GithubRepoRaw[].class);
+
+    return request.getAll(auth);
+  }
+
+  @NotNull
+  public static List<GithubRepo> getAvailableRepos(@NotNull GithubAuthData auth) throws IOException {
+    List<GithubRepo> repos = new ArrayList<GithubRepo>();
+
+    repos.addAll(getUserRepos(auth));
+
+    String path = "/user/orgs?" + PER_PAGE;
+    PagedRequest<GithubOrg> request = new PagedRequest<GithubOrg>(path, GithubOrg.class, GithubOrgRaw[].class);
+
+    for (GithubOrg org : request.getAll(auth)) {
+      String pathOrg = "/orgs/" + org.getLogin() + "/repos?type=member&" + PER_PAGE;
+      PagedRequest<GithubRepo> requestOrg = new PagedRequest<GithubRepo>(pathOrg, GithubRepo.class, GithubRepoRaw[].class);
+      repos.addAll(requestOrg.getAll(auth));
+    }
+
+    String pathWatched = "/user/subscriptions?" + PER_PAGE;
+    PagedRequest<GithubRepo> requestWatched = new PagedRequest<GithubRepo>(pathWatched, GithubRepo.class, GithubRepoRaw[].class);
+    repos.addAll(requestWatched.getAll(auth));
+
+    return repos;
+  }
+
+  @NotNull
   public static GithubRepoDetailed getDetailedRepoInfo(@NotNull GithubAuthData auth, @NotNull String owner, @NotNull String name)
     throws IOException {
     final String request = "/repos/" + owner + "/" + name;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubBranchRaw.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubBranchRaw.java
index 4187ae0..e1892c6 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubBranchRaw.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubBranchRaw.java
@@ -22,7 +22,7 @@
  * @author Aleksey Pivovarov
  */
 @SuppressWarnings("UnusedDeclaration")
-public class GithubBranchRaw implements DataConstructor {
+class GithubBranchRaw implements DataConstructor {
   @Nullable public String name;
 
   @SuppressWarnings("ConstantConditions")
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubFileRaw.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubFileRaw.java
index 52e351f..d0ae9cf 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubFileRaw.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubFileRaw.java
@@ -22,7 +22,7 @@
  * @author Aleksey Pivovarov
  */
 @SuppressWarnings("UnusedDeclaration")
-public class GithubFileRaw implements DataConstructor {
+class GithubFileRaw implements DataConstructor {
   @Nullable public String filename;
 
   @Nullable public Integer additions;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubIssuesSearchResultRaw.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubIssuesSearchResultRaw.java
index 60c9131..7656832c 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubIssuesSearchResultRaw.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubIssuesSearchResultRaw.java
@@ -24,7 +24,7 @@
  * @author Aleksey Pivovarov
  */
 @SuppressWarnings("UnusedDeclaration")
-public class GithubIssuesSearchResultRaw implements DataConstructor {
+class GithubIssuesSearchResultRaw implements DataConstructor {
   List<GithubIssueRaw> items;
 
   @NotNull
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubStatusCodeException.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubOrg.java
similarity index 69%
copy from plugins/github/src/org/jetbrains/plugins/github/api/GithubStatusCodeException.java
copy to plugins/github/src/org/jetbrains/plugins/github/api/GithubOrg.java
index 3b15c00..7a691fb 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubStatusCodeException.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubOrg.java
@@ -15,20 +15,20 @@
  */
 package org.jetbrains.plugins.github.api;
 
-import java.io.IOException;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * @author Aleksey Pivovarov
  */
-public class GithubStatusCodeException extends IOException {
-  private final int myStatusCode;
+public class GithubOrg {
+  @NotNull String myLogin;
 
-  public GithubStatusCodeException(String message, int statusCode) {
-    super(message);
-    myStatusCode = statusCode;
+  public GithubOrg(@NotNull String login) {
+    myLogin = login;
   }
 
-  public int getStatusCode() {
-    return myStatusCode;
+  @NotNull
+  public String getLogin() {
+    return myLogin;
   }
 }
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubOrgRaw.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubOrgRaw.java
new file mode 100644
index 0000000..db4bf16
--- /dev/null
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubOrgRaw.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.github.api;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Aleksey Pivovarov
+ */
+@SuppressWarnings("UnusedDeclaration")
+class GithubOrgRaw implements DataConstructor {
+  @Nullable public String login;
+  @Nullable public Long id;
+  @Nullable public String url;
+
+  @SuppressWarnings("ConstantConditions")
+  @NotNull
+  public GithubOrg createGithubOrg() {
+    return new GithubOrg(login);
+  }
+
+  @SuppressWarnings("unchecked")
+  @NotNull
+  @Override
+  public <T> T create(@NotNull Class<T> resultClass) {
+    if (resultClass.isAssignableFrom(GithubOrg.class)) {
+      return (T)createGithubOrg();
+    }
+
+    throw new ClassCastException(this.getClass().getName() + ": bad class type: " + resultClass.getName());
+  }
+}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubPullRequestRequest.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubPullRequestRequest.java
index 65662c5..4465f08 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubPullRequestRequest.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubPullRequestRequest.java
@@ -20,7 +20,7 @@
 /**
  * @author Aleksey Pivovarov
  */
-public class GithubPullRequestRequest {
+class GithubPullRequestRequest {
   @NotNull String title;
   @NotNull String body;
   @NotNull String head; // branch with changes
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubRepoOrg.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubRepoOrg.java
new file mode 100644
index 0000000..fda0462
--- /dev/null
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubRepoOrg.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.github.api;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Aleksey Pivovarov
+ */
+public class GithubRepoOrg extends GithubRepo {
+  @NotNull Permissions myPermissions;
+
+  public static class Permissions {
+    private boolean myAdmin;
+    private boolean myPull;
+    private boolean myPush;
+
+    public Permissions(boolean admin, boolean pull, boolean push) {
+      myAdmin = admin;
+      myPull = pull;
+      myPush = push;
+    }
+
+    public boolean isAdmin() {
+      return myAdmin;
+    }
+
+    public boolean isPull() {
+      return myPull;
+    }
+
+    public boolean isPush() {
+      return myPush;
+    }
+  }
+
+  public GithubRepoOrg(@NotNull String name,
+                       @Nullable String description,
+                       boolean isPrivate,
+                       boolean isFork,
+                       @NotNull String htmlUrl,
+                       @NotNull String cloneUrl,
+                       @Nullable String defaultBranch,
+                       @NotNull GithubUser owner,
+                       @NotNull Permissions permissions) {
+    super(name, description, isPrivate, isFork, htmlUrl, cloneUrl, defaultBranch, owner);
+    myPermissions = permissions;
+  }
+}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubRepoRaw.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubRepoRaw.java
index 585890d..513f87b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubRepoRaw.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubRepoRaw.java
@@ -72,6 +72,20 @@
   @Nullable public Date createdAt;
   @Nullable public Date updatedAt;
 
+  @Nullable public Permissions permissions;
+
+  public static class Permissions {
+    @Nullable public Boolean admin;
+    @Nullable public Boolean pull;
+    @Nullable public Boolean push;
+
+    @SuppressWarnings("ConstantConditions")
+    @NotNull
+    public GithubRepoOrg.Permissions create() {
+      return new GithubRepoOrg.Permissions(admin, pull, push);
+    }
+  }
+
   @SuppressWarnings("ConstantConditions")
   @NotNull
   public GithubRepo createRepo() {
@@ -80,6 +94,13 @@
 
   @SuppressWarnings("ConstantConditions")
   @NotNull
+  public GithubRepoOrg createRepoOrg() {
+    return new GithubRepoOrg(name, description, isPrivate, isFork, htmlUrl, cloneUrl, defaultBranch, owner.createUser(),
+                             permissions.create());
+  }
+
+  @SuppressWarnings("ConstantConditions")
+  @NotNull
   public GithubRepoDetailed createRepoDetailed() {
     GithubRepo parent = this.parent == null ? null : this.parent.createRepo();
     GithubRepo source = this.source == null ? null : this.source.createRepo();
@@ -94,6 +115,9 @@
     if (resultClass.isAssignableFrom(GithubRepo.class)) {
       return (T)createRepo();
     }
+    if (resultClass.isAssignableFrom(GithubRepoOrg.class)) {
+      return (T)createRepoOrg();
+    }
     if (resultClass.isAssignableFrom(GithubRepoDetailed.class)) {
       return (T)createRepoDetailed();
     }
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubAuthenticationCanceledException.java b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubAuthenticationCanceledException.java
similarity index 95%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubAuthenticationCanceledException.java
rename to plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubAuthenticationCanceledException.java
index ad78491..69ccfbc 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubAuthenticationCanceledException.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubAuthenticationCanceledException.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.exceptions;
 
 /**
  * @author Aleksey Pivovarov
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubAuthenticationException.java b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubAuthenticationException.java
similarity index 95%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubAuthenticationException.java
rename to plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubAuthenticationException.java
index 70057ce..31f9490 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubAuthenticationException.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubAuthenticationException.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.exceptions;
 
 import java.io.IOException;
 
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/JsonException.java b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubJsonException.java
similarity index 72%
rename from plugins/github/src/org/jetbrains/plugins/github/api/JsonException.java
rename to plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubJsonException.java
index b73c68b..47cc54b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/JsonException.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubJsonException.java
@@ -13,27 +13,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github.api;
+package org.jetbrains.plugins.github.exceptions;
 
 import java.io.IOException;
 
 /**
  * @author Aleksey Pivovarov
  */
-public class JsonException extends IOException {
-  public JsonException() {
+public class GithubJsonException extends IOException {
+  public GithubJsonException() {
     super();
   }
 
-  public JsonException(String message) {
+  public GithubJsonException(String message) {
     super(message);
   }
 
-  public JsonException(String message, Throwable cause) {
+  public GithubJsonException(String message, Throwable cause) {
     super(message, cause);
   }
 
-  public JsonException(Throwable cause) {
+  public GithubJsonException(Throwable cause) {
     super(cause);
   }
 }
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubStatusCodeException.java b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubStatusCodeException.java
similarity index 94%
rename from plugins/github/src/org/jetbrains/plugins/github/api/GithubStatusCodeException.java
rename to plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubStatusCodeException.java
index 3b15c00..bfa074a 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubStatusCodeException.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/exceptions/GithubStatusCodeException.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github.api;
+package org.jetbrains.plugins.github.exceptions;
 
 import java.io.IOException;
 
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubAnnotationGutterActionProvider.java b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubAnnotationGutterActionProvider.java
similarity index 95%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubAnnotationGutterActionProvider.java
rename to plugins/github/src/org/jetbrains/plugins/github/extensions/GithubAnnotationGutterActionProvider.java
index 08cab1d..06a3e8b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubAnnotationGutterActionProvider.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubAnnotationGutterActionProvider.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.extensions;
 
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.vcs.annotate.AnnotationGutterActionProvider;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubCheckoutListener.java b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubCheckoutListener.java
similarity index 94%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubCheckoutListener.java
rename to plugins/github/src/org/jetbrains/plugins/github/extensions/GithubCheckoutListener.java
index b0fcf5f..6af65ac 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubCheckoutListener.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubCheckoutListener.java
@@ -1,4 +1,4 @@
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.extensions;
 
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.startup.StartupManager;
@@ -11,6 +11,8 @@
 import org.jetbrains.plugins.github.api.GithubFullPath;
 import org.jetbrains.plugins.github.tasks.GithubRepository;
 import org.jetbrains.plugins.github.tasks.GithubRepositoryType;
+import org.jetbrains.plugins.github.util.GithubUrlUtil;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import java.io.File;
 import java.util.ArrayList;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubCheckoutProvider.java b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubCheckoutProvider.java
similarity index 69%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubCheckoutProvider.java
rename to plugins/github/src/org/jetbrains/plugins/github/extensions/GithubCheckoutProvider.java
index f717a01..5858a65 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubCheckoutProvider.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubCheckoutProvider.java
@@ -13,18 +13,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.extensions;
 
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
-import com.intellij.openapi.progress.Task;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.vcs.CheckoutProvider;
 import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.ThrowableConsumer;
+import com.intellij.util.ThrowableConvertor;
 import git4idea.actions.BasicAction;
 import git4idea.checkout.GitCheckoutProvider;
 import git4idea.checkout.GitCloneDialog;
@@ -33,6 +30,10 @@
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.plugins.github.api.GithubApiUtil;
 import org.jetbrains.plugins.github.api.GithubRepo;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationCanceledException;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import java.io.File;
 import java.io.IOException;
@@ -52,27 +53,26 @@
     }
     BasicAction.saveAll();
 
-    final Ref<List<GithubRepo>> repositoryInfoRef = new Ref<List<GithubRepo>>();
-    ProgressManager.getInstance().run(new Task.Modal(project, "Access to GitHub", true) {
-      public void run(@NotNull ProgressIndicator indicator) {
-        try {
-          GithubUtil.runAndGetValidAuth(project, indicator, new ThrowableConsumer<GithubAuthData, IOException>() {
-            @Override
-            public void consume(GithubAuthData authData) throws IOException {
-              repositoryInfoRef.set(GithubApiUtil.getAvailableRepos(authData));
-            }
+    List<GithubRepo> availableRepos;
+    try {
+      availableRepos = GithubUtil
+        .computeValueInModal(project, "Access to GitHub", new ThrowableConvertor<ProgressIndicator, List<GithubRepo>, IOException>() {
+          @Override
+          public List<GithubRepo> convert(ProgressIndicator indicator) throws IOException {
+            return GithubUtil.runWithValidAuth(project, indicator, new ThrowableConvertor<GithubAuthData, List<GithubRepo>, IOException>() {
+              @Override
+              public List<GithubRepo> convert(GithubAuthData authData) throws IOException {
+                return GithubApiUtil.getAvailableRepos(authData);
+              }
             });
-        }
-        catch (GithubAuthenticationCanceledException e) {
-          // no error message
-        }
-        catch (IOException e) {
-          GithubNotifications.showError(project, "Couldn't get the list of GitHub repositories", e);
-        }
-      }
-    });
-    final List<GithubRepo> availableRepos = repositoryInfoRef.get();
-    if (availableRepos == null){
+          }
+        });
+    }
+    catch (GithubAuthenticationCanceledException e) {
+      return;
+    }
+    catch (IOException e) {
+      GithubNotifications.showError(project, "Couldn't get the list of GitHub repositories", e);
       return;
     }
     Collections.sort(availableRepos, new Comparator<GithubRepo>() {
@@ -85,6 +85,7 @@
 
     final GitCloneDialog dialog = new GitCloneDialog(project);
     // Add predefined repositories to history
+    dialog.prependToHistory("-----------------------------------------------");
     for (int i = availableRepos.size() - 1; i>=0; i--){
       dialog.prependToHistory(availableRepos.get(i).getCloneUrl());
     }
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubHttpAuthDataProvider.java b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubHttpAuthDataProvider.java
similarity index 89%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubHttpAuthDataProvider.java
rename to plugins/github/src/org/jetbrains/plugins/github/extensions/GithubHttpAuthDataProvider.java
index b13c9a0..403a92a 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubHttpAuthDataProvider.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/extensions/GithubHttpAuthDataProvider.java
@@ -13,13 +13,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.extensions;
 
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.util.AuthData;
 import git4idea.jgit.GitHttpAuthDataProvider;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubUrlUtil;
 
 /**
  * @author Kirill Likhodedov
diff --git a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
index 8cac256..4f46266 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
@@ -18,8 +18,8 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.plugins.github.api.GithubApiUtil;
-import org.jetbrains.plugins.github.GithubAuthData;
-import org.jetbrains.plugins.github.GithubUtil;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubUtil;
 import org.jetbrains.plugins.github.api.GithubIssue;
 import org.jetbrains.plugins.github.api.GithubIssueComment;
 
diff --git a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java
index 663f6a7..fe63449 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java
@@ -1,7 +1,6 @@
 package org.jetbrains.plugins.github.tasks;
 
 import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
 import com.intellij.openapi.progress.Task;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Ref;
@@ -14,10 +13,10 @@
 import com.intellij.util.ui.FormBuilder;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubAuthData;
-import org.jetbrains.plugins.github.GithubAuthenticationCanceledException;
-import org.jetbrains.plugins.github.GithubNotifications;
-import org.jetbrains.plugins.github.GithubUtil;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationCanceledException;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubUtil;
 import org.jetbrains.plugins.github.api.GithubApiUtil;
 
 import javax.swing.*;
@@ -108,35 +107,27 @@
   }
 
   private void generateToken() {
-    final Ref<String> tokenRef = new Ref<String>();
-    final Ref<IOException> exceptionRef = new Ref<IOException>();
-    ProgressManager.getInstance().run(new Task.Modal(myProject, "Access to GitHub", true) {
-      public void run(@NotNull ProgressIndicator indicator) {
-        try {
-          tokenRef.set(GithubUtil.runWithValidBasicAuthForHost(myProject, indicator, getHost(),
-                                                               new ThrowableConvertor<GithubAuthData, String, IOException>() {
-                                                                 @NotNull
-                                                                 @Override
-                                                                 public String convert(GithubAuthData auth) throws IOException {
-                                                                   return GithubApiUtil
-                                                                     .getReadOnlyToken(auth, getRepoAuthor(), getRepoName(),
-                                                                                       "Intellij tasks plugin");
-                                                                 }
-                                                               }));
-        }
-        catch (IOException e) {
-          exceptionRef.set(e);
-        }
-      }
-    });
-    if (!exceptionRef.isNull()) {
-      if (exceptionRef.get() instanceof GithubAuthenticationCanceledException) {
-        return;
-      }
-      GithubNotifications.showErrorDialog(myProject, "Can't get access token", exceptionRef.get());
-      return;
+    try {
+      myToken.setText(
+        GithubUtil.computeValueInModal(myProject, "Access to GitHub", new ThrowableConvertor<ProgressIndicator, String, IOException>() {
+          @Override
+          public String convert(ProgressIndicator indicator) throws IOException {
+            return GithubUtil
+              .runWithValidBasicAuthForHost(myProject, indicator, getHost(), new ThrowableConvertor<GithubAuthData, String, IOException>() {
+                @NotNull
+                @Override
+                public String convert(GithubAuthData auth) throws IOException {
+                  return GithubApiUtil.getReadOnlyToken(auth, getRepoAuthor(), getRepoName(), "Intellij tasks plugin");
+                }
+              });
+          }
+        }));
     }
-    myToken.setText(tokenRef.get());
+    catch (GithubAuthenticationCanceledException ignore) {
+    }
+    catch (IOException e) {
+      GithubNotifications.showErrorDialog(myProject, "Can't get access token", e);
+    }
   }
 
   @Override
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubBasicLoginDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubBasicLoginDialog.java
index da9a7e9..fac45c5 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubBasicLoginDialog.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubBasicLoginDialog.java
@@ -17,8 +17,8 @@
 
 import com.intellij.openapi.project.Project;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubAuthData;
-import org.jetbrains.plugins.github.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubSettings;
 
 /**
  * @author Aleksey Pivovarov
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java
index a1efdcf..f3d6c5a 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java
@@ -21,7 +21,7 @@
 import com.intellij.openapi.vfs.VirtualFile;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubSettings;
 
 import javax.swing.*;
 
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java
index 0c9d6da..528437e 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java
@@ -23,7 +23,7 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.annotations.TestOnly;
-import org.jetbrains.plugins.github.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubSettings;
 
 import javax.swing.*;
 import java.util.Collection;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginDialog.java
index e7968be..5c31857 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginDialog.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginDialog.java
@@ -5,9 +5,9 @@
 import com.intellij.openapi.ui.DialogWrapper;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubAuthData;
-import org.jetbrains.plugins.github.GithubSettings;
-import org.jetbrains.plugins.github.GithubUtil;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import javax.swing.*;
 import java.io.IOException;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java
index bebf6f7..9141ea7 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java
@@ -25,8 +25,8 @@
 import com.intellij.util.ui.table.ComponentsListFocusTraversalPolicy;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubAuthData;
-import org.jetbrains.plugins.github.GithubUtil;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import javax.swing.*;
 import javax.swing.event.DocumentEvent;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsConfigurable.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsConfigurable.java
index f4c312d..87e137b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsConfigurable.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsConfigurable.java
@@ -7,7 +7,7 @@
 import com.intellij.openapi.vcs.VcsConfigurableProvider;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubSettings;
 
 import javax.swing.*;
 
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java
index 7780797..b1f08bc 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java
@@ -18,17 +18,17 @@
 import com.intellij.ide.BrowserUtil;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.ui.ComboBox;
-import com.intellij.openapi.ui.Messages;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.ui.DocumentAdapter;
 import com.intellij.ui.HyperlinkAdapter;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubAuthData;
-import org.jetbrains.plugins.github.GithubAuthenticationException;
-import org.jetbrains.plugins.github.GithubSettings;
-import org.jetbrains.plugins.github.GithubUtil;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationException;
+import org.jetbrains.plugins.github.util.GithubNotifications;
+import org.jetbrains.plugins.github.util.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubUtil;
 import org.jetbrains.plugins.github.api.GithubUser;
 
 import javax.swing.*;
@@ -84,18 +84,18 @@
         try {
           GithubUser user = GithubUtil.checkAuthData(getAuthData());
           if (GithubAuthData.AuthType.TOKEN.equals(getAuthType())) {
-            Messages.showInfoMessage(myPane, "Connection successful for user " + user.getLogin(), "Success");
+            GithubNotifications.showInfoDialog(myPane, "Connection successful for user " + user.getLogin(), "Success");
           }
           else {
-            Messages.showInfoMessage(myPane, "Connection successful", "Success");
+            GithubNotifications.showInfoDialog(myPane, "Connection successful", "Success");
           }
         }
         catch (GithubAuthenticationException ex) {
-          Messages.showErrorDialog(myPane, "Can't login using given credentials: " + ex.getMessage(), "Login Failure");
+          GithubNotifications.showErrorDialog(myPane, "Can't login using given credentials: " + ex.getMessage(), "Login Failure");
         }
         catch (IOException ex) {
           LOG.info(ex);
-          Messages.showErrorDialog(myPane, "Can't login: " + GithubUtil.getErrorTextFromException(ex), "Login Failure");
+          GithubNotifications.showErrorDialog(myPane, "Can't login: " + GithubUtil.getErrorTextFromException(ex), "Login Failure");
         }
       }
     });
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubAuthData.java b/plugins/github/src/org/jetbrains/plugins/github/util/GithubAuthData.java
similarity index 98%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubAuthData.java
rename to plugins/github/src/org/jetbrains/plugins/github/util/GithubAuthData.java
index c8b16eb..5de9a65 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubAuthData.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/util/GithubAuthData.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.util;
 
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubNotifications.java b/plugins/github/src/org/jetbrains/plugins/github/util/GithubNotifications.java
similarity index 85%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubNotifications.java
rename to plugins/github/src/org/jetbrains/plugins/github/util/GithubNotifications.java
index 790ae36..8cb16c4 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubNotifications.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/util/GithubNotifications.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.util;
 
 import com.intellij.notification.Notification;
 import com.intellij.notification.NotificationListener;
@@ -25,6 +25,8 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.awt.*;
+
 /**
  * @author Aleksey Pivovarov
  */
@@ -102,11 +104,21 @@
     Messages.showInfoMessage(project, message, title);
   }
 
+  public static void showInfoDialog(final @NotNull Component component, final @NotNull String title, final @NotNull String message) {
+    LOG.info(title + "; " + message);
+    Messages.showInfoMessage(component, message, title);
+  }
+
   public static void showWarningDialog(final @Nullable Project project, final @NotNull String title, final @NotNull String message) {
     LOG.info(title + "; " + message);
     Messages.showWarningDialog(project, message, title);
   }
 
+  public static void showWarningDialog(final @NotNull Component component, final @NotNull String title, final @NotNull String message) {
+    LOG.info(title + "; " + message);
+    Messages.showWarningDialog(component, message, title);
+  }
+
   public static void showErrorDialog(final @Nullable Project project, final @NotNull String title, final @NotNull String message) {
     LOG.info(title + "; " + message);
     Messages.showErrorDialog(project, message, title);
@@ -117,6 +129,16 @@
     Messages.showErrorDialog(project, e.getMessage(), title);
   }
 
+  public static void showErrorDialog(final @NotNull Component component, final @NotNull String title, final @NotNull String message) {
+    LOG.info(title + "; " + message);
+    Messages.showErrorDialog(component, message, title);
+  }
+
+  public static void showErrorDialog(final @NotNull Component component, final @NotNull String title, final @NotNull Exception e) {
+    LOG.info(title, e);
+    Messages.showInfoMessage(component, e.getMessage(), title);
+  }
+
   public static int showYesNoDialog(final @Nullable Project project, final @NotNull String title, final @NotNull String message) {
     return Messages.showYesNoDialog(project, message, title, Messages.getQuestionIcon());
   }
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java b/plugins/github/src/org/jetbrains/plugins/github/util/GithubSettings.java
similarity index 98%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java
rename to plugins/github/src/org/jetbrains/plugins/github/util/GithubSettings.java
index 5b599b2..4afb2a9 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/util/GithubSettings.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.util;
 
 import com.intellij.ide.passwordSafe.PasswordSafe;
 import com.intellij.ide.passwordSafe.PasswordSafeException;
@@ -29,7 +29,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import static org.jetbrains.plugins.github.GithubAuthData.AuthType;
+import static org.jetbrains.plugins.github.util.GithubAuthData.AuthType;
 
 /**
  * @author oleg
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubSslSupport.java b/plugins/github/src/org/jetbrains/plugins/github/util/GithubSslSupport.java
similarity index 98%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubSslSupport.java
rename to plugins/github/src/org/jetbrains/plugins/github/util/GithubSslSupport.java
index 4e20aef2..d2aa2f1 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubSslSupport.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/util/GithubSslSupport.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.util;
 
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.ui.Messages;
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubUrlUtil.java b/plugins/github/src/org/jetbrains/plugins/github/util/GithubUrlUtil.java
similarity index 97%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubUrlUtil.java
rename to plugins/github/src/org/jetbrains/plugins/github/util/GithubUrlUtil.java
index 4b11cc5..78d3ab9 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubUrlUtil.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/util/GithubUrlUtil.java
@@ -13,13 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.util;
 
 import com.intellij.openapi.util.text.StringUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.plugins.github.api.GithubApiUtil;
 import org.jetbrains.plugins.github.api.GithubFullPath;
+import org.jetbrains.plugins.github.util.GithubSettings;
 
 /**
  * @author Aleksey Pivovarov
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java b/plugins/github/src/org/jetbrains/plugins/github/util/GithubUtil.java
similarity index 86%
rename from plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java
rename to plugins/github/src/org/jetbrains/plugins/github/util/GithubUtil.java
index da71c4a..829fac7 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/util/GithubUtil.java
@@ -13,12 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.github;
+package org.jetbrains.plugins.github.util;
 
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.progress.ProgressIndicator;
+import com.intellij.openapi.progress.ProgressManager;
+import com.intellij.openapi.progress.Task;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.Ref;
@@ -26,6 +28,7 @@
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.util.ThrowableConsumer;
 import com.intellij.util.ThrowableConvertor;
+import com.intellij.util.ThrowableRunnable;
 import git4idea.GitUtil;
 import git4idea.config.GitVcsApplicationSettings;
 import git4idea.config.GitVersion;
@@ -37,8 +40,11 @@
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.plugins.github.api.GithubApiUtil;
 import org.jetbrains.plugins.github.api.GithubUserDetailed;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationCanceledException;
+import org.jetbrains.plugins.github.exceptions.GithubAuthenticationException;
 import org.jetbrains.plugins.github.ui.GithubBasicLoginDialog;
 import org.jetbrains.plugins.github.ui.GithubLoginDialog;
+import org.jetbrains.plugins.github.util.*;
 
 import java.io.IOException;
 import java.util.List;
@@ -69,9 +75,6 @@
     }
     catch (GithubAuthenticationException e) {
       auth = getValidAuthData(project, indicator);
-      if (auth == null) {
-        throw new GithubAuthenticationCanceledException("Can't get valid credentials");
-      }
       task.consume(auth);
       return auth;
     }
@@ -96,9 +99,6 @@
     }
     catch (GithubAuthenticationException e) {
       auth = getValidAuthData(project, indicator);
-      if (auth == null) {
-        throw new GithubAuthenticationCanceledException("Can't get valid credentials");
-      }
       return task.convert(auth);
     }
     catch (IOException e) {
@@ -126,9 +126,6 @@
     }
     catch (GithubAuthenticationException e) {
       auth = getValidBasicAuthDataForHost(project, indicator, host);
-      if (auth == null) {
-        throw new GithubAuthenticationCanceledException("Can't get valid credentials");
-      }
       return task.convert(auth);
     }
     catch (IOException e) {
@@ -157,8 +154,9 @@
   /**
    * @return null if user canceled login dialog. Valid GithubAuthData otherwise.
    */
-  @Nullable
-  public static GithubAuthData getValidAuthData(@Nullable Project project, @NotNull ProgressIndicator indicator) {
+  @NotNull
+  public static GithubAuthData getValidAuthData(@Nullable Project project, @NotNull ProgressIndicator indicator)
+    throws GithubAuthenticationCanceledException {
     final GithubLoginDialog dialog = new GithubLoginDialog(project);
     ApplicationManager.getApplication().invokeAndWait(new Runnable() {
       @Override
@@ -167,7 +165,7 @@
       }
     }, indicator.getModalityState());
     if (!dialog.isOK()) {
-      return null;
+      throw new GithubAuthenticationCanceledException("Can't get valid credentials");
     }
     return dialog.getAuthData();
   }
@@ -175,10 +173,10 @@
   /**
    * @return null if user canceled login dialog. Valid GithubAuthData otherwise.
    */
-  @Nullable
+  @NotNull
   public static GithubAuthData getValidBasicAuthDataForHost(@Nullable Project project,
-                                                            @NotNull ProgressIndicator indicator,
-                                                            @NotNull String host) {
+                                                            @NotNull ProgressIndicator indicator, @NotNull String host)
+    throws GithubAuthenticationCanceledException {
     final GithubLoginDialog dialog = new GithubBasicLoginDialog(project);
     dialog.lockHost(host);
     ApplicationManager.getApplication().invokeAndWait(new Runnable() {
@@ -188,13 +186,14 @@
       }
     }, indicator.getModalityState());
     if (!dialog.isOK()) {
-      return null;
+      throw new GithubAuthenticationCanceledException("Can't get valid credentials");
     }
     return dialog.getAuthData();
   }
 
-  @Nullable
-  public static GithubAuthData getValidAuthDataFromConfig(@Nullable Project project, @NotNull ProgressIndicator indicator) {
+  @NotNull
+  public static GithubAuthData getValidAuthDataFromConfig(@Nullable Project project, @NotNull ProgressIndicator indicator)
+    throws IOException {
     GithubAuthData auth = GithubSettings.getInstance().getAuthData();
     try {
       checkAuthData(auth);
@@ -203,10 +202,6 @@
     catch (GithubAuthenticationException e) {
       return getValidAuthData(project, indicator);
     }
-    catch (IOException e) {
-      LOG.info("Connection error", e);
-      return null;
-    }
   }
 
   @NotNull
@@ -242,6 +237,34 @@
     return GithubApiUtil.getCurrentUserDetailed(auth);
   }
 
+  public static <T, E extends Throwable> T computeValueInModal(@NotNull Project project,
+                                                               @NotNull String caption,
+                                                               @NotNull final ThrowableConvertor<ProgressIndicator, T, E> task) throws E {
+    final Ref<T> dataRef = new Ref<T>();
+    final Ref<E> exceptionRef = new Ref<E>();
+    ProgressManager.getInstance().run(new Task.Modal(project, caption, true) {
+      public void run(@NotNull ProgressIndicator indicator) {
+        try {
+          dataRef.set(task.convert(indicator));
+        }
+        catch (Error e) {
+          throw e;
+        }
+        catch (RuntimeException e) {
+          throw e;
+        }
+        catch (Throwable e) {
+          //noinspection unchecked
+          exceptionRef.set((E)e);
+        }
+      }
+    });
+    if (!exceptionRef.isNull()) {
+      throw exceptionRef.get();
+    }
+    return dataRef.get();
+  }
+
   /*
   * Git utils
   */
@@ -343,5 +366,4 @@
     }
     return manager.getRepositoryForFile(project.getBaseDir());
   }
-
 }
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTest.java b/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTest.java
index ee0060a..7968008 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTest.java
@@ -16,6 +16,7 @@
 package org.jetbrains.plugins.github;
 
 import com.intellij.notification.NotificationType;
+import org.jetbrains.plugins.github.util.GithubAuthData;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java b/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java
index 939fd8e..5058513 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java
@@ -26,6 +26,7 @@
 import git4idea.test.TestDialogHandler;
 import org.jetbrains.plugins.github.test.GithubTest;
 import org.jetbrains.plugins.github.ui.GithubCreatePullRequestDialog;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import java.util.Random;
 
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubRequestPagingTest.java b/plugins/github/test/org/jetbrains/plugins/github/GithubRequestPagingTest.java
index 5b06666..c72cbc3 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubRequestPagingTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubRequestPagingTest.java
@@ -36,7 +36,7 @@
 
   public void testAvailableRepos() throws Throwable {
 
-    List<GithubRepo> availableRepos = GithubApiUtil.getAvailableRepos(myGitHubSettings.getAuthData(), myLogin2);
+    List<GithubRepo> availableRepos = GithubApiUtil.getUserRepos(myGitHubSettings.getAuthData(), myLogin2);
     List<String> realData = new ArrayList<String>();
     for (GithubRepo info : availableRepos) {
       realData.add(info.getName());
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java b/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java
index 756fabc..fe2f40a 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java
@@ -5,6 +5,7 @@
 import git4idea.commands.Git;
 import org.jetbrains.plugins.github.api.GithubApiUtil;
 import org.jetbrains.plugins.github.api.GithubRepoDetailed;
+import org.jetbrains.plugins.github.util.GithubAuthData;
 
 import java.io.IOException;
 
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubUrlUtilTest.java b/plugins/github/test/org/jetbrains/plugins/github/GithubUrlUtilTest.java
index b8506d6..0c8c501 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubUrlUtilTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubUrlUtilTest.java
@@ -25,7 +25,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.jetbrains.plugins.github.GithubUrlUtil.*;
+import static org.jetbrains.plugins.github.util.GithubUrlUtil.*;
 
 /**
  * @author Aleksey Pivovarov
diff --git a/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java b/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java
index ab83293..0f2da38 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java
@@ -42,9 +42,9 @@
 import git4idea.test.TestNotificator;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.github.GithubAuthData;
-import org.jetbrains.plugins.github.GithubSettings;
-import org.jetbrains.plugins.github.GithubUtil;
+import org.jetbrains.plugins.github.util.GithubAuthData;
+import org.jetbrains.plugins.github.util.GithubSettings;
+import org.jetbrains.plugins.github.util.GithubUtil;
 
 import static org.junit.Assume.assumeNotNull;
 
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java b/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java
index 803bdc3..dea389a 100644
--- a/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java
+++ b/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java
@@ -304,7 +304,16 @@
     public void processTerminated(ProcessEvent event) {
       int exitCode = event.getExitCode();
       if (exitCode == 0) {
-        myCallback.succeeded(new DeploymentRuntime());
+        myCallback.succeeded(new DeploymentRuntime() {
+          @Override
+          public boolean isUndeploySupported() {
+            return false;
+          }
+
+          @Override
+          public void undeploy(@NotNull UndeploymentTaskCallback callback) {
+          }
+        });
       }
       else {
         myCallback.errorOccurred("Process terminated with exit code " + exitCode);
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java
index 855ed7a..5d92076 100644
--- a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java
+++ b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java
@@ -24,12 +24,10 @@
 import com.intellij.packaging.artifacts.Artifact;
 import com.intellij.remoteServer.ServerType;
 import com.intellij.remoteServer.configuration.deployment.*;
-import com.intellij.remoteServer.runtime.Deployment;
 import com.intellij.remoteServer.runtime.ServerConnector;
 import com.intellij.remoteServer.runtime.ServerTaskExecutor;
 import com.intellij.remoteServer.runtime.deployment.DeploymentTask;
 import com.intellij.remoteServer.runtime.deployment.ServerRuntimeInstance;
-import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ui.FormBuilder;
 import icons.GoogleAppEngineIcons;
 import org.jetbrains.annotations.NotNull;
@@ -179,8 +177,8 @@
     }
 
     @Override
-    public void computeDeployments(@NotNull ComputeDeploymentsCallback deployments) {
-      deployments.succeeded(ContainerUtil.<Deployment>emptyList());
+    public void computeDeployments(@NotNull ComputeDeploymentsCallback callback) {
+      callback.succeeded();
     }
 
     @Override
diff --git a/plugins/gradle/gradle.iml b/plugins/gradle/gradle.iml
index b0e85e5..510f93a 100644
--- a/plugins/gradle/gradle.iml
+++ b/plugins/gradle/gradle.iml
@@ -25,233 +25,15 @@
     <orderEntry type="module-library" exported="">
       <library name="Gradle">
         <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/gradle-base-services-1.7.jar!/" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-core-1.7.jar!/" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-messaging-1.7.jar!/" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-tooling-api-1.7.jar!/" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-wrapper-1.7.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/gradle-base-services-1.8-20130730220035+0000.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/gradle-core-1.8-20130730220035+0000.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/gradle-messaging-1.8-20130730220035+0000.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/gradle-tooling-api-1.8-20130730220035+0000.jar!/" />
+          <root url="jar://$MODULE_DIR$/lib/gradle-wrapper-1.8-20130730220035+0000.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES>
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/buildSrc/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/buildSrc/src/test/resources" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ui/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ui/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ui/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/cli/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/cpp/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/cpp/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ear/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/main/resources" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/idea/IdeaIntegrationTest/canCreateAndDeleteMetaData/api/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/api/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/api/src/integTest/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/webAppJava6/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/groovyproject/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/webAppWithVars/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/tasks" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/plugins" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ivy/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/testFixtures/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ear/earWithWar/war/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ear/earCustomized/war/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/base/prod/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/base/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/onlyif/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/onlyif/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/apiAndImpl/src/api/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/apiAndImpl/src/impl/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/apiAndImpl/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/quickstart/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/quickstart/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/api/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/shared/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/shared/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/buildSrc/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/buildSrc/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/services/shared/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/services/webservice/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/services/webservice/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/testListener/src/test/java/org/gradle" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/customizedLayout/src/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/customizedLayout/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/withIntegrationTests/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/withIntegrationTests/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/withIntegrationTests/src/integration-test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/antlr/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven/quickstart/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven/pomGeneration/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/scala/mixedJavaAndScala/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/scala/mixedJavaAndScala/src/main/scala" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonar/quickstart/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonar/quickstart/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/groovycDetector/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/mixedJavaAndGroovy/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/mixedJavaAndGroovy/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/signing/maven/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/signing/conditional/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/junit/categories/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/jacoco/quickstart/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/jacoco/quickstart/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/jacoco/application/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/groups/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/suitexmlbuilder/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/suitexmlbuilder/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk14-passing/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk14-passing/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk15-passing/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk15-passing/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testReport/core/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testReport/util/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/ant/useExternalAntTaskWithConfig/src" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/java/sourceSets/src/intTest/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/api/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/api/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/shared/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/shared/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/services/personService/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/services/personService/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/webDist/date/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/webDist/hello/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/javaWithCustomConf/api/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/javaWithCustomConf/shared/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ivypublish/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ivypublish/subproject/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/idea/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/model/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/eclipse/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/runBuild/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/customModel/plugin/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/customModel/tooling/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/application/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/codeQuality/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonarRunner/quickstart/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonarRunner/quickstart/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven-publish/quickstart/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven-publish/javaProject/subproject/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/buildDashboard/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/webApplication/customised/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/webApplication/customised/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/webApplication/quickstart/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/clientModuleDependencies/shared/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/osgi/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/osgi/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/antlr/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/jetty/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/maven/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/maven/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/integTest/resources/org/gradle/scala/compile/jdk6/ZincScalaCompilerJdk6IntegrationTest/compilesJavaCodeIncrementally/src/main/scala" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/integTest/resources/org/gradle/scala/compile/IncrementalScalaCompileIntegrationTest/recompilesSourceWhenPropertiesChange/src/main/scala" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/skippedProject/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/skippedProject/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/customizedProject/src" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/customizedProject/test" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/javaProjectWithJacoco/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/javaProjectWithJacoco/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/skippedProject/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/skippedProject/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/customizedProject/src" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/customizedProject/test" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/javaProjectWithJacoco/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/javaProjectWithJacoco/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/jacoco/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/native/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClasses/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClasses" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesSourceWhenPropertiesChange/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClassesAcrossProjectBoundaries/app/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClassesAcrossProjectBoundaries/lib/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClassesAcrossProjectBoundaries" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/GroovyCompilerIntegrationSpec/canUseThirdPartyAstTransform/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/GroovyCompilerIntegrationSpec/canUseAstTransformThatReferencesGroovyTestCase/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/ApiGroovyCompilerIntegrationSpec/canJointCompileWithJavaCompilerExecutable/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/BasicGroovyCompilerIntegrationSpec/compileBadJavaCode/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/IncrementalGroovyCompileIntegrationTest/recompilesSourceWhenPropertiesChange/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/compile/daemon/ParallelCompilerDaemonIntegrationTest/shared" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/handlesTagsAndTaglets/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/handlesTagsAndTaglets/src/taglet/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/canCombineLocalOptionWithOtherOptions/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/canCombineLocalOptionWithOtherOptions/src/taglet/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/testing/junit/JUnitIntegrationTest/junit3Tests/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/testFixtures/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/publish/src/main/groovy/org/gradle/api/publish/plugins" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/publish/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/wrapper/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/wrapper/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/announce/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/launcher/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/launcher/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/open-api/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/open-api/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core-impl/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core-impl/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/messaging/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/messaging/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/reporting/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/ExecIntegrationTest/shared/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/ProjectLayoutIntegrationTest/canUseANonStandardBuildDir/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/ProjectLayoutIntegrationTest/canUseANonStandardBuildDir/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/shared/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/doesNotRunStaleTests/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/executesTestsWhenSourceChanges/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/executesTestsWhenSourceChanges" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/executesTestsWhenTestFrameworkChanges/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/javascript/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/testjar/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/testjar/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/multiModule/webinar-api/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/multiModule/webinar-impl/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/multiModule/webinar-impl/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/singleModule/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/singleModule/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/enforcerplugin/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/flatmultimodule/webinar-api/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/flatmultimodule/webinar-impl/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/flatmultimodule/webinar-impl/src/test/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/diagnostics/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/diagnostics/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/diagnostics/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/performance/src/configPlugin" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/performance/src/testFixtures/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/tooling-api/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/tooling-api/src/integTest/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/code-quality/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-jvm/src/main/groovy/org/gradle/language/jvm/tasks" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-jvm/src/main/groovy/org/gradle/language/jvm/plugins" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-jvm/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-base/src/main/groovy/org/gradle/language/base/plugins" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-base/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-comparison/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-comparison/src/integTest/resources/org/gradle/api/plugins/buildcomparison/gradle/BuildComparisonIntegrationSpec/compareArchives/source/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-comparison/src/integTest/resources/org/gradle/api/plugins/buildcomparison/gradle/BuildComparisonIntegrationSpec/compareArchives/target/src/main/java" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/internal-testing/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services-groovy/src/main/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services-groovy/src/test/groovy" />
-          <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/internal-integ-testing/src/main/groovy" />
+          <root url="jar://$MODULE_DIR$/lib/gradle-1.8-20130730220035+0000-src.zip!/" />
         </SOURCES>
       </library>
     </orderEntry>
diff --git a/plugins/gradle/lib/gradle-1.7-src.zip b/plugins/gradle/lib/gradle-1.7-src.zip
deleted file mode 100644
index d35500b..0000000
--- a/plugins/gradle/lib/gradle-1.7-src.zip
+++ /dev/null
Binary files differ
diff --git a/plugins/gradle/lib/gradle-1.8-20130730220035+0000-src.zip b/plugins/gradle/lib/gradle-1.8-20130730220035+0000-src.zip
new file mode 100644
index 0000000..52be3d1
--- /dev/null
+++ b/plugins/gradle/lib/gradle-1.8-20130730220035+0000-src.zip
Binary files differ
diff --git a/plugins/gradle/lib/gradle-base-services-1.7.jar b/plugins/gradle/lib/gradle-base-services-1.8-20130730220035+0000.jar
similarity index 61%
rename from plugins/gradle/lib/gradle-base-services-1.7.jar
rename to plugins/gradle/lib/gradle-base-services-1.8-20130730220035+0000.jar
index 2593b2b..3eb0bb7e 100644
--- a/plugins/gradle/lib/gradle-base-services-1.7.jar
+++ b/plugins/gradle/lib/gradle-base-services-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-core-1.7.jar b/plugins/gradle/lib/gradle-core-1.8-20130730220035+0000.jar
similarity index 60%
rename from plugins/gradle/lib/gradle-core-1.7.jar
rename to plugins/gradle/lib/gradle-core-1.8-20130730220035+0000.jar
index e9b7019..a184975 100644
--- a/plugins/gradle/lib/gradle-core-1.7.jar
+++ b/plugins/gradle/lib/gradle-core-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-messaging-1.7.jar b/plugins/gradle/lib/gradle-messaging-1.8-20130730220035+0000.jar
similarity index 86%
rename from plugins/gradle/lib/gradle-messaging-1.7.jar
rename to plugins/gradle/lib/gradle-messaging-1.8-20130730220035+0000.jar
index 4cbb72c..f76ab9e 100644
--- a/plugins/gradle/lib/gradle-messaging-1.7.jar
+++ b/plugins/gradle/lib/gradle-messaging-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-tooling-api-1.7.jar b/plugins/gradle/lib/gradle-tooling-api-1.7.jar
deleted file mode 100644
index 0695d34..0000000
--- a/plugins/gradle/lib/gradle-tooling-api-1.7.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/gradle/lib/gradle-tooling-api-1.8-20130730220035+0000.jar b/plugins/gradle/lib/gradle-tooling-api-1.8-20130730220035+0000.jar
new file mode 100644
index 0000000..48e428c
--- /dev/null
+++ b/plugins/gradle/lib/gradle-tooling-api-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-wrapper-1.7.jar b/plugins/gradle/lib/gradle-wrapper-1.7.jar
deleted file mode 100644
index cda194d..0000000
--- a/plugins/gradle/lib/gradle-wrapper-1.7.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/gradle/lib/gradle-wrapper-1.8-20130730220035+0000.jar b/plugins/gradle/lib/gradle-wrapper-1.8-20130730220035+0000.jar
new file mode 100644
index 0000000..17d29fc
--- /dev/null
+++ b/plugins/gradle/lib/gradle-wrapper-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/src/META-INF/plugin.xml b/plugins/gradle/src/META-INF/plugin.xml
index 458486a..a065418 100644
--- a/plugins/gradle/src/META-INF/plugin.xml
+++ b/plugins/gradle/src/META-INF/plugin.xml
@@ -25,8 +25,15 @@
 
   <extensionPoints>
     <extensionPoint name="projectResolve" interface="org.jetbrains.plugins.gradle.service.project.GradleProjectResolverExtension"/>
+    <extensionPoint name="resolve.contributor" interface="org.jetbrains.plugins.gradle.service.resolve.GradleMethodContextContributor"/>
   </extensionPoints>
 
+  <extensions defaultExtensionNs="org.jetbrains.plugins.gradle">
+    <resolve.contributor implementation="org.jetbrains.plugins.gradle.service.resolve.GradleRepositoriesContributor"/>
+    <resolve.contributor implementation="org.jetbrains.plugins.gradle.service.resolve.GradleDependenciesContributor"/>
+    <resolve.contributor implementation="org.jetbrains.plugins.gradle.service.resolve.GradleRootContributor"/>
+  </extensions>
+  
   <extensions defaultExtensionNs="com.intellij">
     <errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
     <projectImportProvider implementation="org.jetbrains.plugins.gradle.service.project.wizard.GradleProjectImportProvider"/>
@@ -63,10 +70,9 @@
     <groovyFrameworkConfigNotification implementation="org.jetbrains.plugins.gradle.config.GradleGroovyConfigNotification"/>
     
     <membersContributor implementation="org.jetbrains.plugins.gradle.service.resolve.GradleScriptContributor"/>
-    <methodDescriptor class="org.gradle.api.Project"
-                      name="apply"
-                      namedArgsProvider="org.jetbrains.plugins.gradle.service.resolve.GradleProjectApplyArgsProvider"/>
-    
+    <methodDescriptor class="org.gradle.api.Project" name="apply">
+      <namedArgument name="plugin" values="java,groovy,idea,eclipse,scala"/>
+    </methodDescriptor>
   </extensions>
   
 </idea-plugin>
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleLibraryPresentationProvider.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleLibraryPresentationProvider.java
index c9ec846..c3036d2 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleLibraryPresentationProvider.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleLibraryPresentationProvider.java
@@ -15,7 +15,6 @@
  */
 package org.jetbrains.plugins.gradle.config;
 
-import com.intellij.openapi.externalSystem.util.ExternalSystemBundle;
 import com.intellij.openapi.roots.OrderRootType;
 import com.intellij.openapi.roots.libraries.LibraryKind;
 import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor;
@@ -26,8 +25,8 @@
 import org.jetbrains.annotations.Nls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.gradle.util.GradleConstants;
 import org.jetbrains.plugins.gradle.service.GradleInstallationManager;
+import org.jetbrains.plugins.gradle.util.GradleConstants;
 import org.jetbrains.plugins.groovy.config.GroovyLibraryPresentationProviderBase;
 
 import javax.swing.*;
@@ -90,7 +89,7 @@
   @NotNull
   @Override
   public String getLibraryCategoryName() {
-    return ExternalSystemBundle.message(GradleConstants.SYSTEM_ID.getReadableName());
+    return "Gradle";
   }
 
   @Override
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java
index caf662d..6a0b53f 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java
@@ -15,11 +15,15 @@
  */
 package org.jetbrains.plugins.gradle.service.project;
 
+import com.intellij.execution.configurations.CommandLineTokenizer;
 import com.intellij.openapi.externalSystem.model.ExternalSystemException;
 import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId;
 import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationEvent;
 import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.util.ArrayUtilRt;
 import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtilRt;
 import org.gradle.tooling.*;
 import org.gradle.tooling.internal.consumer.DefaultGradleConnector;
 import org.gradle.tooling.model.idea.BasicIdeaProject;
@@ -30,6 +34,8 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -45,19 +51,21 @@
                                                              @NotNull ExternalSystemTaskNotificationListener listener,
                                                              boolean downloadLibraries)
   {
-    return getModelBuilder(downloadLibraries ? IdeaProject.class : BasicIdeaProject.class, id, settings, connection, listener);
+    return getModelBuilder(downloadLibraries ? IdeaProject.class : BasicIdeaProject.class, id, settings, connection, listener,
+                           Collections.<String>emptyList());
   }
-  
+
   @SuppressWarnings("MethodMayBeStatic")
   @NotNull
   public <T> ModelBuilder<T> getModelBuilder(@NotNull Class<T> modelType,
                                              @NotNull final ExternalSystemTaskId id,
                                              @Nullable GradleExecutionSettings settings,
                                              @NotNull ProjectConnection connection,
-                                             @NotNull ExternalSystemTaskNotificationListener listener)
+                                             @NotNull ExternalSystemTaskNotificationListener listener,
+                                             @NotNull List<String> extraJvmArgs)
   {
     ModelBuilder<T> result = connection.model(modelType);
-    prepare(result, id, settings, listener);
+    prepare(result, id, settings, listener, extraJvmArgs);
     return result;
   }
 
@@ -69,7 +77,7 @@
                                         @NotNull ExternalSystemTaskNotificationListener listener)
   {
     BuildLauncher result = connection.newBuild();
-    prepare(result, id, settings, listener);
+    prepare(result, id, settings, listener, Collections.<String>emptyList());
     return result;
   }
 
@@ -77,15 +85,30 @@
   public static void prepare(@NotNull LongRunningOperation operation,
                              @NotNull final ExternalSystemTaskId id,
                              @Nullable GradleExecutionSettings settings,
-                             @NotNull final ExternalSystemTaskNotificationListener listener)
+                             @NotNull final ExternalSystemTaskNotificationListener listener,
+                             @NotNull List<String> extraJvmArgs)
   {
     if (settings == null) {
       return;
     }
 
+    List<String> jvmArgs = ContainerUtilRt.newArrayList();
+
     String vmOptions = settings.getDaemonVmOptions();
-    if (vmOptions != null) {
-      operation.setJvmArguments(vmOptions.trim());
+    if (!StringUtil.isEmpty(vmOptions)) {
+      CommandLineTokenizer tokenizer = new CommandLineTokenizer(vmOptions);
+      while(tokenizer.hasMoreTokens()) {
+        String vmOption = tokenizer.nextToken();
+        if (!StringUtil.isEmpty(vmOption)) {
+          jvmArgs.add(vmOption);
+        }
+      }
+    }
+
+    jvmArgs.addAll(extraJvmArgs);
+
+    if (!jvmArgs.isEmpty()) {
+      operation.setJvmArguments(ArrayUtilRt.toStringArray(jvmArgs));
     }
 
     listener.onStart(id);
@@ -108,9 +131,6 @@
     try {
       return f.fun(connection);
     }
-    catch (ExternalSystemException e) {
-      throw e;
-    }
     catch (Throwable e) {
       throw new ExternalSystemException(e);
     }
@@ -123,7 +143,7 @@
       }
     }
   }
-  
+
   /**
    * Allows to retrieve gradle api connection to use for the given project.
    *
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleDependenciesContributor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleDependenciesContributor.java
new file mode 100644
index 0000000..2b980cc
--- /dev/null
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleDependenciesContributor.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.gradle.service.resolve;
+
+import com.intellij.psi.*;
+import com.intellij.psi.scope.PsiScopeProcessor;
+import com.intellij.psi.util.PsiTreeUtil;
+import org.gradle.api.artifacts.dsl.DependencyHandler;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
+import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
+import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
+import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall;
+import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager;
+import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightMethodBuilder;
+import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightParameter;
+
+import java.util.List;
+
+/**
+ * @author Denis Zhdanov
+ * @since 8/14/13 12:58 PM
+ */
+public class GradleDependenciesContributor implements GradleMethodContextContributor {
+  
+  @Override
+  public void process(@NotNull List<String> methodCallInfo,
+                      @NotNull PsiScopeProcessor processor,
+                      @NotNull ResolveState state,
+                      @NotNull PsiElement place)
+  {
+    if (methodCallInfo.isEmpty()) {
+      return;
+    }
+
+    int i = methodCallInfo.indexOf("dependencies");
+    if (i != 1) {
+      return;
+    }
+    
+    // Assuming that the method call is addition of new dependency into configuration.
+    GroovyPsiManager psiManager = GroovyPsiManager.getInstance(place.getProject());
+    PsiClass contributorClass = psiManager.findClassWithCache(DependencyHandler.class.getName(), place.getResolveScope());
+    if (contributorClass == null) {
+      return;
+    }
+    processDependencyAddition(methodCallInfo.get(0), contributorClass, processor, state, place);
+  }
+
+  private static void processDependencyAddition(@NotNull String gradleConfigurationName,
+                                                @NotNull PsiClass dependencyHandlerClass,
+                                                @NotNull PsiScopeProcessor processor,
+                                                @NotNull ResolveState state,
+                                                @NotNull PsiElement place)
+  {
+    GrLightMethodBuilder builder = new GrLightMethodBuilder(place.getManager(), gradleConfigurationName);
+    PsiClassType type = PsiType.getJavaLangObject(place.getManager(), place.getResolveScope());
+    builder.addParameter(new GrLightParameter("dependencyInfo", type, builder));
+    processor.execute(builder, state);
+    
+    GrMethodCall call = PsiTreeUtil.getParentOfType(place, GrMethodCall.class);
+    if (call == null) {
+      return;
+    }
+    GrArgumentList args = call.getArgumentList();
+    if (args == null) {
+      return;
+    }
+    int argsCount = 0;
+    boolean namedArgProcessed = false;
+    for (GroovyPsiElement arg : args.getAllArguments()) {
+      if (arg instanceof GrNamedArgument) {
+        if (!namedArgProcessed) {
+          namedArgProcessed = true;
+          argsCount++;
+        }
+      }
+      else {
+        argsCount++;
+      }
+    }
+    
+    argsCount++; // Configuration name is delivered as an argument.
+
+    for (PsiMethod method : dependencyHandlerClass.findMethodsByName("add", false)) {
+      if (method.getParameterList().getParametersCount() == argsCount) {
+        builder.setNavigationElement(method);
+      }
+    }
+  }
+}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleMethodContextContributor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleMethodContextContributor.java
index f7a29c2..06dbb75 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleMethodContextContributor.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleMethodContextContributor.java
@@ -15,12 +15,15 @@
  */
 package org.jetbrains.plugins.gradle.service.resolve;
 
+import com.intellij.openapi.extensions.ExtensionPointName;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.ResolveState;
 import com.intellij.psi.scope.PsiScopeProcessor;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.plugins.groovy.lang.resolve.NonCodeMembersContributor;
 
+import java.util.List;
+
 /**
  * This interface narrows {@link NonCodeMembersContributor} to a closure executed inside particular method call at a gradle script.
  * <p/>
@@ -42,14 +45,19 @@
  */
 public interface GradleMethodContextContributor {
 
+  ExtensionPointName<GradleMethodContextContributor> EP_NAME = ExtensionPointName.create("org.jetbrains.plugins.gradle.resolve.contributor");
+  
   /**
    * Tries to resolve target element.
    * 
-   * @param processor  the processor receiving the declarations.
-   * @param state      current resolve state
-   * @param place      the original element from which the tree up walk was initiated.
+   * @param methodCallInfo   information about method call hierarchy which points to the target place. Every entry is a method name
+   *                         and the deepest one is assumed to be added the head
+   * @param processor        the processor receiving the declarations.
+   * @param state            current resolve state
+   * @param place            the original element from which the tree up walk was initiated.
    */
-  void process(@NotNull PsiScopeProcessor processor,
+  void process(@NotNull List<String> methodCallInfo,
+               @NotNull PsiScopeProcessor processor,
                @NotNull ResolveState state,
                @NotNull PsiElement place);
 }
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleProjectApplyArgsProvider.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleProjectApplyArgsProvider.java
deleted file mode 100644
index 3f1792b..0000000
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleProjectApplyArgsProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2000-2013 JetBrains s.r.o.
- *
- * 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 org.jetbrains.plugins.gradle.service.resolve;
-
-import com.intellij.psi.PsiElement;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
-import org.jetbrains.plugins.groovy.extensions.NamedArgumentDescriptor;
-import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall;
-
-import java.util.Map;
-
-/**
- * @author Denis Zhdanov
- * @since 7/23/13 5:53 PM
- */
-public class GradleProjectApplyArgsProvider extends GroovyNamedArgumentProvider {
-
-  @Override
-  public void getNamedArguments(@NotNull GrCall call,
-                                @Nullable PsiElement resolve,
-                                @Nullable String argumentName,
-                                boolean forCompletion,
-                                Map<String, NamedArgumentDescriptor> result)
-  {
-    result.put("plugin", new NamedArgumentDescriptor());
-  }
-}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleRepositoriesContributor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleRepositoriesContributor.java
new file mode 100644
index 0000000..db58a1a
--- /dev/null
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleRepositoriesContributor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.gradle.service.resolve;
+
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.ResolveState;
+import com.intellij.psi.scope.PsiScopeProcessor;
+import com.intellij.util.containers.Stack;
+import org.gradle.api.artifacts.dsl.RepositoryHandler;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager;
+
+import java.util.List;
+
+/**
+ * @author Denis Zhdanov
+ * @since 8/14/13 12:56 PM
+ */
+public class GradleRepositoriesContributor implements GradleMethodContextContributor {
+
+  @Override
+  public void process(@NotNull List<String> methodCallInfo,
+                      @NotNull PsiScopeProcessor processor,
+                      @NotNull ResolveState state,
+                      @NotNull PsiElement place)
+  {
+    if (methodCallInfo.isEmpty() || methodCallInfo.size() < 2 || !"repositories".equals(methodCallInfo.get(1))) {
+      return;
+    }
+    GroovyPsiManager psiManager = GroovyPsiManager.getInstance(place.getProject());
+    PsiClass contributorClass = psiManager.findClassWithCache(RepositoryHandler.class.getName(), place.getResolveScope());
+    if (contributorClass != null) {
+      contributorClass.processDeclarations(processor, state, null, place);
+    }
+  }
+}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleRootContributor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleRootContributor.java
new file mode 100644
index 0000000..2e5613f
--- /dev/null
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleRootContributor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.gradle.service.resolve;
+
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.ResolveState;
+import com.intellij.psi.scope.PsiScopeProcessor;
+import com.intellij.util.containers.Stack;
+import org.gradle.api.Project;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager;
+
+import java.util.List;
+
+/**
+ * @author Denis Zhdanov
+ * @since 8/14/13 1:03 PM
+ */
+public class GradleRootContributor implements GradleMethodContextContributor {
+
+  @Override
+  public void process(@NotNull List<String> methodCallInfo,
+                      @NotNull PsiScopeProcessor processor,
+                      @NotNull ResolveState state,
+                      @NotNull PsiElement place) {
+    if (methodCallInfo.size() > 1) {
+      return;
+    }
+
+    GroovyPsiManager psiManager = GroovyPsiManager.getInstance(place.getProject());
+    PsiClass contributorClass = psiManager.findClassWithCache(Project.class.getName(), place.getResolveScope());
+    if (contributorClass != null) {
+      contributorClass.processDeclarations(processor, state, null, place);
+    }
+  }
+}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleScriptContributor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleScriptContributor.java
index 2dc07f9..29bce66 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleScriptContributor.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleScriptContributor.java
@@ -19,16 +19,15 @@
 import com.intellij.psi.scope.PsiScopeProcessor;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.util.containers.ContainerUtilRt;
-import org.jetbrains.annotations.NonNls;
+import com.intellij.util.containers.Stack;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.plugins.gradle.util.GradleConstants;
 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall;
-import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager;
 import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass;
 import org.jetbrains.plugins.groovy.lang.resolve.NonCodeMembersContributor;
 
-import java.util.Map;
+import java.util.List;
 
 /**
  * @author Denis Zhdanov
@@ -36,21 +35,13 @@
  */
 public class GradleScriptContributor extends NonCodeMembersContributor {
 
-  // TODO den add doc
-  @NotNull private static final Map<String, String> CONTRIBUTORS = ContainerUtilRt.newHashMap();
-  static {
-    CONTRIBUTORS.put("repositories", "org.gradle.api.artifacts.dsl.RepositoryHandler");
-    CONTRIBUTORS.put("dependencies", "org.gradle.api.artifacts.dsl.DependencyHandler");
-  }
-
-  @NotNull @NonNls private static final String ROOT_CONTRIBUTOR_CLASS_NAME = "org.gradle.api.Project";
-
   @Override
   public void processDynamicElements(@NotNull PsiType qualifierType,
                                      PsiClass aClass,
                                      PsiScopeProcessor processor,
                                      PsiElement place,
-                                     ResolveState state) {
+                                     ResolveState state)
+  {
     if (place == null) {
       return;
     }
@@ -64,29 +55,23 @@
       return;
     }
 
-    GroovyPsiManager psiManager = GroovyPsiManager.getInstance(aClass.getProject());
-    String contributorClassName = ROOT_CONTRIBUTOR_CLASS_NAME;
+    List<String> methodInfo = ContainerUtilRt.newArrayList();
     for (GrMethodCall current = PsiTreeUtil.getParentOfType(place, GrMethodCall.class);
          current != null;
          current = PsiTreeUtil.getParentOfType(current, GrMethodCall.class))
     {
       GrExpression expression = current.getInvokedExpression();
-      if (expression != null) {
-        String text = expression.getText();
-        if (text == null || text.equals(place.getText())) {
-          continue;
-        }
-        String s = CONTRIBUTORS.get(text);
-        if (s != null) {
-          contributorClassName = s;
-          break;
-        }
+      if (expression == null) {
+        continue;
+      }
+      String text = expression.getText();
+      if (text != null) {
+        methodInfo.add(text);
       }
     }
 
-    PsiClass contributorClass = psiManager.findClassWithCache(contributorClassName, place.getResolveScope());
-    if (contributorClass != null) {
-      contributorClass.processDeclarations(processor, state, null, place);
+    for (GradleMethodContextContributor contributor : GradleMethodContextContributor.EP_NAME.getExtensions()) {
+      contributor.process(methodInfo, processor, state, place);
     }
   }
 }
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java
index 703c2db..63cd133 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java
@@ -12,6 +12,7 @@
 import com.intellij.util.containers.ContainerUtilRt;
 import com.intellij.util.containers.Stack;
 import org.gradle.tooling.model.GradleProject;
+import org.gradle.tooling.model.GradleScript;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -171,6 +172,27 @@
    */
   @NotNull
   public static String getConfigPath(@NotNull GradleProject subProject, @NotNull String rootProjectPath) {
+    try {
+      GradleScript script = subProject.getBuildScript();
+      if (script != null) {
+        File file = script.getSourceFile();
+        if (file != null) {
+          if (file.isFile()) {
+            // The file points to 'build.gradle' at the moment but we keep it's parent dir path instead.
+            file = file.getParentFile();
+          }
+          return ExternalSystemApiUtil.toCanonicalPath(file.getCanonicalPath());
+        }
+      }
+    }
+    catch (Exception e) {
+      // As said by gradle team: 'One thing I'm interested in is whether you have any thoughts about how the tooling API should
+      // deal with missing details from the model - for example, when asking for details about the build scripts when using
+      // a version of Gradle that does not supply that information. Currently, you'll get a `UnsupportedOperationException`
+      // when you call the `getBuildScript()` method'.
+      //
+      // So, just ignore it and assume that the user didn't define any custom build file name.
+    }
     File rootProjectParent = new File(rootProjectPath).getParentFile();
     StringBuilder buffer = new StringBuilder(FileUtil.toCanonicalPath(rootProjectParent.getAbsolutePath()));
     Stack<String> stack = ContainerUtilRt.newStack();
diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml
index bbf316d7..b09ae2e 100644
--- a/plugins/groovy/src/META-INF/plugin.xml
+++ b/plugins/groovy/src/META-INF/plugin.xml
@@ -151,8 +151,11 @@
     <typeConverter implementation="org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrBooleanTypeConverter"/>
     <typeConverter implementation="org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrGenericTypeConverter"/>
     <typeConverter implementation="org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.ClosureToSamConverter"/>
-
+    <typeConverter implementation="org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrStringConverter"/>
+    <typeConverter implementation="org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrContainerConverter"/>
     <typeConverter implementation="org.jetbrains.plugins.groovy.gpp.GppTypeConverter"/>
+    <typeConverter implementation="org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrNumberConverter"/>
+
     <expectedTypesContributor implementation="org.jetbrains.plugins.groovy.gpp.GppExpectedTypesContributor"/>
     <variableEnhancer implementation="org.jetbrains.plugins.groovy.gpp.GppClosureParameterTypeProvider"/>
     <classSubstitutor implementation="org.jetbrains.plugins.groovy.gpp.GppClassSubstitutor"/>
@@ -198,9 +201,7 @@
     <testGenerator language="Groovy" implementationClass="org.jetbrains.plugins.groovy.testIntegration.GroovyTestGenerator"/>
     <constructorBodyGenerator language="Groovy"
                               implementationClass="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.GrConstructorBodyGenerator"/>
-    <!-- In Android Studio, we don't want editor notifications to setup Groovy Path when *.gradle files are opened. This is a temporary
-    hack to remove this until we figure out how to disable it just for gradle scripts.
-    <editorNotificationProvider implementation="org.jetbrains.plugins.groovy.annotator.ConfigureGroovyLibraryNotificationProvider"/> -->
+    <editorNotificationProvider implementation="org.jetbrains.plugins.groovy.annotator.ConfigureGroovyLibraryNotificationProvider"/>
     <refactoring.introduceParameterMethodUsagesProcessor
         implementation="org.jetbrains.plugins.groovy.refactoring.introduce.parameter.java2groovy.GroovyIntroduceParameterMethodUsagesProcessor"/>
     <refactoring.changeSignatureUsageProcessor
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/DefaultGroovyFrameworkConfigNotification.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/DefaultGroovyFrameworkConfigNotification.java
index bad8a50..eee671f 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/DefaultGroovyFrameworkConfigNotification.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/DefaultGroovyFrameworkConfigNotification.java
@@ -15,13 +15,14 @@
  */
 package org.jetbrains.plugins.groovy.annotator;
 
-import com.intellij.ide.util.frameworkSupport.AddFrameworkSupportDialog;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.roots.libraries.Library;
+import com.intellij.openapi.roots.ui.configuration.libraries.AddCustomLibraryDialog;
 import com.intellij.ui.EditorNotificationPanel;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.plugins.groovy.GroovyBundle;
 import org.jetbrains.plugins.groovy.config.GroovyConfigUtils;
+import org.jetbrains.plugins.groovy.config.GroovyLibraryDescription;
 
 /**
 * @author sergey.evdokimov
@@ -46,10 +47,7 @@
     panel.createActionLabel(GroovyBundle.message("configure.groovy.library"), new Runnable() {
       @Override
       public void run() {
-        AddFrameworkSupportDialog dialog = AddFrameworkSupportDialog.createDialog(module);
-        if (dialog != null) {
-          dialog.show();
-        }
+        AddCustomLibraryDialog.createDialog(new GroovyLibraryDescription(), module, null).show();
       }
     });
     return panel;
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyInArgumentCheckInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyInArgumentCheckInspection.java
index 453d6f8..141f315 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyInArgumentCheckInspection.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyInArgumentCheckInspection.java
@@ -90,7 +90,7 @@
 
       if (component == null) return;
       
-      if (TypesUtil.isAssignable(component, ltype, expression)) return;
+      if (TypesUtil.isAssignableWithoutConversions(component, ltype, expression)) return;
 
       registerError(expression, ltype, rtype);
     }
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodDescriptor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodDescriptor.java
index 9d7f9a5..4f06c15 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodDescriptor.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodDescriptor.java
@@ -71,6 +71,9 @@
     @Attribute("referenceProvider")
     public String referenceProvider;
 
+    @Attribute("values")
+    public String values;
+
     protected Iterable<String> getNames() {
       assert !StringUtil.isEmptyOrSpaces(name);
       return StringUtil.tokenize(name, ATTR_NAMES_DELIMITER);
@@ -100,23 +103,6 @@
     }
   }
 
-  public Map<String, String> getNamedArgumentsReferenceProviders() {
-    if (myArguments == null) return Collections.emptyMap();
-
-    Map<String, String> res = new HashMap<String, String>();
-
-    for (NamedArgument argument : myArguments) {
-      if (argument.referenceProvider != null) {
-        for (String name : argument.getNames()) {
-          Object oldValue = res.put(name, argument.referenceProvider);
-          assert oldValue == null;
-        }
-      }
-    }
-
-    return res;
-  }
-
   @Nullable
   public Map<String, NamedArgumentDescriptor> getArgumentsMap() {
     if (myArguments == null && namedArgs == null) {
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodInfo.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodInfo.java
index 655e6cb..ae2972e 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodInfo.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/extensions/GroovyMethodInfo.java
@@ -12,6 +12,7 @@
 import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightMethodBuilder;
 import org.jetbrains.plugins.groovy.refactoring.GroovyNamesUtil;
 import org.jetbrains.plugins.groovy.util.ClassInstanceCache;
+import org.jetbrains.plugins.groovy.util.FixedValuesReferenceProvider;
 
 import java.lang.reflect.Modifier;
 import java.util.*;
@@ -37,7 +38,7 @@
   private final String myNamedArgProviderClassName;
   private GroovyNamedArgumentProvider myNamedArgProviderInstance;
 
-  private Map<String, String> myNamedArgReferenceProviderClassNames;
+  private Map<String, NamedArgumentReference> myNamedArgReferenceProviders;
 
   private static void ensureInit() {
     if (METHOD_INFOS != null) return;
@@ -136,9 +137,9 @@
     myNamedArguments = method.getArgumentsMap();
     myNamedArgProviderClassName = method.namedArgsProvider;
 
-    myNamedArgReferenceProviderClassNames = method.getNamedArgumentsReferenceProviders();
+    myNamedArgReferenceProviders = getNamedArgumentsReferenceProviders(method);
 
-    myAllSupportedNamedArguments.addAll(myNamedArgReferenceProviderClassNames.keySet());
+    myAllSupportedNamedArguments.addAll(myNamedArgReferenceProviders.keySet());
 
     if (ApplicationManager.getApplication().isInternal()) {
       // Check classes to avoid typo.
@@ -147,8 +148,8 @@
 
       assertClassExists(myReturnTypeCalculatorClassName, PairFunction.class);
 
-      for (String className : myNamedArgReferenceProviderClassNames.values()) {
-        assertClassExists(className, PsiReferenceProvider.class, GroovyNamedArgumentReferenceProvider.class);
+      for (NamedArgumentReference r : myNamedArgReferenceProviders.values()) {
+        assertClassExists(r.myProviderClassName, PsiReferenceProvider.class, GroovyNamedArgumentReferenceProvider.class);
       }
     }
   }
@@ -171,6 +172,39 @@
     }
   }
 
+  private static Map<String, NamedArgumentReference> getNamedArgumentsReferenceProviders(GroovyMethodDescriptor methodDescriptor) {
+    if (methodDescriptor.myArguments == null) return Collections.emptyMap();
+
+    Map<String, NamedArgumentReference> res = new HashMap<String, NamedArgumentReference>();
+
+    for (GroovyMethodDescriptor.NamedArgument argument : methodDescriptor.myArguments) {
+      NamedArgumentReference r;
+
+      if (argument.referenceProvider != null) {
+        assert argument.values == null;
+        r = new NamedArgumentReference(argument.referenceProvider);
+      }
+      else if (argument.values != null) {
+        List<String> values = new ArrayList<String>();
+        for (StringTokenizer st = new StringTokenizer(argument.values, " ,;"); st.hasMoreTokens(); ) {
+          values.add(st.nextToken());
+        }
+
+        r = new NamedArgumentReference(values.toArray(new String[values.size()]));
+      }
+      else {
+        continue;
+      }
+
+      for (String name : argument.getNames()) {
+        Object oldValue = res.put(name, r);
+        assert oldValue == null;
+      }
+    }
+
+    return res;
+  }
+
   private static void addMethodDescriptor(Map<String, Map<String, List<GroovyMethodInfo>>> res,
                                           GroovyMethodDescriptor method,
                                           @NotNull ClassLoader classLoader,
@@ -235,10 +269,10 @@
    */
   @Nullable
   public Object getNamedArgReferenceProvider(String namedArgumentName) {
-    String className = myNamedArgReferenceProviderClassNames.get(namedArgumentName);
-    if (className == null) return null;
+    NamedArgumentReference r = myNamedArgReferenceProviders.get(namedArgumentName);
+    if (r == null) return null;
 
-    return ClassInstanceCache.getInstance(className, myClassLoader);
+    return r.getProvider(myClassLoader);
   }
 
   @Nullable
@@ -275,4 +309,40 @@
 
     return true;
   }
+
+  private static class NamedArgumentReference {
+    private final String myProviderClassName;
+    private final String[] myValues;
+
+    private volatile Object myProvider;
+
+    public NamedArgumentReference(String providerClassName) {
+      myProviderClassName = providerClassName;
+      myValues = null;
+    }
+
+    public NamedArgumentReference(String[] values) {
+      myValues = values;
+      myProviderClassName = null;
+    }
+
+    private Object doGetProvider(ClassLoader classLoader) {
+      if (myProviderClassName != null) {
+        return ClassInstanceCache.getInstance(myProviderClassName, classLoader);
+      }
+
+      return new FixedValuesReferenceProvider(myValues);
+    }
+
+    // @return instance of PsiReferenceProvider or GroovyNamedArgumentReferenceProvider or null.
+    public Object getProvider(ClassLoader classLoader) {
+      Object res = myProvider;
+      if (res == null) {
+        res = doGetProvider(classLoader);
+        myProvider = res;
+      }
+
+      return res;
+    }
+  }
 }
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java
index 25cbf3a..b3955ee 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java
@@ -48,7 +48,6 @@
 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
 import org.jetbrains.plugins.groovy.lang.psi.impl.*;
 import org.jetbrains.plugins.groovy.lang.psi.impl.signatures.GrClosureSignatureImpl;
-import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.ClosureParameterEnhancer;
 import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrTypeConverter;
 import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
 import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil;
@@ -257,51 +256,31 @@
       return true;
     }
 
-    if (rType == PsiType.NULL) {
-      return !(lType instanceof PsiPrimitiveType);
-    }
-
-    if (isNumericType(lType) && isNumericType(rType)) {
+    if (isAssignableWithoutConversions(lType, rType, context)) {
       return true;
     }
 
-    if (isClassType(lType, JAVA_LANG_STRING)) {
-      return true;
+    Boolean byConversionInMethodCall = isAssignableByConversion(lType, rType, context, true);
+    if (byConversionInMethodCall != null) {
+      return byConversionInMethodCall.booleanValue();
+    }
+
+    if (lType instanceof PsiPrimitiveType && rType == PsiType.NULL) { //check it because now we will wrap primitive type.
+      return false;
     }
 
     final PsiManager manager = context.getManager();
     final GlobalSearchScope scope = context.getResolveScope();
 
-    if (lType instanceof PsiArrayType) {
-      PsiType lComponentType = ((PsiArrayType)lType).getComponentType();
-      PsiType rComponentType = ClosureParameterEnhancer.findTypeForIteration(rType, context);
-      if (rComponentType != null && isAssignable(lComponentType, rComponentType, context)) {
-        return true;
-      }
-    }
-
-    if (unboxPrimitiveTypeWrapper(lType) == PsiType.CHAR &&
-        (isClassType(rType, JAVA_LANG_STRING) || isClassType(rType, GROOVY_LANG_GSTRING))) {
-      return true;
-    }
-
-    if (isAssignableByMethodCallConversion(lType, rType, context)) return true;
-
     lType = boxPrimitiveType(lType, manager, scope);
     rType = boxPrimitiveType(rType, manager, scope);
     if (lType.isAssignableFrom(rType)) {
       return true;
     }
 
-    if (context instanceof GroovyPsiElement) {
-      for (GrTypeConverter converter : GrTypeConverter.EP_NAME.getExtensions()) {
-        if (!converter.isAllowedInMethodCall()) {
-          Boolean result = converter.isConvertible(lType, rType, (GroovyPsiElement)context);
-          if (result != null) {
-            return result;
-          }
-        }
-      }
+    Boolean byConversion = isAssignableByConversion(lType, rType, context, false);
+    if (byConversion != null) {
+      return byConversion.booleanValue();
     }
 
     return false;
@@ -316,7 +295,7 @@
 
     if (rType instanceof PsiIntersectionType) {
       for (PsiType child : ((PsiIntersectionType)rType).getConjuncts()) {
-        if (isAssignable(lType, child, context)) {
+        if (isAssignableByMethodCallConversion(lType, child, context)) {
           return true;
         }
       }
@@ -324,24 +303,33 @@
     }
     if (lType instanceof PsiIntersectionType) {
       for (PsiType child : ((PsiIntersectionType)lType).getConjuncts()) {
-        if (!isAssignable(child, rType, context)) {
+        if (!isAssignableByMethodCallConversion(child, rType, context)) {
           return false;
         }
       }
       return true;
     }
 
-    if (rType == PsiType.NULL) {
-      return !(lType instanceof PsiPrimitiveType);
-    }
-
     if (isAssignableWithoutConversions(lType, rType, context)) {
       return true;
     }
 
+    Boolean byConversion = isAssignableByConversion(lType, rType, context, true);
+    if (byConversion != null) {
+      return byConversion.booleanValue();
+    }
+
+    return false;
+  }
+
+  @Nullable
+  private static Boolean isAssignableByConversion(@NotNull PsiType lType,
+                                                  @NotNull PsiType rType,
+                                                  @NotNull PsiElement context,
+                                                  boolean inMethodCall) {
     if (context instanceof GroovyPsiElement) {
       for (GrTypeConverter converter : GrTypeConverter.EP_NAME.getExtensions()) {
-        if (converter.isAllowedInMethodCall()) {
+        if (inMethodCall == converter.isAllowedInMethodCall()) {
           final Boolean result = converter.isConvertible(lType, rType, (GroovyPsiElement)context);
           if (result != null) {
             return result;
@@ -349,8 +337,7 @@
         }
       }
     }
-
-    return false;
+    return null;
   }
 
   public static boolean isAssignableWithoutConversions(@Nullable PsiType lType,
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrContainerConverter.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrContainerConverter.java
new file mode 100644
index 0000000..fc92a50
--- /dev/null
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrContainerConverter.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.groovy.lang.psi.typeEnhancers;
+
+import com.intellij.psi.PsiArrayType;
+import com.intellij.psi.PsiType;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
+import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil;
+
+/**
+ * Created by Max Medvedev on 8/15/13
+ */
+public class GrContainerConverter extends GrTypeConverter {
+  @Override
+  public boolean isAllowedInMethodCall() {
+    return false;
+  }
+
+  @Nullable
+  @Override
+  public Boolean isConvertible(@NotNull PsiType lType, @NotNull PsiType rType, @NotNull GroovyPsiElement context) {
+    if (lType instanceof PsiArrayType) {
+      PsiType lComponentType = ((PsiArrayType)lType).getComponentType();
+      PsiType rComponentType = ClosureParameterEnhancer.findTypeForIteration(rType, context);
+      if (rComponentType != null && TypesUtil.isAssignable(lComponentType, rComponentType, context)) {
+        return Boolean.TRUE;
+      }
+    }
+
+    return null;
+  }
+}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrNumberConverter.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrNumberConverter.java
new file mode 100644
index 0000000..65ac67d
--- /dev/null
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrNumberConverter.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.groovy.lang.psi.typeEnhancers;
+
+import com.intellij.psi.PsiType;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
+import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil;
+
+/**
+ * Created by Max Medvedev on 8/16/13
+ */
+public class GrNumberConverter extends GrTypeConverter {
+  @Override
+  public boolean isAllowedInMethodCall() {
+    return false;
+  }
+
+  @Nullable
+  @Override
+  public Boolean isConvertible(@NotNull PsiType lType, @NotNull PsiType rType, @NotNull GroovyPsiElement context) {
+    if (TypesUtil.isNumericType(lType) && TypesUtil.isNumericType(rType)) {
+      return Boolean.TRUE;
+    }
+
+    return null;
+  }
+}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrStringConverter.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrStringConverter.java
new file mode 100644
index 0000000..377c093
--- /dev/null
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrStringConverter.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.plugins.groovy.lang.psi.typeEnhancers;
+
+import com.intellij.psi.PsiType;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
+
+import static com.intellij.psi.CommonClassNames.JAVA_LANG_STRING;
+import static org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil.isClassType;
+import static org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil.unboxPrimitiveTypeWrapper;
+import static org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames.GROOVY_LANG_GSTRING;
+
+/**
+ * Created by Max Medvedev on 8/15/13
+ */
+public class GrStringConverter extends GrTypeConverter {
+  @Override
+  public boolean isAllowedInMethodCall() {
+    return false;
+  }
+
+  @Nullable
+  @Override
+  public Boolean isConvertible(@NotNull PsiType lType, @NotNull PsiType rType, @NotNull GroovyPsiElement context) {
+    if (isClassType(lType, JAVA_LANG_STRING)) {
+      return Boolean.TRUE;
+    }
+
+    if (unboxPrimitiveTypeWrapper(lType) == PsiType.CHAR &&
+        (isClassType(rType, JAVA_LANG_STRING) || isClassType(rType, GROOVY_LANG_GSTRING))) {
+      return Boolean.TRUE;
+    }
+
+    return null;
+  }
+}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GrVariableInliner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GrVariableInliner.java
index 91d423e..7110ced 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GrVariableInliner.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GrVariableInliner.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiReference;
 import com.intellij.psi.PsiSubstitutor;
+import com.intellij.psi.codeStyle.JavaCodeStyleManager;
 import com.intellij.psi.util.PsiFormatUtil;
 import com.intellij.psi.util.PsiFormatUtilBase;
 import com.intellij.refactoring.util.CommonRefactoringUtil;
@@ -40,9 +41,9 @@
 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod;
 import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringBundle;
 import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringUtil;
+import org.jetbrains.plugins.groovy.refactoring.introduce.GrIntroduceHandlerBase;
 
 import static org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil.LOG;
-import static org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil.skipParentheses;
 
 /**
  * @author Max Medvedev
@@ -59,7 +60,9 @@
       initializer = variable.getInitializerGroovy();
       LOG.assertTrue(initializer != null);
     }
-    myTempExpr = (GrExpression)skipParentheses(initializer, false);
+
+    myTempExpr = GrIntroduceHandlerBase.insertExplicitCastIfNeeded(variable, initializer);
+
   }
 
   @Nullable
@@ -112,6 +115,7 @@
 
     GrExpression newExpr = exprToBeReplaced.replaceWithExpression((GrExpression)initializer.copy(), true);
     final Project project = usage.getProject();
+    JavaCodeStyleManager.getInstance(project).shortenClassReferences(newExpr);
     Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
     GroovyRefactoringUtil.highlightOccurrences(project, editor, new PsiElement[]{newExpr});
     WindowManager.getInstance().getStatusBar(project).setInfo(GroovyRefactoringBundle.message("press.escape.to.remove.the.highlighting"));
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java
index b0173f0..ee4038d 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineLocalProcessor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -47,6 +47,7 @@
 import org.jetbrains.plugins.groovy.lang.psi.controlFlow.impl.ControlFlowBuilder;
 import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
 import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringBundle;
+import org.jetbrains.plugins.groovy.refactoring.introduce.GrIntroduceHandlerBase;
 
 import java.util.ArrayList;
 import java.util.BitSet;
@@ -194,11 +195,14 @@
   protected void performRefactoring(UsageInfo[] usages) {
     CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages);
 
+    final GrExpression initializer = mySettings.getInitializer();
+
+    GrExpression initializerToUse = GrIntroduceHandlerBase.insertExplicitCastIfNeeded(myLocal, mySettings.getInitializer());
+
     for (UsageInfo usage : usages) {
-      GrVariableInliner.inlineReference(usage, myLocal, mySettings.getInitializer());
+      GrVariableInliner.inlineReference(usage, myLocal, initializerToUse);
     }
 
-    final GrExpression initializer = mySettings.getInitializer();
     final PsiElement initializerParent = initializer.getParent();
 
     if (initializerParent instanceof GrAssignmentExpression) {
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrIntroduceHandlerBase.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrIntroduceHandlerBase.java
index f2fee48..bed8605 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrIntroduceHandlerBase.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/GrIntroduceHandlerBase.java
@@ -62,6 +62,7 @@
 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral;
 import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection;
 import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
+import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil;
 import org.jetbrains.plugins.groovy.lang.psi.util.GrStringUtil;
 import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
 import org.jetbrains.plugins.groovy.refactoring.GrRefactoringError;
@@ -71,6 +72,8 @@
 
 import java.util.*;
 
+import static org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil.skipParentheses;
+
 /**
  * @author Maxim.Medvedev
  */
@@ -82,6 +85,38 @@
     }
   };
 
+  public static GrExpression insertExplicitCastIfNeeded(GrVariable variable, GrExpression initializer) {
+    PsiType ltype = findLValueType(initializer);
+    PsiType rtype = initializer.getType();
+
+    GrExpression rawExpr = (GrExpression)skipParentheses(initializer, false);
+
+    if (ltype == null || TypesUtil.isAssignableWithoutConversions(ltype, rtype, initializer) || !TypesUtil.isAssignable(ltype, rtype, initializer)) {
+      return rawExpr;
+    }
+    else { // implicit coercion should be replaced with explicit cast
+      GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(variable.getProject());
+      GrSafeCastExpression cast =
+        (GrSafeCastExpression)factory.createExpressionFromText("a as B");
+      cast.getOperand().replaceWithExpression(rawExpr, false);
+      cast.getCastTypeElement().replace(factory.createTypeElement(ltype));
+      return cast;
+    }
+  }
+
+  @Nullable
+  private static PsiType findLValueType(GrExpression initializer) {
+    if (initializer.getParent() instanceof GrAssignmentExpression && ((GrAssignmentExpression)initializer.getParent()).getRValue() == initializer) {
+      return ((GrAssignmentExpression)initializer.getParent()).getLValue().getNominalType();
+    }
+    else if (initializer.getParent() instanceof GrVariable) {
+      return ((GrVariable)initializer.getParent()).getDeclaredType();
+    }
+    else {
+      return null;
+    }
+  }
+
   @NotNull
   protected abstract String getRefactoringName();
 
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/util/FixedValuesReferenceProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/FixedValuesReferenceProvider.java
new file mode 100644
index 0000000..5ccdd81
--- /dev/null
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/FixedValuesReferenceProvider.java
@@ -0,0 +1,48 @@
+package org.jetbrains.plugins.groovy.util;
+
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiReference;
+import com.intellij.psi.PsiReferenceBase;
+import com.intellij.psi.PsiReferenceProvider;
+import com.intellij.util.ProcessingContext;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Sergey Evdokimov
+ */
+public class FixedValuesReferenceProvider extends PsiReferenceProvider {
+
+  private final String[] myValues;
+
+  private boolean mySoft;
+
+  public FixedValuesReferenceProvider(@NotNull String[] values) {
+    this(values, false);
+  }
+
+  public FixedValuesReferenceProvider(@NotNull String[] values, boolean soft) {
+    myValues = values;
+    mySoft = soft;
+  }
+
+  @NotNull
+  @Override
+  public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) {
+    return new PsiReference[]{
+      new PsiReferenceBase<PsiElement>(element, mySoft) {
+        @Nullable
+        @Override
+        public PsiElement resolve() {
+          return null;
+        }
+
+        @NotNull
+        @Override
+        public Object[] getVariants() {
+          return myValues;
+        }
+      }
+    };
+  }
+}
diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/inline/InlineVariableTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/inline/InlineVariableTest.groovy
index 789ef53..a0a96d2 100644
--- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/inline/InlineVariableTest.groovy
+++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/inline/InlineVariableTest.groovy
@@ -1,5 +1,6 @@
 /*
- * Copyright 2000-2007 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
  * 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
@@ -71,6 +72,9 @@
 
   public void testUndefinedVarInline() {doTest()}
 
+  public void testImplicitCast() { doTest() }
+  public void testImplicitCast2() { doTest() }
+
   protected void doFieldTest() {
     InlineMethodTest.doInlineTest(myFixture, testDataPath + getTestName(true) + ".test", new GroovyInlineHandler());
   }
diff --git a/plugins/groovy/testdata/groovy/refactoring/inlineLocal/ImplicitCast.test b/plugins/groovy/testdata/groovy/refactoring/inlineLocal/ImplicitCast.test
new file mode 100644
index 0000000..9cfa98f
--- /dev/null
+++ b/plugins/groovy/testdata/groovy/refactoring/inlineLocal/ImplicitCast.test
@@ -0,0 +1,5 @@
+String s = 2
+
+print <selection>s</selection>
+-----
+print 2 as String
diff --git a/plugins/groovy/testdata/groovy/refactoring/inlineLocal/implicitCast2.test b/plugins/groovy/testdata/groovy/refactoring/inlineLocal/implicitCast2.test
new file mode 100644
index 0000000..871700e
--- /dev/null
+++ b/plugins/groovy/testdata/groovy/refactoring/inlineLocal/implicitCast2.test
@@ -0,0 +1,6 @@
+String s = 'a'
+s = 2
+print <selection>s</selection>
+-----
+String s = 'a'
+print 2 as String
diff --git a/plugins/groovy/testdata/highlighting/MemberShipOperatorCheck.groovy b/plugins/groovy/testdata/highlighting/MemberShipOperatorCheck.groovy
index 816c31c..8e5bb16 100644
--- a/plugins/groovy/testdata/highlighting/MemberShipOperatorCheck.groovy
+++ b/plugins/groovy/testdata/highlighting/MemberShipOperatorCheck.groovy
@@ -21,10 +21,10 @@
 }
 
 print (1 in [1])
-print (1 in ['a'])
+print (<warning descr="'ArrayList<String>' cannot contain 'Integer'">1 in ['a']</warning>)
 print (1 in 1)
 print (<warning descr="'ArrayList<Integer>' cannot contain 'ArrayList<Integer>'">[2] in [2]</warning>)
 
 print (1 in new ArrayList())
 print (<warning descr="'Integer' cannot contain 'Date'">new Date() in 2</warning>)
-print (<warning>'a' in [1]</warning>)
\ No newline at end of file
+print (<warning descr="'ArrayList<Integer>' cannot contain 'String'">'a' in [1]</warning>)
\ No newline at end of file
diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java
index a88550b..7d902cf 100644
--- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java
+++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXHighlightingTest.java
@@ -245,6 +245,10 @@
     doTest();
   }
 
+  public void testReadOnly1() throws Exception {
+    doTest();
+  }
+
   public void testScriptSource() throws Exception {
     doTest("s1.js");
   }
diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java
index 831169f..5a49915 100644
--- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java
+++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFXUnresolvedFxIdReferenceInspectionTest.java
@@ -43,6 +43,17 @@
     assertEmpty(intentionActions);
   }
 
+  public void testFieldsFromControllerSuper() throws Exception {
+    myFixture.addClass("import javafx.scene.control.RadioButton;\n" +
+                       "public class SuperController {\n" +
+                       "    public RadioButton option1;\n" +
+                       "}\n");
+    myFixture.addClass("public class Controller extends SuperController {}");
+    final String testFxml = getTestName(true) + ".fxml";
+    myFixture.configureByFile(testFxml);
+    myFixture.testHighlighting(true, false, false, testFxml);
+  }
+
   private void doTest(final String controllerName) {
     myFixture.configureByFiles(getTestName(true) + ".fxml", controllerName + ".java");
     final IntentionAction singleIntention = myFixture.findSingleIntention(getHint("unknown"));
diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java
index f680469..0becfab 100644
--- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java
+++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java
@@ -187,7 +187,7 @@
   public static PsiMethod findPropertySetter(String attributeName, PsiClass classWithStaticProperty) {
     final String setterName = PropertyUtil.suggestSetterName(StringUtil.getShortName(attributeName));
     final PsiMethod[] setters = classWithStaticProperty.findMethodsByName(setterName, true);
-    if (setters.length == 1) {
+    if (setters.length >= 1) {
       return setters[0];
     }
     return null;
diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxFieldIdReferenceProvider.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxFieldIdReferenceProvider.java
index 3ec363f..09cd1a5 100644
--- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxFieldIdReferenceProvider.java
+++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxFieldIdReferenceProvider.java
@@ -36,7 +36,7 @@
   protected PsiReference[] getReferencesByElement(@NotNull final PsiClass aClass,
                                                   final XmlAttributeValue xmlAttributeValue,
                                                   ProcessingContext context) {
-    final PsiField field = aClass.findFieldByName(xmlAttributeValue.getValue(), false);
+    final PsiField field = aClass.findFieldByName(xmlAttributeValue.getValue(), true);
     return new PsiReference[]{new JavaFxControllerFieldRef(xmlAttributeValue, field, aClass)};
   }
 
diff --git a/plugins/javaFX/testData/highlighting/readOnly1.fxml b/plugins/javaFX/testData/highlighting/readOnly1.fxml
new file mode 100644
index 0000000..a5fb9ae
--- /dev/null
+++ b/plugins/javaFX/testData/highlighting/readOnly1.fxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.RadioButton?>
+<?import javafx.scene.control.ToggleGroup?>
+<?import javafx.scene.layout.StackPane?>
+<StackPane xmlns:fx="http://javafx.com/fxml">
+    <RadioButton fx:id="option1" disable="true" mnemonicParsing="false" text="Option 1">
+        <toggleGroup>
+            <ToggleGroup fx:id="toggleGroup1"/>
+        </toggleGroup>
+    </RadioButton>
+    <RadioButton fx:id="option2" disable="true" mnemonicParsing="false" text="Option 2" toggleGroup="$toggleGroup1"/>
+</StackPane>
diff --git a/plugins/javaFX/testData/inspections/unresolvedFxId/fieldsFromControllerSuper.fxml b/plugins/javaFX/testData/inspections/unresolvedFxId/fieldsFromControllerSuper.fxml
new file mode 100644
index 0000000..12139f3
--- /dev/null
+++ b/plugins/javaFX/testData/inspections/unresolvedFxId/fieldsFromControllerSuper.fxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.RadioButton?>
+<?import javafx.scene.control.ToggleGroup?>
+<?import javafx.scene.layout.StackPane?>
+<StackPane xmlns:fx="http://javafx.com/fxml" fx:controller="Controller">
+    <RadioButton fx:id="option1" disable="true" mnemonicParsing="false" text="Option 1">
+        <toggleGroup>
+            <ToggleGroup fx:id="<warning descr="Unresolved fx:id reference">toggleGroup1</warning>"/>
+        </toggleGroup>
+    </RadioButton>
+    <RadioButton fx:id="<warning descr="Unresolved fx:id reference">option2</warning>" disable="true" mnemonicParsing="false" text="$option1" toggleGroup="$toggleGroup1"/>
+</StackPane>
diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java
index 1dbfff0..1261d12 100644
--- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java
+++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/vcs/TaskBranchesTest.java
@@ -25,7 +25,9 @@
 import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
 import git4idea.branch.GitBranchesCollection;
+import git4idea.config.GitVcsSettings;
 import git4idea.repo.GitRepository;
+import git4idea.test.GitExecutor;
 import git4idea.test.GitTestUtil;
 
 import java.io.File;
@@ -125,5 +127,6 @@
   protected void setUp() throws Exception {
     super.setUp();
     myTaskManager = (TaskManagerImpl)TaskManager.getManager(getProject());
+    GitVcsSettings.getInstance(myProject).getAppSettings().setPathToGit(GitExecutor.GIT_EXECUTABLE);
   }
 }
diff --git a/plugins/terminal/lib/jediterm-pty-0.08.jar b/plugins/terminal/lib/jediterm-pty-0.08.jar
index 5fe6a5f..e9bf336 100644
--- a/plugins/terminal/lib/jediterm-pty-0.08.jar
+++ b/plugins/terminal/lib/jediterm-pty-0.08.jar
Binary files differ
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java
index 926fbd1..0ddfd9f 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java
@@ -14,11 +14,13 @@
 import com.intellij.openapi.progress.Task;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.util.SystemInfo;
 import com.intellij.openapi.wm.IdeFocusManager;
 import com.intellij.openapi.wm.ToolWindow;
 import com.intellij.openapi.wm.ToolWindowManager;
 import com.intellij.util.ui.UIUtil;
 import com.jediterm.terminal.TtyConnector;
+import com.jediterm.terminal.emulator.ColorPalette;
 import com.jediterm.terminal.ui.AbstractSystemSettingsProvider;
 import com.jediterm.terminal.ui.TerminalSession;
 import com.jediterm.terminal.ui.TerminalWidget;
@@ -43,9 +45,9 @@
   }
 
   public void run() {
-    ProgressManager.getInstance().run(new Task.Backgroundable(myProject, "Connecting to terminal", false) {
+    ProgressManager.getInstance().run(new Task.Backgroundable(myProject, "Running the terminal", false) {
       public void run(@NotNull final ProgressIndicator indicator) {
-        indicator.setText("Connecting to terminal...");
+        indicator.setText("Running the terminal...");
         try {
           doRun();
         }
@@ -85,7 +87,7 @@
 
   protected abstract ProcessHandler createProcessHandler(T process);
 
-  public TerminalWidget createTerminalWidget() {
+  public JBTabbedTerminalWidget createTerminalWidget() {
     JBTerminalSystemSettingsProvider provider = new JBTerminalSystemSettingsProvider();
     JBTabbedTerminalWidget terminalWidget = new JBTabbedTerminalWidget(provider);
     provider.setTerminalWidget(terminalWidget);
@@ -126,8 +128,7 @@
   }
 
   public static void openSession(TerminalWidget terminal, TtyConnector ttyConnector) {
-    TerminalSession session = terminal.createTerminalSession();
-    session.setTtyConnector(ttyConnector);
+    TerminalSession session = terminal.createTerminalSession(ttyConnector);
     session.start();
   }
 
@@ -184,6 +185,11 @@
       return getKeyStrokesByActionId("$Paste");
     }
 
+    @Override
+    public ColorPalette getPalette() {
+      return SystemInfo.isWindows ? ColorPalette.WINDOWS_PALETTE : ColorPalette.XTERM_PALETTE;
+    }
+
     private KeyStroke[] getKeyStrokesByActionId(String actionId) {
       java.util.List<KeyStroke> keyStrokes = new ArrayList<KeyStroke>();
       Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts(actionId);
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalPanel.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalPanel.java
index 20866c6..7a83c32 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalPanel.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalPanel.java
@@ -27,6 +27,7 @@
 import com.intellij.openapi.ide.CopyPasteManager;
 import com.intellij.util.ui.GraphicsUtil;
 import com.intellij.util.ui.UIUtil;
+import com.jediterm.terminal.TerminalColor;
 import com.jediterm.terminal.TextStyle;
 import com.jediterm.terminal.display.BackBuffer;
 import com.jediterm.terminal.display.StyleState;
@@ -52,20 +53,21 @@
                          @NotNull EditorColorsScheme scheme) {
     super(settingsProvider, backBuffer, styleState);
     myColorScheme = scheme;
-    
 
-    styleState.setDefaultStyle(new TextStyle(myColorScheme.getDefaultForeground(), myColorScheme.getDefaultBackground()));
 
-    setSelectionColor(new TextStyle(myColorScheme.getColor(EditorColors.SELECTION_FOREGROUND_COLOR),
-                                    myColorScheme.getColor(EditorColors.SELECTION_BACKGROUND_COLOR)));
-    
+    styleState.setDefaultStyle(new TextStyle(TerminalColor.awt(myColorScheme.getDefaultForeground()), TerminalColor.awt(
+      myColorScheme.getDefaultBackground())));
+
+    setSelectionColor(new TextStyle(TerminalColor.awt(myColorScheme.getColor(EditorColors.SELECTION_FOREGROUND_COLOR)),
+                                    TerminalColor.awt(myColorScheme.getColor(EditorColors.SELECTION_BACKGROUND_COLOR))));
+
     setLineSpace(myColorScheme.getConsoleLineSpacing());
   }
 
   protected Font createFont() {
 
     Font normalFont = Font.decode(getFontName());
-    
+
     if (normalFont == null) {
       normalFont = super.createFont();
     }
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalToolWindowFactory.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalToolWindowFactory.java
index 5b4cf95..ad7d06a 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalToolWindowFactory.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalToolWindowFactory.java
@@ -11,6 +11,6 @@
   @Override
   public void createToolWindowContent(Project project, ToolWindow toolWindow) {
     TerminalView terminalView = TerminalView.getInstance();
-    terminalView.createTerminal(project, toolWindow);
+    terminalView.initTerminal(project, toolWindow);
   }
 }
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java
index 34757ae..73c8d69 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalView.java
@@ -23,21 +23,27 @@
  */
 public class TerminalView {
 
-  private TerminalWidget myTerminalWidget;
+  private JBTabbedTerminalWidget myTerminalWidget;
+  private Project myProject;
 
-  public void createTerminal(Project project, ToolWindow toolWindow) {
-
+  public void initTerminal(Project project, ToolWindow toolWindow) {
+    myProject = project;
     LocalTerminalDirectRunner terminalRunner = OpenLocalTerminalAction.createTerminalRunner(project);
-
+    
+    toolWindow.setToHideOnEmptyContent(true);
+    
     if (terminalRunner != null) {
       myTerminalWidget = terminalRunner.createTerminalWidget();
     }
 
-    final Content content = createToolWindowContentPanel(terminalRunner, myTerminalWidget);
+    Content content = createToolWindowContentPanel(terminalRunner, myTerminalWidget, toolWindow);
+    
     toolWindow.getContentManager().addContent(content);
   }
 
-  private Content createToolWindowContentPanel(@Nullable LocalTerminalDirectRunner terminalRunner, TerminalWidget terminalWidget) {
+  private Content createToolWindowContentPanel(@Nullable LocalTerminalDirectRunner terminalRunner,
+                                               JBTabbedTerminalWidget terminalWidget,
+                                               ToolWindow toolWindow) {
     SimpleToolWindowPanel panel = new SimpleToolWindowPanel(false, true) {
       @Override
       public Object getData(@NonNls String dataId) {
@@ -50,12 +56,13 @@
       panel.addFocusListener(createFocusListener());
     }
 
-    ActionToolbar toolbar = createToolbar(terminalRunner, terminalWidget);
+    ActionToolbar toolbar = createToolbar(terminalRunner, terminalWidget, toolWindow);
     toolbar.getComponent().addFocusListener(createFocusListener());
     toolbar.setTargetComponent(panel);
     panel.setToolbar(toolbar.getComponent());
 
     final Content content = ContentFactory.SERVICE.getInstance().createContent(panel, "", false);
+    content.setCloseable(true);
 
     if (getComponentToFocus() != null) {
       content.setPreferredFocusableComponent(getComponentToFocus());
@@ -89,18 +96,18 @@
     openSession(terminal, terminalRunner);
   }
 
-  private void openSession(ToolWindow terminal, AbstractTerminalRunner terminalRunner) {
+  private void openSession(ToolWindow toolWindow, AbstractTerminalRunner terminalRunner) {
     if (myTerminalWidget == null) {
       myTerminalWidget = terminalRunner.createTerminalWidget();
-      terminal.getContentManager().removeAllContents(true);
-      final Content content = createToolWindowContentPanel(null, myTerminalWidget);
-      terminal.getContentManager().addContent(content);
+      toolWindow.getContentManager().removeAllContents(true);
+      final Content content = createToolWindowContentPanel(null, myTerminalWidget, toolWindow);
+      toolWindow.getContentManager().addContent(content);
     }
     else {
       terminalRunner.openSession(myTerminalWidget);
     }
 
-    terminal.activate(new Runnable() {
+    toolWindow.activate(new Runnable() {
       @Override
       public void run() {
 
@@ -112,26 +119,25 @@
     return ServiceManager.getService(TerminalView.class);
   }
 
-  private static ActionToolbar createToolbar(@Nullable final LocalTerminalDirectRunner terminalRunner,
-                                             final TerminalWidget terminal) {
+  private ActionToolbar createToolbar(@Nullable final LocalTerminalDirectRunner terminalRunner,
+                                             final JBTabbedTerminalWidget terminal, ToolWindow toolWindow) {
     DefaultActionGroup group = new DefaultActionGroup();
 
     if (terminalRunner != null) {
       group.add(new NewSession(terminalRunner, terminal));
+      group.add(new CloseSession(terminal, toolWindow));
     }
 
     return ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, false);
   }
 
-  public void createNewSession(Project project, AbstractTerminalRunner terminalRunner) {
-    ToolWindow terminal = ToolWindowManager.getInstance(project).getToolWindow("Terminal");
+  public void createNewSession(Project project, final AbstractTerminalRunner terminalRunner) {
+    final ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow("Terminal");
 
-    openSession(terminal, terminalRunner);
-
-    terminal.activate(new Runnable() {
+    toolWindow.activate(new Runnable() {
       @Override
       public void run() {
-
+        openSession(toolWindow, terminalRunner);
       }
     }, true);
   }
@@ -151,4 +157,33 @@
       myTerminalRunner.openSession(myTerminal);
     }
   }
+
+  private class CloseSession extends AnAction {
+    private final JBTabbedTerminalWidget myTerminal;
+    private ToolWindow myToolWindow;
+
+    public CloseSession(JBTabbedTerminalWidget terminal, ToolWindow toolWindow) {
+      super("Close Session", "Close Terminal Session", AllIcons.Actions.Delete);
+      myTerminal = terminal;
+      myToolWindow = toolWindow;
+    }
+
+    @Override
+    public void actionPerformed(AnActionEvent e) {
+      boolean singleSession = myTerminal.isSingleSession();
+      
+      myTerminal.closeCurrentSession();
+      
+      if (singleSession) {
+        myToolWindow.getContentManager().removeAllContents(true);
+        
+        myToolWindow.getActivation().doWhenDone(new Runnable() {
+          @Override
+          public void run() {
+            initTerminal(myProject, myToolWindow);
+          }
+        });
+      }
+    }
+  }
 }
diff --git a/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java b/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java
index c167004..f91e7fc 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java
@@ -36,7 +36,6 @@
 import com.intellij.psi.*;
 import com.intellij.psi.filters.ElementFilter;
 import com.intellij.psi.filters.position.FilterPattern;
-import com.intellij.psi.impl.source.resolve.reference.PsiReferenceProviderBase;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.psi.util.PsiUtil;
 import com.intellij.util.ArrayUtil;
@@ -57,26 +56,26 @@
   }
 
   public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
-    registrar.registerReferenceProvider(getElementPattern("dependsOnMethods"), new PsiReferenceProviderBase() {
+    registrar.registerReferenceProvider(getElementPattern("dependsOnMethods"), new PsiReferenceProvider() {
       @NotNull
       public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull final ProcessingContext context) {
         return new MethodReference[]{new MethodReference((PsiLiteralExpression)element)};
       }
     });
 
-    registrar.registerReferenceProvider(getElementPattern("dataProvider"), new PsiReferenceProviderBase() {
+    registrar.registerReferenceProvider(getElementPattern("dataProvider"), new PsiReferenceProvider() {
       @NotNull
       public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull final ProcessingContext context) {
         return new DataProviderReference[]{new DataProviderReference((PsiLiteralExpression)element)};
       }
     });
-    registrar.registerReferenceProvider(getElementPattern("groups"), new PsiReferenceProviderBase() {
+    registrar.registerReferenceProvider(getElementPattern("groups"), new PsiReferenceProvider() {
       @NotNull
       public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull final ProcessingContext context) {
         return new GroupReference[]{new GroupReference(element.getProject(), (PsiLiteralExpression)element)};
       }
     });
-    registrar.registerReferenceProvider(getElementPattern("dependsOnGroups"), new PsiReferenceProviderBase() {
+    registrar.registerReferenceProvider(getElementPattern("dependsOnGroups"), new PsiReferenceProvider() {
       @NotNull
       public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull final ProcessingContext context) {
         return new GroupReference[]{new GroupReference(element.getProject(), (PsiLiteralExpression)element)};
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java
index 5f301ac7..83ed504 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java
@@ -16,10 +16,8 @@
 package com.intellij.designer.designSurface.tools;
 
 import com.intellij.designer.designSurface.OperationContext;
-import com.intellij.designer.model.RadComponent;
 
 import java.util.Collections;
-import java.util.List;
 
 /**
  * @author Alexander Lobas
@@ -51,11 +49,6 @@
 
   @Override
   protected void updateTarget() {
-    if (myTargetOperation != null && myContext != null) {
-      List<RadComponent> components = myContext.getComponents();
-      if (components != null && !components.isEmpty()) {
-        myTargetOperation.setComponent(components.get(0));
-      }
-    }
+    myTargetOperation.setComponent(myContext.getComponents().get(0));
   }
 }
\ No newline at end of file
diff --git a/resources-en/src/tips/Welcome.html b/resources-en/src/tips/Welcome.html
index 6d8381a..7301e94 100644
--- a/resources-en/src/tips/Welcome.html
+++ b/resources-en/src/tips/Welcome.html
@@ -4,7 +4,7 @@
 </head>
 <body>
     <h1>
-        Welcome to <span class="product">&productName;</span> <span class="version">&majorVersion;.&minorVersion;<</span></h1>
+        Welcome to <span class="product">&productName;</span> <span class="version">&majorVersion;</span></h1>
     <p>
         You can quickly get familiar with the main features of the IDE by reading these tips. You may try out
         the features described in the tips while this dialog stays open on the screen. If you close the dialog,
diff --git a/xml/dom-openapi/src/com/intellij/util/xml/converters/DelimitedListConverter.java b/xml/dom-openapi/src/com/intellij/util/xml/converters/DelimitedListConverter.java
index c15924c..0794955 100644
--- a/xml/dom-openapi/src/com/intellij/util/xml/converters/DelimitedListConverter.java
+++ b/xml/dom-openapi/src/com/intellij/util/xml/converters/DelimitedListConverter.java
@@ -25,6 +25,7 @@
 import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider;
 import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.text.DelimitedListProcessor;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiReference;
diff --git a/xml/dom-tests/tests/com/intellij/util/xml/DelimitedListProcessorTest.java b/xml/dom-tests/tests/com/intellij/util/xml/DelimitedListProcessorTest.java
index a206e43..0dd231e 100644
--- a/xml/dom-tests/tests/com/intellij/util/xml/DelimitedListProcessorTest.java
+++ b/xml/dom-tests/tests/com/intellij/util/xml/DelimitedListProcessorTest.java
@@ -1,6 +1,6 @@
 package com.intellij.util.xml;
 
-import com.intellij.util.xml.converters.DelimitedListProcessor;
+import com.intellij.openapi.util.text.DelimitedListProcessor;
 import junit.framework.TestCase;
 
 import java.util.ArrayList;
diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java
index 11677b3..71cba6f 100644
--- a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java
+++ b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java
@@ -47,7 +47,12 @@
 public class XmlGtTypedHandler extends TypedHandlerDelegate {
   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.editorActions.TypedHandler");
 
-  public Result beforeCharTyped(final char c, final Project project, final Editor editor, final PsiFile editedFile, final FileType fileType) {
+  public Result beforeCharTyped(final char c, final Project project, Editor editor, PsiFile editedFile, final FileType fileType) {
+    final Editor injectedEditor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(editor, editedFile);
+    if (editor != injectedEditor) {
+      editor = injectedEditor;
+      editedFile = PsiDocumentManager.getInstance(project).getPsiFile(injectedEditor.getDocument());
+    }
     final WebEditorOptions webEditorOptions = WebEditorOptions.getInstance();
     if (c == '>' && webEditorOptions != null && webEditorOptions.isAutomaticallyInsertClosingTag() && fileContainsXmlLanguage(editedFile)) {
       PsiDocumentManager.getInstance(project).commitAllDocuments();
@@ -66,13 +71,6 @@
           // <xml_code><caret><outer_element>
           elementAtCaret = element = provider.findElementAt(offset - 1, XMLLanguage.class);
         }
-        if (element == null && offset > 0) {
-          // seems like an injection in a template file
-          final PsiElement injectedElement = InjectedLanguageUtil.findInjectedElementNoCommit(file, offset);
-          if (injectedElement != null && injectedElement.getContainingFile() instanceof XmlFile) {
-            elementAtCaret = element = injectedElement;
-          }
-        }
         if (!(element instanceof PsiWhiteSpace)) {
           boolean nonAcceptableDelimiter = true;
 
diff --git a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java
index f7dd52a..f8b1453 100644
--- a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java
+++ b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java
@@ -19,7 +19,6 @@
 import com.intellij.psi.PsiReference;
 import com.intellij.psi.PsiReferenceProvider;
 import com.intellij.psi.filters.ElementFilter;
-import com.intellij.psi.impl.source.resolve.reference.PsiReferenceProviderBase;
 import com.intellij.psi.templateLanguages.OuterLanguageElement;
 import com.intellij.psi.xml.XmlAttribute;
 import com.intellij.psi.xml.XmlAttributeValue;
diff --git a/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java b/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java
index 0a43ad1..023e3a9 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java
+++ b/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java
@@ -226,28 +226,28 @@
       if (descriptor == null) return;
 
       final XmlAttributeDescriptor attributeDescriptor = descriptor.getAttributeDescriptor(attribute);
-      if (attributeDescriptor == null) return;
-
-      if (attributeDescriptor.hasIdType()) {
-        updateMap(attribute, value, false);
-      }
-      else {
-        final PsiReference[] references = value.getReferences();
-        for (PsiReference r : references) {
-          if (r instanceof IdReferenceProvider.GlobalAttributeValueSelfReference /*&& !r.isSoft()*/) {
-            updateMap(attribute, value, r.isSoft());
-          }
-          else if (r instanceof SchemaPrefixReference) {
-            SchemaPrefix prefix = ((SchemaPrefixReference)r).resolve();
-            if (prefix != null) {
-              myHolder.addUsedPrefix(prefix.getName());
+      if (attributeDescriptor != null) {
+        if (attributeDescriptor.hasIdType()) {
+          updateMap(attribute, value, false);
+        }
+        else {
+          final PsiReference[] references = value.getReferences();
+          for (PsiReference r : references) {
+            if (r instanceof IdReferenceProvider.GlobalAttributeValueSelfReference /*&& !r.isSoft()*/) {
+              updateMap(attribute, value, r.isSoft());
+            }
+            else if (r instanceof SchemaPrefixReference) {
+              SchemaPrefix prefix = ((SchemaPrefixReference)r).resolve();
+              if (prefix != null) {
+                myHolder.addUsedPrefix(prefix.getName());
+              }
             }
           }
         }
-      }
 
-      if (attributeDescriptor.hasIdRefType() && PsiTreeUtil.getChildOfType(value, OuterLanguageElement.class) == null) {
-        myHolder.registerIdReference(value);
+        if (attributeDescriptor.hasIdRefType() && PsiTreeUtil.getChildOfType(value, OuterLanguageElement.class) == null) {
+          myHolder.registerIdReference(value);
+        }
       }
 
       String s = value.getValue();
diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/references/IdRefProvider.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/references/IdRefProvider.java
index af803b4..d3857c7 100644
--- a/xml/relaxng/src/org/intellij/plugins/relaxNG/references/IdRefProvider.java
+++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/references/IdRefProvider.java
@@ -23,7 +23,7 @@
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiReference;
 import com.intellij.psi.PsiReferenceBase;
-import com.intellij.psi.impl.source.resolve.reference.PsiReferenceProviderBase;
+import com.intellij.psi.PsiReferenceProvider;
 import com.intellij.psi.impl.source.resolve.reference.impl.providers.AttributeValueSelfReference;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.psi.xml.XmlAttribute;
@@ -40,7 +40,7 @@
 import static com.intellij.patterns.XmlPatterns.xmlAttribute;
 import static com.intellij.patterns.XmlPatterns.xmlAttributeValue;
 
-public class IdRefProvider extends PsiReferenceProviderBase {
+public class IdRefProvider extends PsiReferenceProvider {
   public static final HasIdRefTypeCondition HAS_ID_REF_TYPE = new HasIdRefTypeCondition();
   public static final HasIdTypeCondition HAS_ID_TYPE = new HasIdTypeCondition();
 
diff --git a/xml/tests/src/com/intellij/xml/XmlNamespacesTest.java b/xml/tests/src/com/intellij/xml/XmlNamespacesTest.java
index e457bdc1..5e0932b 100644
--- a/xml/tests/src/com/intellij/xml/XmlNamespacesTest.java
+++ b/xml/tests/src/com/intellij/xml/XmlNamespacesTest.java
@@ -216,6 +216,10 @@
     myFixture.checkResultByFile("spring_after.xml");
   }
 
+  public void testXsiType() throws Exception {
+    myFixture.testHighlighting("import.xml", "import.xsd");
+  }
+
   private void doUnusedDeclarationTest(String text, String after, String name) throws Exception {
     doUnusedDeclarationTest(text, after, name, true);
   }
diff --git a/xml/tests/testData/unusedNs/import.xml b/xml/tests/testData/unusedNs/import.xml
new file mode 100644
index 0000000..9468f0f
--- /dev/null
+++ b/xml/tests/testData/unusedNs/import.xml
@@ -0,0 +1,5 @@
+<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xmlns="myNamespace"
+   xmlns:c="myNamespace"
+   xsi:type="c:CType">
+</A>
\ No newline at end of file
diff --git a/xml/tests/testData/unusedNs/import.xsd b/xml/tests/testData/unusedNs/import.xsd
new file mode 100644
index 0000000..e40fae5
--- /dev/null
+++ b/xml/tests/testData/unusedNs/import.xsd
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+           version="eeee" blockDefault="#all" finalDefault="" targetNamespace="myNamespace">
+
+    <xsd:simpleType name="CType"></xsd:simpleType>
+</xsd:schema>
\ No newline at end of file
