diff --git a/build/sdk.atree b/build/sdk.atree
index c09b66e..f2b747e 100644
--- a/build/sdk.atree
+++ b/build/sdk.atree
@@ -50,7 +50,6 @@
 
 # sdk scripts
 development/tools/scripts/AndroidManifest.template platforms/${PLATFORM_NAME}/templates/AndroidManifest.template
-development/tools/scripts/AndroidManifest.alias.template platforms/${PLATFORM_NAME}/templates/AndroidManifest.alias.template
 development/tools/scripts/AndroidManifest.tests.template platforms/${PLATFORM_NAME}/templates/AndroidManifest.tests.template
 development/tools/scripts/iml.template platforms/${PLATFORM_NAME}/templates/iml.template
 development/tools/scripts/ipr.template platforms/${PLATFORM_NAME}/templates/ipr.template
@@ -59,11 +58,8 @@
 development/tools/scripts/java_tests_file.template platforms/${PLATFORM_NAME}/templates/java_tests_file.template
 development/tools/scripts/layout.template platforms/${PLATFORM_NAME}/templates/layout.template
 development/tools/scripts/strings.template platforms/${PLATFORM_NAME}/templates/strings.template
-development/tools/scripts/alias.template platforms/${PLATFORM_NAME}/templates/alias.template
 development/tools/scripts/android_rules.xml platforms/${PLATFORM_NAME}/templates/android_rules.xml
-development/tools/scripts/alias_rules.xml platforms/${PLATFORM_NAME}/templates/alias_rules.xml
 development/tools/scripts/build.template tools/lib/build.template
-development/tools/scripts/build.alias.template tools/lib/build.alias.template
 
 # emacs support
 development/tools/scripts/android.el tools/lib/android.el
@@ -79,7 +75,6 @@
 development/samples/Snake platforms/${PLATFORM_NAME}/samples/Snake
 development/samples/SoftKeyboard platforms/${PLATFORM_NAME}/samples/SoftKeyboard
 development/samples/JetBoy platforms/${PLATFORM_NAME}/samples/JetBoy
-development/samples/SearchableDictionary platforms/${PLATFORM_NAME}/samples/SearchableDictionary
 
 # dx
 bin/dx platforms/${PLATFORM_NAME}/tools/dx
diff --git a/build/tools/make_windows_sdk.sh b/build/tools/make_windows_sdk.sh
index 68e6c80..9b688e6 100755
--- a/build/tools/make_windows_sdk.sh
+++ b/build/tools/make_windows_sdk.sh
@@ -185,8 +185,9 @@
 
     # Copy or move platform specific tools to the default platform.
     cp -v dalvik/dx/etc/dx.bat "$PLATFORM_TOOLS"/
-    # Note: mgwz.dll must be in same folder than aapt.exe
-    mv -v "$TOOLS"/{aapt.exe,aidl.exe,dexdump.exe,mgwz.dll} "$PLATFORM_TOOLS"/
+    mv -v "$TOOLS"/{aapt.exe,aidl.exe,dexdump.exe} "$PLATFORM_TOOLS"/
+    # Note: mgwz.dll must be both in SDK/tools for zipalign and in SDK/platform/XYZ/tools/ for aapt
+    cp -v "$TOOLS"/mgwz.dll "$PLATFORM_TOOLS"/
 
     # Fix EOL chars to make window users happy - fix all files at the top level only
     # as well as all batch files including those in platforms/<name>/tools/
diff --git a/samples/ApiDemos/_index.html b/samples/ApiDemos/_index.html
index b0d1c7b..6b30303 100755
--- a/samples/ApiDemos/_index.html
+++ b/samples/ApiDemos/_index.html
@@ -1,19 +1,42 @@
-<p>The API Demos include sample code for many aspects of the Android APIs, from screen layout to Intent resolution.
+<p>The API Demos application includes a variety of small applications 
+that illustrate the use of various Android APIs. It includes samples of:
 </p>
+<ul>
+  <li>Notifications</li>  
+  <li>Alarms</li>  
+  <li>Progress Dialogs</li>  
+  <li>Intents</li>  
+  <li>Menus</li>  
+  <li>Search</li>  
+  <li>Persistent application state</li>  
+  <li>Preferences</li>  
+  <li>Background Services</li>  
+  <li>App Widgets</li>  
+  <li>Voice Recognition</li>  
+  <li>And many many more...</li>  
+</ul>
 
-<dl>
-    <dt><a href="src/com/example/android/apis/app/index.html">App</a></dt>
-    <dd></dd>
+<p>You'll notice that all the samples are included in a single Android project,
+so the application code and other resource files for all samples are batched together. 
+To help you find the code that's relevant to you, here's a directory that
+points to the program code for the different topics included in the project:</p>
 
-    <dt><a href="src/com/example/android/apis/content/index.html">Content</a></dt>
-    <dd></dd>
+<ul>
+    <li><a href="src/com/example/android/apis/animation/index.html">Animation</a></li>
+
+    <li><a href="src/com/example/android/apis/app/index.html">App</a></li>
+
+    <li><a href="src/com/example/android/apis/appwidget/index.html">App Widgets</a></li>
+
+    <li><a href="src/com/example/android/apis/content/index.html">Content</a></li>
     
-    <dt><a href="src/com/example/android/apis/view/index.html">View</a></dt>
-    <dd></dd>
+    <li><a href="src/com/example/android/apis/graphics/index.html">Graphics</a></li>
     
-    <dt><a href="src/com/example/android/apis/graphics/index.html">Graphics</a></dt>
-    <dd></dd>
+    <li><a href="src/com/example/android/apis/media/index.html">Media</a></li>
+    
+    <li><a href="src/com/example/android/apis/os/index.html">OS</a></li>
 
-    <dt><a href="src/com/example/android/apis/text/index.html">Text</a></dt>
-    <dd></dd>
-</dl>
+    <li><a href="src/com/example/android/apis/text/index.html">Text</a></li>
+    
+    <li><a href="src/com/example/android/apis/view/index.html">Views</a></li>
+</ul>
diff --git a/samples/ApiDemos/default.properties b/samples/ApiDemos/default.properties
index 4513a1e..9d79b12 100644
--- a/samples/ApiDemos/default.properties
+++ b/samples/ApiDemos/default.properties
@@ -8,4 +8,4 @@
 # project structure.
 
 # Project target.
-target=android-3
+target=android-4
diff --git a/samples/Home/_index.html b/samples/Home/_index.html
new file mode 100644
index 0000000..2a62812
--- /dev/null
+++ b/samples/Home/_index.html
@@ -0,0 +1,9 @@
+<p>This is a sample Home application. The Home application that users use
+to launch applications by default is an ordinary application itself.
+A user can install additional Home applications and pick which one to use as the
+default Home. This is a sample of such an alternative.</p>
+
+<p>This is actually the source of an old incarnation of the default Home application,
+which may look familiar if you played with some of the older pre-1.0 SDKs.</p>
+
+<img alt="" src="/guide/samples/images/HomeSample.png" />
\ No newline at end of file
diff --git a/samples/JetBoy/_index.html b/samples/JetBoy/_index.html
new file mode 100644
index 0000000..6665164
--- /dev/null
+++ b/samples/JetBoy/_index.html
@@ -0,0 +1,24 @@
+<p>JetBoy is a sample game that demonstrates the use of the 
+<a href="/reference/android/media/JetPlayer.html">android.media.JetPlayer</a> 
+class to implement an interactive music soundtrack in an application. JetBoy uses 
+<a href="/guide/topics/media/index.html#jet">JET content created with
+JetCreator</a> and game-generated events fed to JetPlayer 
+to adapt the soundtrack to the user actions. Listen to how the melody picks 
+up when you start shooting asteroids, how you are congratulated when you 
+hit several asteroids in a row, or destroy enough of them in the allotted time.</p>
+
+<p>The JetBoyView.java file in JetBoy illustrates the loading of JET content 
+(loading a file, queuing segments), its playback, and how to alter what 
+is currently playing (use of clips and mute masks).</p>
+
+<p class="note"><strong>Note:</strong>
+The <code>JETBOY_content/</code> directory is empty in this online presentation of 
+the application. For complete access to all the JetBoy files, see the sample code included
+in the SDK, located at <code>&lt;sdk>/platforms/&lt;platform>/samples/JetBoy/</code>.
+</p>
+
+<p><strong>See also:</strong><br/>
+<a href="/guide/topics/media/jet/jetcreator_manual.html">SONiVOX JETCreator User Manual</a><br/>
+<a href="/reference/android/media/JetPlayer.html">JetPlayer class</a></p>
+
+<img alt="" src="/guide/samples/images/JetBoy.png"  />
diff --git a/samples/LunarLander/_index.html b/samples/LunarLander/_index.html
index 02daeef..6287b87 100644
--- a/samples/LunarLander/_index.html
+++ b/samples/LunarLander/_index.html
@@ -1,12 +1,12 @@
 <p>A sample game.  Your objective: to land on the moon.
-It demonstrates...
+It demonstrates:
 <ul> 
-<li>loading and drawing resources
-<li>taking keystrokes
-<li>animating by calling invalidate() from draw()
-<li>handling onPause() in an animation
-<li>and many other goodies...
+<li>Loading and drawing resources</li>
+<li>Taking keystrokes</li>
+<li>Animating by calling invalidate() from draw()</li>
+<li>Handling onPause() in an animation</li>
+<li>And more...</li>
 </ul>
 </p>
 
-<img height="220px" width="320px" alt="Lunar Lander Example" class="gallery"  src="sample_lunarlander.png" >
\ No newline at end of file
+<img alt=""  src="/guide/samples/images/sample_lunarlander.png" >
\ No newline at end of file
diff --git a/samples/LunarLander/sample_lunarlander.png b/samples/LunarLander/sample_lunarlander.png
deleted file mode 100644
index ea1ef14..0000000
--- a/samples/LunarLander/sample_lunarlander.png
+++ /dev/null
Binary files differ
diff --git a/samples/NotePad/_index.html b/samples/NotePad/_index.html
index 2a18969..92486e5 100644
--- a/samples/NotePad/_index.html
+++ b/samples/NotePad/_index.html
@@ -1,12 +1,19 @@
 <p>A simple note pad application.
-It demonstrates...
+It demonstrates:</p>
 <ul> 
-<li>using views
-<li>accessing a database
-<li>using an intent to open a new window
-<li>managing activity lifecycle
-<li>and many other goodies...
+<li>Using views</li>
+<li>Accessing a database</li>
+<li>Using an intent to open a new window</li>
+<li>Managing activity lifecycle</li>
+<li>And more...</li>
 </ul>
-</p>
-<img alt="Note Pad Example" class="gallery"  src="sample_notepad.png" >
-<img alt="Note Pad Example" class="gallery"  src="sample_note.png"  >
+
+<p class="note">Please notice that this is not the same
+notepad code that's used for the <a href="/guide/tutorials/notepad/index.html">Notepad Tutorial</a>. 
+They are similar in nature, but there are several differences in implementation &mdash; the tutorial
+is slightly more simple. If you're new to 
+Android development, we suggest you start with the tutorial, then visit this
+code later to see more sample code.</p>
+
+<img alt="" src="/guide/samples/images/sample_notepad.png" />
+<img alt="" src="/guide/samples/images/sample_note.png" />
diff --git a/samples/NotePad/sample_note.png b/samples/NotePad/sample_note.png
deleted file mode 100644
index cea1a08..0000000
--- a/samples/NotePad/sample_note.png
+++ /dev/null
Binary files differ
diff --git a/samples/NotePad/sample_notepad.png b/samples/NotePad/sample_notepad.png
deleted file mode 100644
index c498847..0000000
--- a/samples/NotePad/sample_notepad.png
+++ /dev/null
Binary files differ
diff --git a/samples/SearchableDictionary/Android.mk b/samples/SearchableDictionary/Android.mk
deleted file mode 100755
index 8c5fdf4..0000000
--- a/samples/SearchableDictionary/Android.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := samples
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-
-LOCAL_SDK_VERSION := current
-
-LOCAL_PACKAGE_NAME := SearchableDictionary
-
-include $(BUILD_PACKAGE)
diff --git a/samples/SearchableDictionary/AndroidManifest.xml b/samples/SearchableDictionary/AndroidManifest.xml
deleted file mode 100644
index 93cd47b..0000000
--- a/samples/SearchableDictionary/AndroidManifest.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** 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.
-*/
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.example.android.searchabledict">
-
-    <uses-sdk android:minSdkVersion="4" />
-
-    <application android:label="@string/app_name"
-            android:icon="@drawable/ic_dictionary">
-
-        <!-- The default activity of the app.  Can also display search results. -->
-        <activity android:name=".SearchableDictionary"
-                android:label="@string/app_name"
-                android:theme="@android:style/Theme.NoTitleBar">
-
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-
-            <!-- Receives the search request. -->
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-
-            <!-- Points to searchable meta data. -->
-            <meta-data android:name="android.app.searchable"
-                    android:resource="@xml/searchable"/>
-        </activity>
-
-        <!-- Displays the definition of a word. -->
-        <activity android:name=".WordActivity"
-                android:theme="@android:style/Theme.NoTitleBar"/>
-
-        <!-- Provides search suggestions for words and their definitions. -->
-        <provider android:name="DictionaryProvider"
-                android:authorities="dictionary"
-                android:syncable="false" />
-
-    </application>
-</manifest>
diff --git a/samples/SearchableDictionary/res/drawable/ic_dictionary.gif b/samples/SearchableDictionary/res/drawable/ic_dictionary.gif
deleted file mode 100644
index 47cdfc2..0000000
--- a/samples/SearchableDictionary/res/drawable/ic_dictionary.gif
+++ /dev/null
Binary files differ
diff --git a/samples/SearchableDictionary/res/drawable/ic_dictionary.png b/samples/SearchableDictionary/res/drawable/ic_dictionary.png
new file mode 100644
index 0000000..64eb294
--- /dev/null
+++ b/samples/SearchableDictionary/res/drawable/ic_dictionary.png
Binary files differ
diff --git a/samples/SearchableDictionary/res/layout/main.xml b/samples/SearchableDictionary/res/layout/main.xml
deleted file mode 100644
index d0dd522..0000000
--- a/samples/SearchableDictionary/res/layout/main.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** 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.
-*/
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-    <TextView
-            android:id="@+id/textField"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/search_instructions"/>
-
-    <ListView
-            android:id="@+id/list"
-            android:layout_width="fill_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"/>
-</LinearLayout>
-
-
diff --git a/samples/SearchableDictionary/res/layout/word.xml b/samples/SearchableDictionary/res/layout/word.xml
deleted file mode 100644
index ba1a3da..0000000
--- a/samples/SearchableDictionary/res/layout/word.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** 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.
-*/
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-    <TextView
-            android:id="@+id/word"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:textSize="30sp"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/search_instructions"
-            android:layout_marginLeft="10dip"
-            android:layout_marginTop="5dip" />
-    <TextView
-            android:id="@+id/definition"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/search_instructions"
-            android:layout_marginLeft="10dip" />
-</LinearLayout>
diff --git a/samples/SearchableDictionary/res/raw/definitions.txt b/samples/SearchableDictionary/res/raw/definitions.txt
deleted file mode 100644
index e4e1cbd..0000000
--- a/samples/SearchableDictionary/res/raw/definitions.txt
+++ /dev/null
@@ -1,997 +0,0 @@
-abbey - n. a monastery ruled by an abbot
-abide - v. dwell; inhabit or live in
-abound - v. be abundant or plentiful; exist in large quantities
-absence - n. the state of being absent
-absorb - v. assimilate or take in
-abstinence - n. practice of refraining from indulging an appetite especially alcohol
-absurd - j. inconsistent with reason or logic or common sense
-abundant - j. present in great quantity
-abusive - j. characterized by physical or psychological maltreatment
-academic - j. associated with school or learning
-academy - n. a school for special training
-accept - v. consider or hold as true
-access - v. reach or gain access to
-accessible - j. easily obtained
-acclaim - n. enthusiastic approval
-accommodate - v. provide with something desired or needed
-accompany - v. go or travel along with
-accomplish - v. to gain with effort
-account - v. furnish a justifying analysis or explanation
-accurate - j. conforming exactly or almost exactly to fact or to a standard or performing with total accuracy
-accusation - n. an assertion that someone is guilty of a fault or offence
-accuse - v. blame for, make a claim of wrongdoing or misbehavior against
-acid - j. biting, sarcastic, or scornful
-acknowledge - v. declare to be true or admit the existence or reality or truth of
-acquire - v. come into the possession of something concrete or abstract
-acquisition - n. something acquired or received
-adamant - j. impervious to pleas, persuasion, requests, reason
-adjacent - j. having a common boundary or edge; abutting; touching
-administrator - n. someone who manages a government agency or department
-advent - n. arrival that has been awaited (especially of something momentous)
-adverse - j. contrary to your interests or welfare
-advisory - n. an announcement that usually advises or warns the public of some threat
-advocacy - n. active support of an idea or cause etc.; especially the act of pleading or arguing for something
-advocate - v. speak, plead, or argue in favor of
-affect - n. the conscious subjective aspect of feeling or emotion
-affirmative - j. affirming or giving assent
-aggression - n. violent action that is hostile and usually unprovoked
-airy - j. not practical or realizable; speculative
-album - n. a book of blank pages with pockets or envelopes; for organizing photographs or stamp collections etc
-alcohol - n. a liquor or brew containing alcohol as the active agent
-alien - j. being or from or characteristic of another place or part of the world
-allegiance - n. the loyalty that citizens owe to their country (or subjects to their sovereign)
-alley - n. a narrow street with walls on both sides
-alliance - n. a formal agreement establishing an association or alliance between nations or other groups to achieve a particular aim
-ally - n. an associate who provides cooperation or assistance
-altar - n. a raised structure on which gifts or sacrifices to a god are made
-alter - v. cause to change; make different; cause a transformation
-alternate - j. serving or used in place of another
-alternative - j. serving or used in place of another
-altitude - n. elevation especially above sea level or above the earth's surface
-amateur - j. lacking professional skill or expertise
-ambiguous - j. having more than one possible meaning
-ambitious - j. having a strong desire for success or achievement
-ambivalent - j. uncertain or unable to decide about what course to follow
-analogy - n. drawing a comparison in order to show a similarity in some respect
-analyst - n. someone who is skilled at analyzing data
-analyze - v. break down into components or essential features
-anchor - v. fix firmly and stably
-annual - j. occurring or payable every year
-anonymous - j. having no known name or identity or known source
-antichrist - n. the adversary of Christ (or Christianity) mentioned in the New Testament
-antique - j. made in or typical of earlier times and valued for its age
-anxious - j. causing or fraught with or showing anxiety
-apartheid - n. a social policy or racial segregation involving political and economic and legal discrimination against people who are not Whites
-apocalyptic - j. prophetic of devastation or ultimate doom
-apology - n. an expression of regret at having caused trouble for someone
-apparel - n. clothing in general
-apparent - j. clearly revealed to the mind or the senses or judgment
-appease - v. make peace with
-appropriate - j. suitable for a particular person or place or condition etc
-apt - j. being of striking appropriateness and pertinence
-arbitrary - j. based on or subject to individual discretion or preference or sometimes impulse or caprice
-arcade - n. a covered passageway with shops and stalls on either side
-arrange - v. put into a proper or systematic order
-arrangement - n. an orderly grouping (of things or persons) considered as a unit; the result of arranging
-arrival - n. the act of arriving at a certain place
-arrogance - n. overbearing pride evidenced by a superior manner toward inferiors
-arrogant - j. having or showing feelings of unwarranted importance out of overbearing pride
-articulate - j. expressing yourself easily or characterized by clear expressive language
-assassination - n. murder of a public figure by surprise attack
-assess - v. set or determine the amount of (a payment such as a fine)
-assets - n. anything of material value or usefulness that is owned by a person or company
-asylum - n. a shelter from danger or hardship
-auburn - j. (of hair) colored a moderate reddish-brown
-august - j. profoundly honored
-aura - n. a distinctive but intangible quality surrounding a person or thing
-austere - j. of a stern or strict bearing or demeanor; forbidding in aspect
-authentic - j. not counterfeit or copied
-authenticity - n. undisputed credibility
-authoritarian - n. a person who behaves in a tyrannical manner
-autobiography - n. a biography of yourself
-autonomous - j. existing as an independent entity
-autonomy - n. immunity from arbitrary exercise of authority: political independence
-avid - j. marked by active interest and enthusiasm
-banal - j. repeated too often; over familiar through overuse
-barring - n. the act of excluding someone by a negative vote or veto
-bass - n. the lowest adult male singing voice
-batter - n. a liquid or semiliquid mixture, as of flour, eggs, and milk, used in cooking
-belle - n. a young woman who is the most charming and beautiful of several rivals
-beneficial - j. promoting or enhancing well-being
-benefit - n. something that aids or promotes well-being
-benign - j. not dangerous to health; not recurrent or progressive (especially of a tumor)
-bid - n. a formal proposal to buy at a specified price
-biography - n. an account of the series of events making up a person's life
-biology - n. the science that studies living organisms
-blaze - n. a strong flame that burns brightly
-bleak - j. unpleasantly cold and damp
-bogus - j. fraudulent; having a misleading appearance
-bolster - v. support and strengthen
-bomb - n. an explosive device fused to explode under specific conditions
-bore - n. a person who evokes boredom
-botanical - j. of or relating to plants or botany
-boycott - n. a group's refusal to have commercial dealings with some organization in protest against its policies
-brass - n. an alloy of copper and zinc
-breach - n. an opening (especially a gap in a dike or fortification)
-broadcast - n. message that is transmitted by radio or television
-brokerage - n. the business of a broker; charges a fee to arrange a contract between two parties
-buffet - n. a meal set out on a buffet at which guests help themselves
-bumper - n. a mechanical device consisting of bars at either end of a vehicle to absorb shock and prevent serious damage
-bureau - n. an administrative unit of government
-bureaucracy - n. non elected government officials
-butt - v. to strike, thrust or shove against
-cabinet - n. persons appointed by a head of state to head executive departments of government and act as official advisers
-caliber - n. a degree or grade of excellence or worth
-campaign - n. a series of actions advancing a principle or tending toward a particular end
-canon - n. a rule or especially body of rules or principles generally established as valid and fundamental in a field or art or philosophy
-cardinal - j. serving as an essential component
-caricature - n. a representation of a person that is exaggerated for comic effect
-casual - j. without or seeming to be without plan or method; offhand
-catastrophe - n. an event resulting in great loss and misfortune
-caucus - n. a closed political meeting
-causal - j. involving or constituting a cause; causing
-censure - n. harsh criticism or disapproval
-census - n. a periodic count of the population
-cereal - n. grass whose starchy grains are used as food: wheat; rice; rye; oats; maize; buckwheat; millet
-ceremonial - j. marked by pomp or ceremony or formality
-chaos - n. a state of extreme confusion and disorder
-characteristic - n. a distinguishing quality
-chronic - j. being long-lasting and recurrent or characterized by long suffering
-citadel - n. a stronghold into which people could go for shelter during a battle
-cite - v. refer to for illustration or proof
-clumsy - j. not elegant or graceful in expression
-coalition - n. an organization of people (or countries) involved in a pact or treaty
-coherent - j. marked by an orderly, logical, and aesthetically consistent relation of parts
-coincidence - n. the temporal property of two things happening at the same time
-collapse - v. break down, literally or metaphorically
-colleague - n. an associate that one works with
-collective - j. set up on the principle of collectivism or ownership and production by the workers involved usually under the supervision of a government
-collector - n. a person who collects things
-collision - n. an accident resulting from violent impact of a moving object
-commemorate - v. mark by some ceremony or observation
-commentary - n. a written explanation or criticism or illustration that is added to a book or other textual material
-commission - n. a special group delegated to consider some matter
-commitment - n. the act of binding yourself (intellectually or emotionally) to a course of action
-commodity - n. articles of commerce
-commute - n. a regular journey of some distance to and from your place of work
-comparable - j. able to be compared or worthy of comparison
-comparison - n. the act of examining resemblances
-compassionate - j. showing or having compassion
-compensate - v. make payment to; compensate
-competence - n. the quality of being adequately or well qualified physically and intellectually
-competent - j. properly or sufficiently qualified or capable or efficient
-competitive - j. involving competition or competitiveness
-competitor - n. the contestant you hope to defeat
-complex - j. complicated in structure; consisting of interconnected parts
-component - n. an artifact that is one of the individual parts of which a composite entity is made up; especially a part that can be separated from or attached to a system
-composer - n. someone who composes music as a profession
-comprehensive - j. broad in scope
-concede - v. admit (to a wrongdoing)
-conceive - v. have the idea for
-concession - n. a point conceded or yielded
-confederate - j. united in a group or league
-confidence - n. a state of confident hopefulness that events will be favorable
-confident - j. having or marked by confidence or assurance
-confront - v. oppose, as in hostility or a competition
-conscience - n. a feeling of shame when you do something immoral
-conscious - j. knowing and perceiving; having awareness of surroundings and sensations and thoughts
-consecutive - j. one after the other
-consensus - n. agreement in the judgment or opinion reached by a group as a whole
-conservatism - n. a political or theological orientation advocating the preservation of the best in society and opposing radical changes
-conservative - j. avoiding excess
-consistency - n. a harmonious uniformity or agreement among things or parts
-conspicuous - j. obvious to the eye or mind
-conspiracy - n. a plot to carry out some harmful or illegal act (especially a political plot)
-constituency - n. the body of voters who elect a representative for their area
-consume - v. use up (resources or materials)
-consumer - n. a person who uses goods or services
-consumption - n. the process of taking food into the body through the mouth
-contemplate - v. look at thoughtfully; observe deep in thought
-contemporary - j. belonging to the present time
-contender - n. the contestant you hope to defeat
-contentious - j. inclined or showing an inclination to dispute or disagree, even to engage in law suits
-contingent - j. possible but not certain to occur
-continuous - j. continuing in time or space without interruption
-contradiction - n. opposition between two conflicting forces or ideas
-contradictory - j. unable for both to be true at the same time
-contribution - n. a voluntary gift (as of money or service or ideas) made to some worthwhile cause
-contributor - n. someone who contributes (or promises to contribute) a sum of money
-convenience - n. the quality of being useful and convenient
-conversion - n. the act of changing from one use or function or purpose to another
-convertible - j. designed to be changed from one use or form to another
-conviction - n. an unshakable belief in something without need for proof or evidence
-corporate - j. of or belonging to a corporation
-corps - n. a body of people associated together
-corruption - n. destroying someone's (or some group's) honesty or loyalty; undermining moral integrity
-cosmetic - j. serving an esthetic rather than a useful purpose
-cosmopolitan - j. of worldwide scope or applicability
-counsel - n. something that provides direction or advice as to a decision or course of action
-counterpart - n. a person or thing having the same function or characteristics as another
-courageous - j. able to face and deal with danger or fear without flinching
-course - n. a connected series of events or actions or developments
-courtesy - n. a courteous or respectful or considerate act
-credible - j. appearing to merit belief or acceptance
-critique - n. a serious examination and judgment of something
-crusade - v. exert oneself continuously, vigorously, or obtrusively to gain an end or engage in a crusade for a certain cause or person; be an advocate for
-crush - v. to compress with violence, out of natural shape or condition
-curator - n. the custodian of a collection (as a museum or library)
-curriculum - n. an integrated course of academic studies
-cynical - j. believing the worst of human nature and motives; having a sneering disbelief in e.g. selflessness of others
-cynicism - n. a cynical feeling of distrust
-daring - n. the trait of being willing to undertake things that involve risk or danger
-debacle - n. a sudden and violent collapse
-debut - v. appear for the first time in public
-decay - n. the organic phenomenon of rotting
-decency - n. the quality of conforming to standards of propriety and morality
-decent - j. socially or conventionally correct; refined or virtuous
-decisive - j. characterized by decision and firmness
-decree - n. a legally binding command or decision entered on the court record (as if issued by a court or judge)
-dedication - n. complete and wholehearted fidelity
-default - n. loss due to not showing up
-defendant - n. a person or institution against whom an action is brought in a court of law; the person being sued or accused
-defensive - j. attempting to justify or defend in speech or writing
-defiance - n. a hostile challenge
-definite - j. known for certain
-delicacy - n. something considered choice to eat
-demise - v. transfer by a lease or by a will
-demonstrate - v. establish the validity of something, as by an example, explanation or experiment
-denominator - n. the divisor of a fraction
-deposition - n. (law) a pretrial interrogation of a witness; usually conducted in a lawyer's office
-depression - n. a long-term economic state characterized by unemployment and low prices and low levels of trade and investment
-depth - n. the attribute or quality of being deep, strong, or intense
-derive - v. come from
-descent - n. properties attributable to your ancestry
-desert - n. arid land with little or no vegetation
-designate - v. give an assignment to (a person) to a post, or assign a task to (a person)
-despair - n. a state in which all hope is lost or absent
-desperate - j. showing extreme urgency or intensity especially because of great need or desire
-detect - v. discover or determine the existence, presence, or fact of
-deter - v. try to prevent; show opposition to
-determination - n. the quality of being determined to do or achieve something; firmness of purpose
-deterrent - j. tending to deter
-diagnosis - n. identifying the nature or cause of some phenomenon
-dialogue - n. a discussion intended to produce an agreement
-difference - n. the quality of being unlike or dissimilar
-dignity - n. the quality of being worthy of esteem or respect
-dilemma - n. state of uncertainty or perplexity especially as requiring a choice between equally unfavorable options
-diplomacy - n. subtly skillful handling of a situation
-diplomat - n. a person who deals tactfully with others
-diplomatic - j. using or marked by tact in dealing with sensitive matters or people
-disagree - v. be of different opinions
-disappear - v. become invisible or unnoticeable
-discern - v. detect with the senses
-discipline - n. a system of rules of conduct or method of practice
-discomfort - n. the state of being tense and feeling pain
-discourse - n. extended verbal expression in speech or writing
-discover - v. see for the first time; make a discovery
-discriminate - v. treat differently on the basis of sex or race
-discussion - n. an exchange of views on some topic
-disdain - n. lack of respect accompanied by a feeling of intense dislike
-dishonest - j. deceptive or fraudulent; disposed to cheat or defraud or deceive
-dismal - j. causing dejection
-dismay - v. fill with apprehension or alarm; cause to be unpleasantly surprised
-dismissal - n. the termination of someone's employment (leaving them free to depart)
-disparity - n. inequality or difference in some respect
-disregard - n. willful lack of care and attention
-dissent - n. a difference of opinion
-distant - j. separated in space or coming from or going to a distance
-distinction - n. a distinguishing difference
-distress - n. extreme physical pain
-distrust - v. regard as untrustworthy; regard with suspicion; have no faith or confidence in
-diverse - j. many and different
-diversion - n. an activity that diverts or amuses or stimulates
-diversity - n. noticeable heterogeneity
-divert - v. turn aside; turn away from
-document - n. writing that provides information (especially information of an official nature)
-doe - n. mature female of mammals of which the male is called 'buck'
-domain - n. territory over which rule or control is exercised
-dominance - n. the state that exists when one person or group has power over another
-dominant - j. exercising influence or control
-dominate - v. be in control
-domination - n. social control by dominating
-donate - v. give to a charity or good cause
-donor - n. person who makes a gift of property
-drastic - j. forceful and extreme and rigorous
-drought - n. a shortage of rainfall
-dubious - j. open to doubt or suspicion
-dynamics - n. the branch of mechanics concerned with the forces that cause motions of bodies
-earnest - j. characterized by a firm and humorless belief in the validity of your opinions
-eccentric - n. a person with an unusual or odd personality
-eclectic - j. selecting what seems best of various styles or ideas
-editorial - n. an article giving opinions or perspectives
-effect - n. a phenomenon that follows and is caused by some previous phenomenon
-effective - j. works well as a means or remedy
-efficiency - n. skillfulness in avoiding wasted time and effort
-efficient - j. able to accomplish a purpose; functioning effectively
-elaborate - v. add details, as to an account or idea; clarify the meaning of and discourse in a learned way, usually in writing
-element - n. any of the more than 100 known substances (of which 92 occur naturally) that cannot be separated into simpler substances and that singly or in combination constitute all matter
-eligible - j. qualified for or allowed or worthy of being chosen
-eliminate - v. terminate, end, or take out
-embargo - n. a government order imposing a trade barrier
-emblem - n. a visible symbol representing an abstract idea
-embrace - n. the act of clasping another person in the arms (as in greeting or affection)
-emerge - v. come out into view, as from concealment
-emergence - n. the gradual beginning or coming forth
-eminent - j. of imposing height; especially standing out above others
-emphasis - n. intensity or forcefulness of expression
-emphasize - v. to stress, single out as important
-employee - n. a worker who is hired to perform a job
-employer - n. a person or firm that employs workers
-emulate - v. imitate the function of (another system), as by modifying the hardware or the software
-enact - v. order by virtue of superior authority; decree
-encourage - v. inspire with confidence; give hope or courage to
-encyclopedia - n. a reference work (often in several volumes) containing articles on various topics
-endorse - v. be behind; approve of
-enduring - j. patiently bearing continual wrongs or trouble
-energetic - j. possessing or exerting or displaying energy
-enhance - v. make better or more attractive
-enormous - j. extraordinarily large in size or extent or amount or power or degree
-enthusiastic - j. having or showing great excitement and interest
-entity - n. that which is perceived or known or inferred to have its own distinct existence (living or nonliving)
-epic - j. very imposing or impressive; surpassing the ordinary (especially in size or scale)
-epidemic - n. a widespread outbreak of an infectious disease; many people are infected at the same time
-episode - n. a brief section of a literary or dramatic work that forms part of a connected series
-equilibrium - n. a stable situation in which forces cancel one another
-equity - n. the difference between the market value of a property and the claims held against it
-equivalent - j. being essentially equal to something
-error - n. a wrong action attributable to bad judgment or ignorance or inattention
-esquire - n. a title of respect for a member of the English gentry ranking just below a knight; placed after the name
-essence - n. the central meaning or theme of a speech or literary work
-evangelical - j. relating to or being a Christian church believing in personal conversion and the inerrancy of the Bible especially the 4 Gospels
-evoke - v. call to mind
-evolution - n. a process in which something passes by degrees to a different stage (especially a more advanced or mature stage)
-exceed - v. be greater in scope or size than some standard
-excellent - j. very good; of the highest quality
-excerpt - n. a passage selected from a larger work
-excess - j. more than is needed, desired, or required
-exclude - v. prevent from being included or considered or accepted
-excursion - n. a journey taken for pleasure
-exempt - v. grant relief or an exemption from a rule or requirement to
-existence - n. everything that exists anywhere
-exit - v. move out of or depart from
-exotic - j. strikingly strange or unusual
-expand - v. become larger in size or volume or quantity
-expansion - n. the act of increasing (something) in size or volume or quantity or scope
-expect - v. regard something as probable or likely
-expectancy - n. something expected (as on the basis of a norm)
-expense - n. money spent to perform work and usually reimbursed by an employer
-expertise - n. skillfulness by virtue of possessing special knowledge
-explicit - j. precisely and clearly expressed or readily observable; leaving nothing to implication
-explode - v. drive from the stage by noisy disapproval
-exploit - v. use or manipulate to one's advantage
-explosion - n. the act of exploding or bursting
-explosive - n. a chemical substance that undergoes a rapid chemical change (with the production of gas) on being heated or struck
-exposure - n. vulnerability to the elements; to the action of heat or cold or wind or rain
-expressive - j. characterized by expression
-extension - n. an addition to the length of something
-extensive - j. large in spatial extent or range or scope or quantity
-exterior - n. the outer side or surface of something
-external - j. happening or arising or located outside or beyond some limits or especially surface
-extradition - n. the surrender of an accused or convicted person by one state or country to another (usually under the provisions of a statute or treaty)
-extraordinary - j. beyond what is ordinary or usual; highly unusual or exceptional or remarkable
-extravagant - j. unrestrained, especially with regard to feelings
-exuberant - j. joyously unrestrained
-fabulous - j. extremely pleasing
-facial - j. of or concerning the face
-facility - n. something designed and created to serve a particular function and to afford a particular convenience or service
-faction - n. a dissenting clique
-faulty - j. characterized by errors; not agreeing with a model or not following established rules
-feasible - j. capable of being done with means at hand and circumstances as they are
-felony - n. a serious crime (such as murder or arson)
-feminine - j. associated with women and not with men
-fervor - n. the state of being emotionally aroused and worked up
-fetus - n. an unborn or unhatched vertebrate in the later stages of development showing the main recognizable features of the mature animal
-feud - n. a bitter quarrel between two parties
-feudal - j. of or relating to or characteristic of feudalism
-fidelity - n. the quality of being faithful
-finale - n. the concluding part of any performance
-finite - j. bounded or limited in magnitude or spatial or temporal extent
-fiscal - j. involving financial matters
-flag - n. emblem usually consisting of a rectangular piece of cloth of distinctive design
-flamboyant - j. marked by ostentation but often tasteless
-fleet - n. a group of warships organized as a tactical unit
-flexible - j. able to flex; able to bend easily
-flop - n. a complete failure
-flourish - n. a showy gesture
-foil - n. anything that serves by contrast to call attention to another thing's good qualities
-ford - v. cross a river where it's shallow
-forecast - n. a prediction about how something (as the weather) will develop
-foreign - j. relating to or originating in or characteristic of another place or part of the world
-foresee - v. act in advance of; deal with ahead of time
-formation - n. an arrangement of people or things acting as a unit
-formidable - j. extremely impressive in strength or excellence
-formula - n. directions for making something
-forte - n. an asset of special worth or utility
-forth - a. forward in time or order or degree
-foster - v. promote the growth of
-fragile - j. easily broken or damaged or destroyed
-frantic - j. excessively agitated; distraught with fear or other violent emotion
-fray - v. wear away by rubbing
-frequency - n. the number of occurrences within a given time period
-fringe - n. a social group holding marginal or extreme views
-frivolous - j. not serious in content or attitude or behavior
-frontier - n. a wilderness at the edge of a settled area of a country
-fundamental - j. being or involving basic facts or principles
-further - v. promote the growth of
-futile - j. producing no result or effect
-galaxy - n. (astronomy) a collection of star systems; any of the billions of systems each having many stars and nebulae and dust
-gamble - v. take a risk in the hope of a favorable outcome
-gauge - n. a measuring instrument for measuring and indicating a quantity such as the thickness of wire or the amount of rain etc.
-generate - v. bring into existence
-generic - j. applicable to an entire class or group
-generosity - n. the trait of being willing to give your money or time
-genesis - n. the first book of the Old Testament: tells of Creation; Adam and Eve; Cain and Abel
-gesture - n. motion of hands or body to emphasize or help to express a thought or feeling
-gigantic - j. so exceedingly large or extensive as to suggest a giant or mammoth
-gist - n. the choicest or most essential or most vital part of some idea or experience
-glimpse - n. a brief or incomplete view
-glorious - j. having great beauty and splendor
-grandeur - n. the quality of being magnificent or splendid or grand
-grandiose - j. impressive because of unnecessary largeness or grandeur; used to show disapproval
-grave - j. of great gravity or crucial import; requiring serious thought
-gravity - n. a manner that is serious and solemn
-grief - n. something that causes great unhappiness
-grotesque - j. distorted and unnatural in shape or size; abnormal and hideous
-grove - n. a small growth of trees without underbrush
-guise - n. an artful or simulated semblance
-hack - n. a mediocre and disdained writer
-hale - j. exhibiting or restored to vigorous good health
-handwriting - n. something written by hand
-harbor - v. hold back a thought or feeling about
-hazard - n. a source of danger; a possibility of incurring loss or misfortune
-heir - n. a person who is entitled by law or by the terms of a will to inherit the estate of another
-heritage - n. practices that are handed down from the past by tradition
-hilarious - j. marked by or causing boisterous merriment or convulsive laughter
-hollow - j. not solid; having a space or gap or cavity
-homage - n. respectful deference
-hostility - n. violent action that is hostile and usually unprovoked
-humane - j. marked or motivated by concern with the alleviation of suffering
-humanitarian - n. someone devoted to the promotion of human welfare and to social reforms
-hush - v. become quiet or still; fall silent
-hybrid - n. (genetics) an organism that is the offspring of genetically dissimilar parents or stock; especially offspring produced by breeding plants or animals of different varieties or breeds or species
-hypocrisy - n. insincerity by virtue of pretending to have qualities or beliefs that you do not really have
-hypothesis - n. a tentative insight into the natural world; a concept that is not yet verified but that if true would explain certain facts or phenomena
-hysteria - n. excessive or uncontrollable fear
-icon - n. a conventional religious painting in oil on a small wooden panel; venerated in the Eastern Church
-ideology - n. an orientation that characterizes the thinking of a group or nation
-illusion - n. an erroneous mental representation
-imaginary - j. not based on fact; unreal
-imitation - n. something copied or derived from an original
-immense - j. unusually great in size or amount or degree or especially extent or scope
-immigrant - n. a person who comes to a country where they were not born in order to settle there
-imminent - j. close in time; about to occur
-immoral - j. not adhering to ethical or moral principles
-immune - j. (usually followed by 'to') not affected by a given influence
-impending - j. close in time; about to occur
-implausible - j. having a quality that provokes disbelief
-implicit - j. implied though not directly expressed; inherent in the nature of something
-imply - v. express or state indirectly
-impose - v. compel to behave in a certain way
-improper - j. not suitable or right or appropriate
-impulse - n. a sudden desire
-inadequate - j. not sufficient to meet a need
-incentive - n. a positive motivational influence
-incidence - n. the relative frequency of occurrence of something
-incident - n. a public disturbance
-incidentally - a. of a minor or subordinate nature
-inclined - j. at an angle to the horizontal or vertical position
-incompetence - n. lack of physical or intellectual ability or qualifications
-inconsistent - j. displaying a lack of consistency
-inconvenient - j. not suited to your comfort, purpose or needs
-indefinitely - a. to an indefinite extent; for an indefinite time
-indicator - n. a device for showing the operating condition of some system
-indifferent - j. showing no care or concern in attitude or action
-indigenous - j. originating where it is found
-indulge - v. enjoy to excess
-inefficient - j. not producing desired results; wasteful
-inept - j. generally incompetent and ineffectual
-inevitable - j. incapable of being avoided or prevented
-inexpensive - j. relatively low in price or charging low prices
-infamous - j. known widely and usually unfavorably
-infinite - j. having no limits or boundaries in time or space or extent or magnitude
-influence - n. a power to affect persons or events especially power based on prestige etc
-influential - j. having or exercising influence or power
-influx - n. the process of flowing in
-ingenious - j. showing inventiveness and skill
-inherent - j. in the nature of something though not readily apparent
-injunction - n. (law) a judicial remedy issued in order to prohibit a party from doing or continuing to do a certain activity
-inland - a. towards or into the interior of a region
-insight - n. the clear (and often sudden) understanding of a complex situation
-insistence - n. the state of demanding notice or attention
-inspector - n. a high ranking police officer
-instance - n. an occurrence of something
-instant - n. a very short time
-insufficient - j. of a quantity not able to fulfill a need or requirement
-integral - j. essential to completeness; lacking nothing
-integrity - n. moral soundness
-intellectual - j. appealing to or using the intellect
-intelligence - n. the ability to comprehend; to understand and profit from experience
-intensive - j. characterized by a high degree or intensity; often used as a combining form
-intention - n. an act of intending; a volition that you intend to carry out
-interact - v. act together or towards others or with others
-interim - n. the time between one event, process, or period and another
-intermediate - j. lying between two extremes in time or space or state
-intervene - v. get involved, so as to alter or hinder an action, or through force or threat of force
-intervention - n. the act of intervening (as to mediate a dispute, etc.)
-intimacy - n. close or warm friendship
-intricate - j. having many complexly arranged elements; elaborate
-invasion - n. any entry into an area not previously occupied
-inventive - j. (used of persons or artifacts) marked by independence and creativity in thought or action
-investigator - n. a police officer who investigates crimes
-investor - n. someone who commits capital in order to gain financial returns
-invincible - j. incapable of being overcome or subdued
-invoke - v. cite as an authority; resort to
-involuntary - j. not subject to the control of the will
-involve - v. engage as a participant
-irony - n. incongruity between what might be expected and what actually occurs
-irrational - j. not consistent with or using reason
-irrelevant - j. having no bearing on or connection with the subject at issue
-irresistible - j. impossible to resist; overpowering
-irresponsible - j. showing lack of care for consequences
-judgment - n. the capacity to assess situations or circumstances shrewdly and to draw sound conclusions
-judicial - j. belonging or appropriate to the office of a judge
-juicy - j. lucrative
-junction - n. something that joins or connects
-jurisdiction - n. (law) the right and power to interpret and apply the law
-juror - n. someone who serves (or waits to be called to serve) on a jury
-justification - n. something (such as a fact or circumstance) that shows an action to be reasonable or necessary
-juvenile - j. of or relating to or characteristic of or appropriate for children or young people
-ken - n. range of what one can know or understand
-knight - n. originally a person of noble birth trained to arms and chivalry; today in Great Britain a person honored by the sovereign for personal merit
-knit - n. needlework created by interlacing yarn in a series of connected loops using straight eyeless needles or by machine
-lament - v. regret strongly
-landmark - n. the position of a prominent or well-known object in a particular landscape
-landscape - n. an expanse of scenery that can be seen in a single view
-lapse - n. a break or intermission in the occurrence of something
-laureate - n. someone honored for great achievements; figuratively someone crowned with a laurel wreath
-lavish - j. very generous
-lax - j. lacking in rigor or strictness
-legacy - n. (law) a gift of personal property by will
-legislative - j. relating to a legislature or composed of members of a legislature
-legitimacy - n. lawfulness by virtue of being authorized or in accordance with law
-legitimate - j. in accordance with recognized or accepted standards or principles
-leisure - n. time available for ease and relaxation
-lenient - j. not strict
-levy - v. impose and collect
-liable - j. held legally responsible
-liberalism - n. a political orientation that favors social progress by reform and by changing laws rather than by revolution
-lifelong - j. continuing through life
-lifetime - n. the period during which something is functional (as between birth and death)
-likelihood - n. the probability of a specified outcome
-liking - n. a feeling of pleasure and enjoyment
-liquor - n. an alcoholic beverage that is distilled rather than fermented
-literacy - n. the ability to read and write
-literal - j. avoiding embellishment or exaggeration (used for emphasis)
-literature - n. creative writing of recognized artistic value
-logic - n. the principles that guide reasoning within a given field or situation
-logical - j. capable of thinking and expressing yourself in a clear and consistent manner
-lovable - j. having characteristics that attract love or affection
-lucrative - j. producing a sizeable profit
-ludicrous - j. broadly or extravagantly humorous; resembling farce
-lying - n. the deliberate act of deviating from the truth
-machinery - n. machines or machine systems collectively
-magnet - n. (physics) a device that attracts iron and produces a magnetic field
-magnificent - j. characterized by grandeur
-magnitude - n. the property of relative size or extent (whether large or small)
-maintain - v. state or assert
-maintenance - n. activity involved in maintaining something in good working order
-makeup - n. the way in which someone or something is composed
-mandate - n. an authorization to act given to a representative
-mandatory - j. required by rule
-maneuver - v. act in order to achieve a certain goal
-manifesto - n. a public declaration of intentions (as issued by a political party or government)
-marine - j. native to or inhabiting the sea
-maritime - j. relating to or involving ships or shipping or navigation or seamen
-martial - j. suggesting war or military life
-marvel - v. be amazed at
-massacre - n. the savage and excessive killing of many people
-massive - j. imposing in size or bulk or solidity
-masterpiece - n. the most outstanding work of a creative artist or craftsman
-material - j. concerned with worldly rather than spiritual interests
-maternal - j. relating to or derived from one's mother
-maze - n. complex system of paths or tunnels in which it is easy to get lost
-mechanics - n. the technical aspects of doing something
-medicine - n. something that treats or prevents or alleviates the symptoms of disease
-medieval - j. as if belonging to the Middle Ages; old-fashioned and unenlightened
-mediocre - j. moderate to inferior in quality
-meditation - n. continuous and profound contemplation or musing on a subject or series of subjects of a deep or abstruse nature
-melodrama - n. an extravagant comedy in which action is more salient than characterization
-memorable - j. worth remembering
-menace - v. act in a threatening manner
-mentality - n. a habitual or characteristic mental attitude that determines how you will interpret and respond to situations
-mentor - v. serve as a teacher or trusted counselor
-metal - n. any of several chemical elements that are usually shiny solids
-metaphor - n. a figure of speech in which an expression is used to refer to something that it does not literally denote in order to suggest a similarity
-metric - j. based on the meter as a standard of measurement
-metropolis - n. a large and densely populated urban area; may include several independent administrative districts
-metropolitan - j. relating to or characteristic of a densely populated urban area
-mileage - n. the ratio of the number of miles traveled to the number of gallons of gasoline burned; miles per gallon
-militant - j. disposed to warfare or hard-line policies
-militia - n. civilians trained as soldiers but not part of the regular army
-miniature - j. being on a very small scale
-minimize - v. make small or insignificant
-ministry - n. a government department under the direction of a minister
-minority - n. being or relating to the smaller in number of two parts
-minute - j. infinitely or immeasurably small
-misdemeanor - n. a crime less serious than a felony
-missile - n. a rocket carrying a warhead of conventional or nuclear explosives
-momentum - n. an impelling force or strength
-monarchy - n. an autocracy governed by a monarch who usually inherits the authority
-monastery - n. the residence of a religious community
-monetary - j. relating to or involving money
-monopoly - n. (economics) a market in which there are many buyers but only one seller
-morale - n. the spirit of a group that makes the members want the group to succeed
-morality - n. concern with the distinction between good and evil or right and wrong; right or good conduct
-motto - n. a favorite saying of a sect or political group
-mundane - j. concerned with the world or worldly matters; ordinary
-municipal - j. relating to city government
-muster - v. gather or bring together
-myriad - n. a large indefinite number
-myth - n. a traditional story accepted as history; serves to explain the world view of a people
-mythology - n. myths collectively; the body of stories associated with a culture or institution or person
-narrative - n. a message that tells the particulars of an act or occurrence or course of events; presented in writing or drama or cinema or as a radio or television program
-narrator - n. someone who tells a story
-naturally - a. according to nature; by natural means; without artificial help
-naval - j. connected with or belonging to or used in a navy
-necessary - j. absolutely essential
-necessity - n. anything indispensable
-network - n. an interconnected system of things or people
-neutral - j. having no personal preference
-nevertheless - a. despite anything to the contrary (usually following a concession)
-noisy - j. full of or characterized by loud and nonmusical sounds
-nomination - n. the condition of having been proposed as a suitable candidate for appointment or election
-nominee - n. a politician who is running for public office
-norm - n. a standard or model or pattern regarded as typical
-notorious - j. known widely and usually unfavorably
-nude - n. without clothing (especially in the phrase 'in the nude')
-obesity - n. more than average fatness
-objective - j. undistorted by emotion or personal bias; based on observable phenomena
-observatory - n. a building designed and equipped to observe astronomical phenomena
-obsolete - j. no longer in use
-obstruction - n. something that stands in the way and must be circumvented or surmounted
-obtain - v. come into possession of
-occasion - n. a vaguely specified social event
-odor - n. the sensation that results when olfactory receptors in the nose are stimulated by particular chemicals in gaseous form
-ominous - j. threatening or foreshadowing evil or tragic developments
-operate - v. handle and cause to function
-operator - n. an agent that operates some apparatus or machine
-opinion - n. a personal belief or judgment that is not founded on proof or certainty
-opponent - n. a contestant that you are matched against
-opportunity - n. a possibility due to a favorable combination of circumstances
-optimism - n. a general disposition to expect the best in all things
-option - n. one of a number of things from which only one can be chosen
-oral - j. of or relating to or affecting or for use in the mouth
-ordeal - n. a severe or trying experience
-ornate - j. marked by elaborate rhetoric and elaborated with decorative details
-orthodox - j. adhering to what is commonly accepted
-outbreak - n. a sudden violent spontaneous occurrence (usually of some undesirable condition)
-outcry - n. a loud utterance; often in protest or opposition
-outrage - n. a feeling of righteous anger
-outrageous - j. grossly offensive to decency or morality; causing horror
-outright - a. without reservation or concealment
-overhaul - v. make repairs, renovations, revisions or adjustments to
-oversee - v. watch and direct
-overthrow - n. the termination of a ruler or institution (especially by force)
-overweight - n. the property of excessive fatness
-pact - n. a written agreement between two states or sovereigns
-pageant - n. a rich and spectacular ceremony
-panic - n. an overwhelming feeling of fear and anxiety
-pantheon - n. all the gods of a religion
-paradox - n. (logic) a statement that contradicts itself
-parallel - j. being everywhere equidistant and not intersecting
-parish - n. a local church community
-parliament - n. a legislative assembly in certain countries
-parody - v. make a spoof of or make fun of
-participant - n. someone who takes part in an activity
-participate - v. become a participant; be involved in
-partisan - n. an ardent and enthusiastic supporter of some person or activity
-partition - v. divide into parts, pieces, or sections
-passive - j. lacking in energy or will
-patriotism - n. love of country and willingness to sacrifice for it
-patron - n. someone who supports or champions something
-pavilion - n. large and often sumptuous tent
-peaceful - j. not disturbed by strife or turmoil or war
-pedestrian - j. lacking wit or imagination
-penalty - n. a punishment for a crime or offense
-penchant - n. a strong liking
-pennant - n. a long flag; often tapering
-pension - n. a regular payment to a person that is intended to allow them to subsist without working
-pentagon - n. a five-sided polygon
-perceive - v. to become aware of or conscious of
-perception - n. becoming aware of something via the senses
-perennial - j. lasting an indefinitely long time; suggesting self-renewal
-perform - v. carry out or perform an action
-perjury - n. criminal offense of making false statements under oath
-permanent - j. continuing or enduring without marked change in status or condition or place
-perpetual - j. continuing forever or indefinitely
-persist - v. be persistent, refuse to stop
-personal - j. concerning or affecting a particular person or his or her private life and personality
-personality - n. the complex of all the attributes--behavioral, temperamental, emotional and mental--that characterize a unique individual
-personnel - n. persons collectively in the employ of a business
-perspective - n. the appearance of things relative to one another as determined by their distance from the viewer
-persuade - v. cause somebody to adopt a certain position, belief, or course of action; twist somebody's arm
-pervasive - j. spreading or spread throughout
-petty - j. contemptibly narrow in outlook
-phenomenal - j. exceedingly or unbelievably great
-phenomenon - n. any state or process known through the senses rather than by intuition or reasoning
-philharmonic - j. composing or characteristic of an orchestral group
-philosophy - n. any personal belief about how to live or how to deal with a situation
-physicist - n. a scientist trained in physics
-physics - n. the science of matter and energy and their interactions
-pinch - n. a squeeze with the fingers
-pine - n. straight-grained white to yellowish tree
-pioneer - v. open up and explore a new area
-pivotal - j. being of crucial importance
-plausible - j. apparently reasonable and valid, and truthful
-playful - j. full of fun and high spirits
-playwright - n. someone who writes plays
-plea - n. a humble request for help from someone in authority
-plead - v. appeal or request earnestly
-pleasant - j. affording pleasure; being in harmony with your taste or likings
-plunge - v. fall abruptly
-poetic - j. of or relating to poetry
-poignant - j. arousing emotions; touching
-poised - j. in full control of your faculties
-portfolio - n. a set of pieces of creative work collected to be shown to potential customers or employers
-positive - j. characterized by or displaying affirmation or acceptance or certainty etc.
-possess - v. have as an attribute, knowledge, or skill
-possession - n. the act of having and controlling property
-potent - j. having a strong physiological or chemical effect
-potential - j. existing in possibility
-precedent - n. an example that is used to justify similar occurrences at a later time
-precise - j. sharply exact or accurate or delimited
-precision - n. the quality of being reproducible in amount or performance
-predecessor - n. one who precedes you in time (as in holding a position or office)
-predict - v. make a prediction about; tell in advance
-prediction - n. a statement made about the future
-prefer - v. like better; value more highly
-preference - n. a strong liking
-prejudice - n. a partiality that prevents objective consideration of an issue or situation
-premature - j. too soon or too hasty
-premier - v. be performed for the first time
-premise - v. set forth beforehand, often as an explanation
-preparation - n. the activity of putting or setting in order in advance of some act or purpose
-preposterous - j. incongruous; inviting ridicule
-prescription - n. written instructions from a physician or dentist to a druggist concerning the form and dosage of a drug to be issued to a given patient
-preservation - n. the activity of protecting something from loss or danger
-pretentious - j. making claim to or creating an appearance of (often undeserved) importance or distinction
-prevalent - j. most frequent or common
-prevention - n. the act of preventing
-primer - n. an introductory textbook
-primitive - j. belonging to an early stage of technical development; characterized by simplicity and (often) crudeness
-principal - n. the educator who has executive authority for a school
-principle - n. a basic truth or law or assumption
-principled - j. based on or manifesting objectively defined standards of rightness or morality
-pristine - j. completely free from dirt or contamination
-privilege - n. a special advantage or immunity or benefit not enjoyed by all
-probation - n. (law) a way of dealing with offenders without imprisoning them; a defendant found guilty of a crime is released by the court without imprisonment subject to conditions imposed by the court
-probe - v. question or examine thoroughly and closely
-procedure - n. a process or series of acts especially of a practical or mechanical nature involved in a particular form of work
-proceed - v. move ahead; travel onward in time or space
-productive - j. producing or capable of producing (especially abundantly)
-profession - n. an occupation requiring special education (especially in the liberal arts or sciences)
-professor - n. someone who is a member of the faculty at a college or university
-profile - n. an outline of something (especially a human face as seen from one side)
-progressive - j. favoring or promoting progress
-prohibition - n. the action of prohibiting or inhibiting or forbidding (or an instance thereof)
-prolific - j. bearing in abundance especially offspring
-promenade - n. a public area set aside as a pedestrian walk
-prominence - n. relative importance
-prominent - j. having a quality that thrusts itself into attention
-promoter - n. someone who is an active supporter and advocate
-prone - j. having a tendency (to); often used in combination
-propaganda - n. information that is spread for the purpose of promoting some cause
-prophet - n. someone who speaks by divine inspiration; someone who is an interpreter of the will of God
-protagonist - n. the principal character in a work of fiction
-protection - n. the activity of protecting someone or something
-protective - j. intended or adapted to afford protection of some kind
-protestant - j. of or relating to Protestants or Protestantism
-provincial - j. characteristic of the provinces or their people
-provoke - v. evoke or provoke to appear or occur
-proxy - n. a person authorized to act for another
-prudence - n. knowing how to avoid embarrassment or distress
-psychic - j. outside the sphere of physical science
-pundit - n. someone who has been admitted to membership in a scholarly field
-quake - v. shake with fast, tremulous movements
-qualify - v. make fit or prepared
-quarterly - a. in three month intervals
-radical - j. markedly new or introducing extreme change
-rampant - j. unrestrained and violent
-rapid - j. characterized by speed; moving with or capable of moving with high speed
-rave - v. praise enthusiastically
-reaction - n. a response that reveals a person's feelings or attitude
-readily - a. without much difficulty
-realism - n. the attribute of accepting the facts of life and favoring practicality and literal truth
-recipient - n. a person who receives something
-reckless - j. characterized by careless unconcern
-recognize - v. detect with the senses
-reconcile - v. come to terms
-reconsider - v. consider again; give new consideration to; usually with a view to changing
-recover - v. get or find back; recover the use of
-recruit - v. cause to assemble or enlist in the military
-redemption - n. (theology) the act of delivering from sin or saving from evil
-refer - v. send or direct for treatment, information, or a decision
-reflection - n. the image of something as reflected by a mirror (or other reflective material)
-reform - v. make changes for improvement in order to remove abuse and injustices
-refuge - n. a shelter from danger or hardship
-refusal - n. the act of not accepting something that is offered
-regime - n. the government or governing authority of a political unit
-regional - j. related or limited to a particular region
-reign - v. have sovereign power
-relevant - j. having a bearing on or connection with the subject at issue
-reliant - j. depending on another for support
-reluctance - n. a certain degree of unwillingness
-reluctant - j. not eager
-reminiscent - j. serving to bring to mind
-renaissance - n. the period of European history at the close of the Middle Ages and the rise of the modern world; a cultural rebirth from the 14th through the middle of the 17th centuries
-render - v. give or supply
-renowned - j. widely known and esteemed
-repeal - n. cancel officially
-reproduction - n. the act of making copies
-requisite - n. anything indispensable
-resemblance - n. similarity in appearance or external or superficial details
-resent - v. feel bitter or indignant about
-resist - v. withstand the force of something
-resistance - n. the action of opposing something that you disapprove or disagree with
-resistant - j. impervious to being affected
-resort - v. have recourse to
-resource - n. a source of aid or support that may be drawn upon when needed
-restore - v. bring back into original existence, use, function, or position
-resurrection - n. (New Testament) the rising of Christ on the third day after the Crucifixion
-retrospect - n. contemplation of things past
-retrospective - j. concerned with or related to the past
-revelation - n. communication of knowledge to man by a divine or supernatural agency
-revive - v. be brought back to life, consciousness, or strength
-rhetoric - n. using language effectively to please or persuade
-ridiculous - j. incongruous; absurd; nonsensical
-rigorous - j. demanding strict attention to rules and procedures
-robust - j. sturdy and strong in form, constitution, or construction
-rue - n. sadness associated with some wrong done or some disappointment
-rural - j. living in or characteristic of farming or country life
-rustic - j. characteristic of the fields or country
-sacrifice - v. kill or destroy
-savage - v. criticize harshly or violently
-scholarly - j. characteristic of learning or studying
-scope - n. an area in which something acts or operates or has power or control
-script - n. a written version of a play or other dramatic composition; used in preparing for a performance
-secession - n. formal separation from an alliance or federation
-secondary - j. not of major importance
-secrecy - n. the trait of keeping things secret
-secular - j. not concerned with or devoted to religion
-seize - v. take hold of; grab
-selective - j. characterized by very careful or fastidious choices
-seminar - n. any meeting for an exchange of ideas
-sensation - n. a perception associated with stimulation of a sensory organ
-sensibility - n. refined sensitivity to pleasurable or painful impressions
-sensitive - j. responsive to physical stimuli
-sentence - n. the period of time a prisoner is imprisoned
-sentinel - n. a person employed to keep watch for some anticipated event
-sequel - n. a part added to a book or play that continues and extends it
-sequence - n. serial arrangement in which things follow in logical order or a recurrent pattern
-sergeant - n. any of several noncommissioned officer ranks in the Army or Air Force or Marines ranking above a corporal
-servitude - n. state of subjection to an owner or master or forced labor imposed as punishment
-severely - a. with sternness; in a severe manner
-shallow - j. lacking depth of intellect or knowledge; concerned only with what is obvious
-sheer - j. complete and without restriction or qualification
-shrewd - j. marked by practical hardheaded intelligence
-siege - n. the action of an armed force that surrounds a fortified place and isolates it while continuing to attack
-significance - n. the quality of being important in effect or meaning
-significant - j. important in effect or meaning
-similar - j. having close to the same characteristics
-sinister - j. stemming from evil characteristics or forces; wicked or dishonorable
-skepticism - n. the disbelief in any claims of ultimate knowledge
-slack - j. not tense or taut
-slight - n. a deliberate discourteous act (usually as an expression of anger or disapproval)
-sober - v. become more realistic
-socialism - n. a political theory advocating state ownership of industry
-socialist - j. advocating or following the socialist principles of state ownership
-sociology - n. the study and classification of human societies
-solar - j. relating to or derived from the sun or utilizing the energies of the sun
-soldier - n. an enlisted man or woman who serves in an army
-somber - j. grave or even gloomy in character
-sophisticated - j. having or appealing to those having worldly knowledge and refinement
-souvenir - n. a reminder of past events
-specialty - n. an asset of special worth or utility
-species - n. (biology) taxonomic group whose members can interbreed
-spectator - n. a close observer; someone who looks at something (such as an exhibition of some kind)
-specter - n. a ghostly appearing figure
-spectrum - n. a broad range of related objects or ideas or activities
-speculate - v. consider in an idle or casual way and with an element of doubt or without sufficient reason to reach a conclusion
-spontaneous - j. said or done without having been planned or written in advance
-static - j. showing little if any change
-stature - n. high level of respect gained by impressive development or achievement
-statute - n. an act passed by a legislative body
-stealth - n. avoiding detection by moving carefully
-stimulate - v. cause to be alert and energetic
-stringent - j. demanding strict attention to rules and procedures
-submission - n. something (manuscripts or architectural plans and models or estimates or works of art of all genres etc.) submitted for the judgment of others (as in a competition)
-subsequent - j. following in time or order
-subsidiary - j. functioning in a supporting capacity
-substantive - j. having a firm basis in reality and being therefore important, meaningful, or considerable
-subtle - j.  difficult to detect or grasp by the mind or analyze
-successor - n. a person who follows next in order
-summary - n. a brief statement that presents the main points in a concise form
-superb - j. of surpassing excellence
-superficial - j. concerned with or comprehending only what is apparent or obvious; not deep or penetrating emotionally or intellectually
-suppress - v. reduce the incidence or severity of or stop
-surround - v. extend on all sides of simultaneously; encircle
-suspense - n. excited anticipation of an approaching climax
-suspension - n. an interruption in the intensity or amount of something
-suspicious - j. openly distrustful and unwilling to confide
-sympathetic - j. expressing or feeling or resulting from sympathy or compassion or friendly fellow feelings; disposed toward
-symphony - n. a large orchestra; can perform symphonies
-systematic - j. characterized by order and planning
-tactics - n. the branch of military science dealing with detailed maneuvers to achieve objectives set by strategy
-tangible - j. perceptible by the senses especially the sense of touch
-taxation - n. the imposition of taxes; the practice of the government in levying taxes on the subjects of a state
-technique - n. skillfulness in the command of fundamentals deriving from practice and familiarity
-technology - n. the practical application of science to commerce or industry
-telescope - n. a magnifier of images of distant objects
-temporary - j. not permanent; not lasting
-tendency - n. a characteristic likelihood of or natural disposition toward a certain condition or character or effect
-tense - j. taut or rigid; stretched tight
-tentative - j. unsettled in mind or opinion
-tenure - v. give life-time employment to
-terminal - j. being or situated at an end
-territorial - j. displaying territoriality; defending an area from intruders
-testament - n. a profession of belief
-theological - j. of or relating to or concerning the study of religion
-theology - n. the rational and systematic study of religion and its influences and of the nature of religious truth
-theoretical - j. concerned with theories rather than their practical applications
-theorist - n. someone who theorizes (especially in science or art)
-thesis - n. a formal paper advancing a new point of view resulting from research; usually a requirement for an advanced academic degree
-titanic - j. of great force or power
-tolerance - n. willingness to recognize and respect the beliefs or practices of others
-tolerant - j. showing respect for the rights or opinions or practices of others
-tolerate - v. recognize and respect (rights and beliefs of others)
-transcript - n. something that has been transcribed; a written record (usually typewritten) of dictated or recorded speech
-transfer - v. move from one place to another
-transition - v. make or undergo a transition (from one state or system to another)
-translate - v. restate (words) from one language into another language
-transmission - n. the act of sending a message; causing a message to be transmitted
-transparent - j. transmitting light; able to be seen through with clarity
-transplant - n. the act of removing something from one location and introducing it in another location
-tremendous - j. extraordinarily large in size or extent or amount or power or degree
-tribune - n. a protector of the people
-trinity - n. the union of the Father and Son and Holy Ghost in one Godhead
-triple - v. increase threefold
-trivial - j. of little substance or significance
-truthful - j. expressing or given to expressing the truth
-turmoil - n. a violent disturbance
-typical - j. exhibiting the qualities or characteristics that identify a group or kind or category
-ubiquitous - j. being present everywhere at once
-ultimate - j. furthest or highest in degree or order; utmost or extreme
-unanimous - j. acting together as a single undiversified whole
-uncommon - j. not common or ordinarily encountered; unusually great in amount or remarkable in character or kind
-unconscious - j. not conscious; lacking awareness and the capacity for sensory perception as if asleep or dead
-undermine - v. destroy property or hinder normal operations
-unique - j. the single one of its kind
-unlimited - j. having no limits in range or scope
-unprecedented - j. having no previous example; novel
-urban - j. located in or characteristic of a city or city life
-urgency - n. an urgent situation calling for prompt action
-usage - n. the act of using
-utility - n. the quality of being of practical use
-vacuum - n. a region that is devoid of matter
-valid - j. well grounded in logic or truth or having legal force
-variation - n. an artifact that deviates from a norm or standard
-vegetarian - n. eater of fruits and grains and nuts; someone who eats no meat or fish or (often) any animal products
-vegetation - n. all the plant life in a particular region or period
-venerable - j. impressive by reason of age
-verify - v. confirm the truth of
-version - n. something a little different from others of the same type
-vertical - j. at right angles to the plane of the horizon or a base line
-veto - n. the power or right to prohibit or reject a proposed or intended act (especially the power of a chief executive to reject a bill passed by the legislature)
-vigorous - j. strong and active physically or mentally
-violation - n. an act that disregards an agreement or a right
-vista - n. the visual percept of a region
-visual - j. relating to or using sight
-vitality - n. an energetic style
-vogue - n. the popular taste at a given time
-volatile - j. liable to lead to sudden change or violence
-vulnerable - j. capable of being wounded or hurt
-warrant - v. stand behind and guarantee the quality, accuracy, or condition of
-wherever - a. where in the world
-wholly - a. to a complete degree or to the full or entire extent ('whole' is often used informally for 'wholly')
-woo - v. seek someone's favor
-zeal - n. excessive fervor to do something or accomplish some end
diff --git a/samples/SearchableDictionary/res/values/strings.xml b/samples/SearchableDictionary/res/values/strings.xml
deleted file mode 100644
index a39ba75..0000000
--- a/samples/SearchableDictionary/res/values/strings.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
-    <!-- The name of the application. -->
-    <string name="app_name">Searchable Dictionary</string>
-
-    <!-- The label for the search results for this app (see searchable.xml for more details). -->
-    <string name="search_label">Dictionary</string>
-
-    <!-- The menu entry that invokes search. -->
-    <string name="menu_search">Search</string>
-
-    <!-- The description that will show up in the search settings for this source.  -->
-    <string name="settings_description">Definitions of words</string>
-
-    <!-- General instructions in the main activity. -->
-    <string name="search_instructions">Press the search key to look up a word</string>
-
-    <!-- Shown above search results when we receive a search request. -->
-    <string name="search_results">Search results for \'<xliff:g id="string">%s</xliff:g>\': </string>
-</resources>
diff --git a/samples/SearchableDictionary/res/xml/searchable.xml b/samples/SearchableDictionary/res/xml/searchable.xml
deleted file mode 100644
index 1edb57c..0000000
--- a/samples/SearchableDictionary/res/xml/searchable.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** 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.
-*/
--->
-
-<!-- The attributes below configure how the search results will work:
- - the 'label' points to a short description used when searching within the application if
-   'badge mode' is used as specified with android:searchMode="useLabelAsBadge" (which it is not for
-    this application).
- - the 'searchSettingsDescription' points to a string that will be displayed underneath the
-   name of this application in the search settings to describe what content will be searched.
- - 'includeInGlobalSearch' will include this app's search suggestions in Quick Search Box.
- - 'searchSuggestAuthority' specifies the authority matching the authority of the
-   "DictionaryProvider" specified in the manifest.  This means the DictionaryProvider will be
-   queried for search suggestions.
- - 'searchSuggestIntentAction' the default intent action used in the intent that is launched based
-   on a user cilcking on a search suggestion.  This saves us from manually having to fill in the
-   SUGGEST_COLUMN_INTENT_ACTION column for each suggestion returned by the provider.
- -->
-<searchable xmlns:android="http://schemas.android.com/apk/res/android"
-        android:label="@string/search_label"
-        android:searchSettingsDescription="@string/settings_description"
-        android:includeInGlobalSearch="true"
-        android:searchSuggestAuthority="dictionary"
-        android:searchSuggestIntentAction="android.intent.action.VIEW">
-</searchable>
diff --git a/samples/SearchableDictionary/src/com/example/android/searchabledict/Dictionary.java b/samples/SearchableDictionary/src/com/example/android/searchabledict/Dictionary.java
deleted file mode 100644
index 59e735b..0000000
--- a/samples/SearchableDictionary/src/com/example/android/searchabledict/Dictionary.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.searchabledict;
-
-import android.content.res.Resources;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Contains logic to load the word of words and definitions and find a list of matching words
- * given a query.  Everything is held in memory; this is not a robust way to serve lots of
- * words and is only for demo purposes.
- *
- * You may want to consider using an SQLite database. In practice, you'll want to make sure your
- * suggestion provider is as efficient as possible, as the system will be taxed while performing
- * searches across many sources for each keystroke the user enters into Quick Search Box.
- */
-public class Dictionary {
-
-    public static class Word {
-        public final String word;
-        public final String definition;
-
-        public Word(String word, String definition) {
-            this.word = word;
-            this.definition = definition;
-        }
-    }
-
-    private static final Dictionary sInstance = new Dictionary();
-
-    public static Dictionary getInstance() {
-        return sInstance;
-    }
-
-    private final Map<String, List<Word>> mDict = new ConcurrentHashMap<String, List<Word>>();
-
-    private Dictionary() {
-    }
-
-    private boolean mLoaded = false;
-
-    /**
-     * Loads the words and definitions if they haven't been loaded already.
-     *
-     * @param resources Used to load the file containing the words and definitions.
-     */
-    public synchronized void ensureLoaded(final Resources resources) {
-        if (mLoaded) return;
-
-        new Thread(new Runnable() {
-            public void run() {
-                try {
-                    loadWords(resources);
-                } catch (IOException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        }).start();
-    }
-
-    private synchronized void loadWords(Resources resources) throws IOException {
-        if (mLoaded) return;
-
-        Log.d("dict", "loading words");
-        InputStream inputStream = resources.openRawResource(R.raw.definitions);
-        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
-
-        try {
-            String line;
-            while((line = reader.readLine()) != null) {
-                String[] strings = TextUtils.split(line, "-");
-                if (strings.length < 2) continue;
-                addWord(strings[0].trim(), strings[1].trim());
-            }
-        } finally {
-            reader.close();
-        }
-        mLoaded = true;
-    }
-
-
-    public List<Word> getMatches(String query) {
-        List<Word> list = mDict.get(query);
-        return list == null ? Collections.EMPTY_LIST : list;
-    }
-
-    private void addWord(String word, String definition) {
-        final Word theWord = new Word(word, definition);
-
-        final int len = word.length();
-        for (int i = 0; i < len; i++) {
-            final String prefix = word.substring(0, len - i);
-            addMatch(prefix, theWord);
-        }
-    }
-
-    private void addMatch(String query, Word word) {
-        List<Word> matches = mDict.get(query);
-        if (matches == null) {
-            matches = new ArrayList<Word>();
-            mDict.put(query, matches);
-        }
-        matches.add(word);
-    }
-}
diff --git a/samples/SearchableDictionary/src/com/example/android/searchabledict/DictionaryProvider.java b/samples/SearchableDictionary/src/com/example/android/searchabledict/DictionaryProvider.java
deleted file mode 100644
index db626e8..0000000
--- a/samples/SearchableDictionary/src/com/example/android/searchabledict/DictionaryProvider.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.searchabledict;
-
-import android.app.SearchManager;
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.content.UriMatcher;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import java.util.List;
-
-/**
- * Provides search suggestions for a list of words and their definitions.
- */
-public class DictionaryProvider extends ContentProvider {
-
-    public static String AUTHORITY = "dictionary";
-
-    private static final int SEARCH_SUGGEST = 0;
-    private static final int SHORTCUT_REFRESH = 1;
-    private static final UriMatcher sURIMatcher = buildUriMatcher();
-
-    /**
-     * The columns we'll include in our search suggestions.  There are others that could be used
-     * to further customize the suggestions, see the docs in {@link SearchManager} for the details
-     * on additional columns that are supported.
-     */
-    private static final String[] COLUMNS = {
-            "_id",  // must include this column
-            SearchManager.SUGGEST_COLUMN_TEXT_1,
-            SearchManager.SUGGEST_COLUMN_TEXT_2,
-            SearchManager.SUGGEST_COLUMN_INTENT_DATA,
-            };
-
-
-    /**
-     * Sets up a uri matcher for search suggestion and shortcut refresh queries.
-     */
-    private static UriMatcher buildUriMatcher() {
-        UriMatcher matcher =  new UriMatcher(UriMatcher.NO_MATCH);
-        matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH_SUGGEST);
-        matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH_SUGGEST);
-        matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT, SHORTCUT_REFRESH);
-        matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT + "/*", SHORTCUT_REFRESH);
-        return matcher;
-    }
-
-    @Override
-    public boolean onCreate() {
-        Resources resources = getContext().getResources();
-        Dictionary.getInstance().ensureLoaded(resources);
-        return true;
-    }
-
-    @Override
-    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
-            String sortOrder) {
-        if (!TextUtils.isEmpty(selection)) {
-            throw new IllegalArgumentException("selection not allowed for " + uri);
-        }
-        if (selectionArgs != null && selectionArgs.length != 0) {
-            throw new IllegalArgumentException("selectionArgs not allowed for " + uri);
-        }
-        if (!TextUtils.isEmpty(sortOrder)) {
-            throw new IllegalArgumentException("sortOrder not allowed for " + uri);
-        }
-        switch (sURIMatcher.match(uri)) {
-            case SEARCH_SUGGEST:
-                String query = null;
-                if (uri.getPathSegments().size() > 1) {
-                    query = uri.getLastPathSegment().toLowerCase();
-                }
-                return getSuggestions(query, projection);
-            case SHORTCUT_REFRESH:
-                String shortcutId = null;
-                if (uri.getPathSegments().size() > 1) {
-                    shortcutId = uri.getLastPathSegment();
-                }
-                return refreshShortcut(shortcutId, projection);
-            default:
-                throw new IllegalArgumentException("Unknown URL " + uri);
-        }
-    }
-
-    private Cursor getSuggestions(String query, String[] projection) {
-        String processedQuery = query == null ? "" : query.toLowerCase();
-        List<Dictionary.Word> words = Dictionary.getInstance().getMatches(processedQuery);
-
-        MatrixCursor cursor = new MatrixCursor(COLUMNS);
-        for (Dictionary.Word word : words) {
-            cursor.addRow(columnValuesOfWord(word));
-        }
-
-        return cursor;
-    }
-
-    private Object[] columnValuesOfWord(Dictionary.Word word) {
-        return new String[] {
-                word.word,           // _id
-                word.word,           // text1
-                word.definition,     // text2
-                word.word,           // intent_data (included when clicking on item)
-        };
-    }
-
-    /**
-     * Note: this is unused as is, but if we included
-     * {@link SearchManager#SUGGEST_COLUMN_SHORTCUT_ID} as a column in our results, we
-     * could expect to receive refresh queries on this uri for the id provided, in which case we
-     * would return a cursor with a single item representing the refreshed suggestion data.
-     */
-    private Cursor refreshShortcut(String shortcutId, String[] projection) {
-        return null;
-    }
-
-    /**
-     * All queries for this provider are for the search suggestion and shortcut refresh mime type.
-     */
-    public String getType(Uri uri) {
-        switch (sURIMatcher.match(uri)) {
-            case SEARCH_SUGGEST:
-                return SearchManager.SUGGEST_MIME_TYPE;
-            case SHORTCUT_REFRESH:
-                return SearchManager.SHORTCUT_MIME_TYPE;
-            default:
-                throw new IllegalArgumentException("Unknown URL " + uri);
-        }
-    }
-
-    public Uri insert(Uri uri, ContentValues values) {
-        throw new UnsupportedOperationException();
-    }
-
-    public int delete(Uri uri, String selection, String[] selectionArgs) {
-        throw new UnsupportedOperationException();
-    }
-
-    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.java b/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.java
deleted file mode 100644
index 4d27470..0000000
--- a/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.searchabledict;
-
-import android.app.Activity;
-import android.app.SearchManager;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.TwoLineListItem;
-
-import java.util.List;
-
-/**
- * The main activity for the dictionary.  Also displays search results triggered by the search
- * dialog.
- */
-public class SearchableDictionary extends Activity {
-
-    private static final int MENU_SEARCH = 1;
-
-    private TextView mTextView;
-    private ListView mList;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        Intent intent = getIntent();
-
-        setContentView(R.layout.main);
-        mTextView = (TextView) findViewById(R.id.textField);
-        mList = (ListView) findViewById(R.id.list);
-
-        if (Intent.ACTION_VIEW.equals(intent.getAction())) {
-            // from click on search results
-            Dictionary.getInstance().ensureLoaded(getResources());
-            String word = intent.getDataString();
-            Dictionary.Word theWord = Dictionary.getInstance().getMatches(word).get(0);
-            launchWord(theWord);
-            finish();
-        } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
-            String query = intent.getStringExtra(SearchManager.QUERY);
-            mTextView.setText(getString(R.string.search_results, query));
-            WordAdapter wordAdapter = new WordAdapter(Dictionary.getInstance().getMatches(query));
-            mList.setAdapter(wordAdapter);
-            mList.setOnItemClickListener(wordAdapter);
-        }
-
-        Log.d("dict", intent.toString());
-        if (intent.getExtras() != null) {
-            Log.d("dict", intent.getExtras().keySet().toString());
-        }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        menu.add(0, MENU_SEARCH, 0, R.string.menu_search)
-                .setIcon(android.R.drawable.ic_search_category_default)
-                .setAlphabeticShortcut(SearchManager.MENU_KEY);
-
-        return super.onCreateOptionsMenu(menu);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case MENU_SEARCH:
-                onSearchRequested();
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    private void launchWord(Dictionary.Word theWord) {
-        Intent next = new Intent();
-        next.setClass(this, WordActivity.class);
-        next.putExtra("word", theWord.word);
-        next.putExtra("definition", theWord.definition);
-        startActivity(next);
-    }
-
-    class WordAdapter extends BaseAdapter implements AdapterView.OnItemClickListener {
-
-        private final List<Dictionary.Word> mWords;
-        private final LayoutInflater mInflater;
-
-        public WordAdapter(List<Dictionary.Word> words) {
-            mWords = words;
-            mInflater = (LayoutInflater) SearchableDictionary.this.getSystemService(
-                    Context.LAYOUT_INFLATER_SERVICE);
-        }
-
-        public int getCount() {
-            return mWords.size();
-        }
-
-        public Object getItem(int position) {
-            return position;
-        }
-
-        public long getItemId(int position) {
-            return position;
-        }
-
-        public View getView(int position, View convertView, ViewGroup parent) {
-            TwoLineListItem view = (convertView != null) ? (TwoLineListItem) convertView :
-                    createView(parent);
-            bindView(view, mWords.get(position));
-            return view;
-        }
-
-        private TwoLineListItem createView(ViewGroup parent) {
-            TwoLineListItem item = (TwoLineListItem) mInflater.inflate(
-                    android.R.layout.simple_list_item_2, parent, false);
-            item.getText2().setSingleLine();
-            item.getText2().setEllipsize(TextUtils.TruncateAt.END);
-            return item;
-        }
-
-        private void bindView(TwoLineListItem view, Dictionary.Word word) {
-            view.getText1().setText(word.word);
-            view.getText2().setText(word.definition);
-        }
-
-        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-            launchWord(mWords.get(position));
-        }
-    }
-}
diff --git a/samples/SearchableDictionary/src/com/example/android/searchabledict/WordActivity.java b/samples/SearchableDictionary/src/com/example/android/searchabledict/WordActivity.java
deleted file mode 100644
index 1c4b8b4..0000000
--- a/samples/SearchableDictionary/src/com/example/android/searchabledict/WordActivity.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.searchabledict;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.widget.TextView;
-import android.content.Intent;
-
-/**
- * Displays a word and its definition.
- */
-public class WordActivity extends Activity {
-
-    private TextView mWord;
-    private TextView mDefinition;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.word);
-
-        mWord = (TextView) findViewById(R.id.word);
-        mDefinition = (TextView) findViewById(R.id.definition);
-
-        Intent intent = getIntent();
-
-        String word = intent.getStringExtra("word");
-        String definition = intent.getStringExtra("definition");
-
-        mWord.setText(word);
-        mDefinition.setText(definition);
-    }
-}
diff --git a/samples/Snake/_index.html b/samples/Snake/_index.html
new file mode 100644
index 0000000..56391b9
--- /dev/null
+++ b/samples/Snake/_index.html
@@ -0,0 +1,10 @@
+<p>This is an implementation of the classic Game "Snake", in which you control a
+serpent roaming around the garden looking for apples. Be careful, though,
+because when you catch one, not only will you become longer, but you'll move
+faster. Running into yourself or the walls will end the game..</p>
+
+<p>This code demonstrates how to create custom View layouts and
+request draws to the screen. A great example of a basic game that does not
+require a fast framerate.</p>
+
+<img alt="" src="/guide/samples/images/Snake.png" />
diff --git a/samples/SoftKeyboard/_index.html b/samples/SoftKeyboard/_index.html
new file mode 100644
index 0000000..7fc7af5
--- /dev/null
+++ b/samples/SoftKeyboard/_index.html
@@ -0,0 +1,7 @@
+<p>This application is an example of writing an input method for a software keyboard.  
+This code is focused on simplicity over completeness, so it should in no way be considered
+to be a complete soft keyboard implementation.  Its purpose is to provide
+a basic example for how you would get started writing an input method, to
+be fleshed out as appropriate.</p>
+
+<img alt="" src="/guide/samples/images/SoftKeyboard.png" />
\ No newline at end of file
diff --git a/tools/anttasks/src/com/android/ant/ApkBuilderTask.java b/tools/anttasks/src/com/android/ant/ApkBuilderTask.java
index 3a15368..9231dc9 100644
--- a/tools/anttasks/src/com/android/ant/ApkBuilderTask.java
+++ b/tools/anttasks/src/com/android/ant/ApkBuilderTask.java
@@ -205,8 +205,26 @@
             // for reuse by other targets (signing/zipaligning)
             Path path = new Path(antProject);
 
+            // The createApk method uses mBaseName for the base name of the packages (resources
+            // and apk files).
+            // The generated apk file name is
+            // debug:   {base}[-{config}]-debug-unaligned.apk
+            // release: {base}[-{config}]-unsigned.apk
+            // Unfortunately for 1.5 projects and before the 'install' ant target expects the name
+            // of the default debug package to be {base}-debug.apk
+            // In order to support those package, we look for the 'out-debug-unaligned-package'
+            // property. If this exist, then we generate {base}[-{config}]-debug-unaligned.apk
+            // otherwise we generate {base}[-{config}]-debug.apk
+            // FIXME: Make apkbuilder export the package name used instead of
+            // having to keep apkbuilder and the rules file in sync
+            String debugPackageSuffix = "-debug-unaligned.apk";
+            if (antProject.getProperty("out-debug-unaligned-package") == null) {
+                debugPackageSuffix = "-debug.apk";
+            }
+
             // first do a full resource package
-            createApk(apkBuilder, null /*configName*/, null /*resourceFilter*/, path);
+            createApk(apkBuilder, null /*configName*/, null /*resourceFilter*/, path,
+                    debugPackageSuffix);
 
             // now see if we need to create file with filtered resources.
             // Get the project base directory.
@@ -218,7 +236,8 @@
             if (apkConfigs.size() > 0) {
                 Set<Entry<String, String>> entrySet = apkConfigs.entrySet();
                 for (Entry<String, String> entry : entrySet) {
-                    createApk(apkBuilder, entry.getKey(), entry.getValue(), path);
+                    createApk(apkBuilder, entry.getKey(), entry.getValue(), path,
+                            debugPackageSuffix);
                 }
             }
 
@@ -242,11 +261,12 @@
      * @param resourceFilter the resource configuration filter to pass to aapt (if configName is
      * non null)
      * @param path Ant {@link Path} to which add the generated APKs as {@link PathElement}
+     * @param debugPackageSuffix suffix for the debug packages.
      * @throws FileNotFoundException
      * @throws ApkCreationException
      */
     private void createApk(ApkBuilderImpl apkBuilder, String configName, String resourceFilter,
-            Path path)
+            Path path, String debugPackageSuffix)
             throws FileNotFoundException, ApkCreationException {
         // All the files to be included in the archive have already been prep'ed up, except
         // the resource package.
@@ -272,7 +292,7 @@
         }
 
         if (mSigned) {
-            filename = filename + "-debug-unaligned.apk";
+            filename = filename + debugPackageSuffix;
         } else {
             filename = filename + "-unsigned.apk";
         }
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java
index 4cd6085..c37fb6b 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java
@@ -866,7 +866,7 @@
                         append("\">").                                      //$NON-NLS-1$
                         append(tokenString).
                         append("</string>\n");                              //$NON-NLS-1$
-            content.append("<resources>\n");                                //$NON-NLS-1$
+            content.append("</resources>\n");                                //$NON-NLS-1$
 
             edit = new InsertEdit(0, content.toString());
             editGroup = new TextEditGroup("Create <string> in new XML file", edit);
diff --git a/tools/scripts/AndroidManifest.alias.template b/tools/scripts/AndroidManifest.alias.template
index b1be4c8..6606d3d 100644
--- a/tools/scripts/AndroidManifest.alias.template
+++ b/tools/scripts/AndroidManifest.alias.template
@@ -1,4 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+ALIAS PROJECTS ARE CURRENT NOT SUPPORTED.
+THIS FILE IS CURRENTLY BROKEN AND SHOULD NOT BE USED.
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="PACKAGE"
       android:versionCode="1"
diff --git a/tools/scripts/alias.template b/tools/scripts/alias.template
index 8be355b..14899ce 100644
--- a/tools/scripts/alias.template
+++ b/tools/scripts/alias.template
@@ -1,4 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+ALIAS PROJECTS ARE CURRENT NOT SUPPORTED.
+THIS FILE IS CURRENTLY BROKEN AND SHOULD NOT BE USED.
+-->
 <alias xmlns:android="http://schemas.android.com/apk/res/android">
     <intent android:action="android.intent.action.VIEW"
         android:data="ALIASDATA"/>
diff --git a/tools/scripts/alias_rules.xml b/tools/scripts/alias_rules.xml
index bc7de7c..5702461 100644
--- a/tools/scripts/alias_rules.xml
+++ b/tools/scripts/alias_rules.xml
@@ -1,4 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+ALIAS PROJECTS ARE CURRENT NOT SUPPORTED.
+THIS FILE IS CURRENTLY BROKEN AND SHOULD NOT BE USED.
+-->
 <project name="alias_rules" default="package">
 
     <!-- No user servicable parts below. -->
diff --git a/tools/scripts/android_rules.xml b/tools/scripts/android_rules.xml
index c8880c8..ad36cbe 100644
--- a/tools/scripts/android_rules.xml
+++ b/tools/scripts/android_rules.xml
@@ -180,6 +180,7 @@
     </target>
 
     <target name="debug" depends="dex, package-resources, debug-sign, package">
+        <echo>Running zip align on final apk...</echo>
         <exec executable="${zipalign}" failonerror="true">
             <arg value="-f" />
             <arg value="4" />
@@ -215,6 +216,7 @@
                 message="Please enter password for alias '${key.alias}':"
                 addproperty="key.alias.password"/>
         <!-- sign the APK -->
+        <echo>Signing final apk...</echo>
         <signjar
                 jar="${out-unsigned-package}"
                 signedjar="${out-unaligned-package}"
@@ -223,6 +225,7 @@
                 alias="${key.alias}"
                 keypass="${key.alias.password}"/>
         <!-- zip align the APK -->
+        <echo>Running zip align on final apk...</echo>
         <exec executable="${zipalign}" failonerror="true">
             <arg value="-f" />
             <arg value="4" />
@@ -237,14 +240,6 @@
         <echo>Installing ${out-debug-package} onto default emulator...</echo>
         <exec executable="${adb}" failonerror="true">
             <arg value="install" />
-            <arg path="${out-debug-package}" />
-        </exec>
-    </target>
-
-    <target name="reinstall" depends="debug">
-        <echo>Installing ${out-debug-package} onto default emulator...</echo>
-        <exec executable="${adb}" failonerror="true">
-            <arg value="install" />
             <arg value="-r" />
             <arg path="${out-debug-package}" />
         </exec>
@@ -275,12 +270,10 @@
         <echo>   debug:     Builds the application and sign it with a debug key.</echo>
         <echo>   release:   Builds the application. The generated apk file must be</echo>
         <echo>              signed before it is published.</echo>
-        <echo>   install:   Installs the debug package onto a running emulator or</echo>
-        <echo>              device. This can only be used if the application has </echo>
-        <echo>              not yet been installed.</echo>
-        <echo>   reinstall: Installs the debug package on a running emulator or</echo>
-        <echo>              device that already has the application.</echo>
-        <echo>              The signatures must match.</echo>
+        <echo>   install:   Installs/reinstall the debug package onto a running</echo>
+        <echo>              emulator or device.</echo>
+        <echo>              If the application was previously installed, the</echo>
+        <echo>              signatures must match.</echo>
         <echo>   uninstall: uninstall the application from a running emulator or</echo>
         <echo>              device.</echo>
     </target>
diff --git a/tools/scripts/build.alias.template b/tools/scripts/build.alias.template
index b605295..1043af1 100644
--- a/tools/scripts/build.alias.template
+++ b/tools/scripts/build.alias.template
@@ -1,4 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+ALIAS PROJECTS ARE CURRENT NOT SUPPORTED.
+THIS FILE IS CURRENTLY BROKEN AND SHOULD NOT BE USED.
+-->
 <project name="PROJECT_NAME" default="package">
 
     <!-- The build.properties file can be created by you and is never touched
diff --git a/tools/sdkstats/src/com/android/sdkstats/SdkStatsService.java b/tools/sdkstats/src/com/android/sdkstats/SdkStatsService.java
index 688474e..c98fc94 100644
--- a/tools/sdkstats/src/com/android/sdkstats/SdkStatsService.java
+++ b/tools/sdkstats/src/com/android/sdkstats/SdkStatsService.java
@@ -44,6 +44,8 @@
 import java.net.URL;
 import java.net.URLEncoder;
 import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /** Utility class to send "ping" usage reports to the server. */
 public class SdkStatsService {
@@ -93,14 +95,14 @@
         "kfmclient openURL %URL%",                    // $NON-NLS-1$ Konqueror
         "opera -newwindow %URL%",                     // $NON-NLS-1$ Opera
     };
-    
+
     public final static String PING_OPT_IN = "pingOptIn"; //$NON-NLS-1$
     public final static String PING_TIME = "pingTime"; //$NON-NLS-1$
     public final static String PING_ID = "pingId"; //$NON-NLS-1$
 
 
     private static PreferenceStore sPrefStore;
-    
+
     /**
      * Send a "ping" to the Google toolbar server, if enough time has
      * elapsed since the last ping, and if the user has not opted out.
@@ -123,7 +125,7 @@
             if (!prefs.contains(PING_ID)) {
                 // First time: make up a new ID.  TODO: Use something more random?
                 prefs.setValue(PING_ID, new Random().nextLong());
-    
+
                 // Also give them a chance to opt out.
                 prefs.setValue(PING_OPT_IN, getUserPermission(display));
                 try {
@@ -132,13 +134,13 @@
                 catch (IOException ioe) {
                 }
             }
-    
+
             // If the user has not opted in, do nothing and quietly return.
             if (!prefs.getBoolean(PING_OPT_IN)) {
                 // user opted out.
                 return;
             }
-    
+
             // If the last ping *for this app* was too recent, do nothing.
             String timePref = PING_TIME + "." + app;  // $NON-NLS-1$
             long now = System.currentTimeMillis();
@@ -147,7 +149,7 @@
                 // too soon after a ping.
                 return;
             }
-    
+
             // Record the time of the attempt, whether or not it succeeds.
             prefs.setValue(timePref, now);
             try {
@@ -155,7 +157,7 @@
             }
             catch (IOException ioe) {
             }
-    
+
             // Send the ping itself in the background (don't block if the
             // network is down or slow or confused).
             final long id = prefs.getLong(PING_ID);
@@ -171,7 +173,7 @@
             }.start();
         }
     }
-    
+
     /**
      * Returns the DDMS {@link PreferenceStore}.
      */
@@ -187,7 +189,7 @@
 
             if (homeDir != null) {
                 String rcFileName = homeDir + "ddms.cfg"; //$NON-NLS-1$
-                
+
                 // also look for an old pref file in the previous location
                 String oldPrefPath = System.getProperty("user.home") //$NON-NLS-1$
                     + File.separator + ".ddmsrc"; //$NON-NLS-1$
@@ -196,10 +198,10 @@
                     try {
                         PreferenceStore oldStore = new PreferenceStore(oldPrefPath);
                         oldStore.load();
-                        
+
                         oldStore.save(new FileOutputStream(rcFileName), "");
                         oldPrefFile.delete();
-                        
+
                         PreferenceStore newStore = new PreferenceStore(rcFileName);
                         newStore.load();
                         sPrefStore = newStore;
@@ -220,10 +222,10 @@
                 sPrefStore = new PreferenceStore();
             }
         }
-        
+
         return sPrefStore;
     }
-    
+
     /**
      * Unconditionally send a "ping" request to the Google toolbar server.
      *
@@ -239,8 +241,16 @@
         String os = System.getProperty("os.name");          // $NON-NLS-1$
         if (os.startsWith("Mac OS")) {                      // $NON-NLS-1$
             os = "mac";                                     // $NON-NLS-1$
+            String osVers = getVersion();
+            if (osVers != null) {
+                os = os + "-" + osVers;                     // $NON-NLS-1$
+            }
         } else if (os.startsWith("Windows")) {              // $NON-NLS-1$
             os = "win";                                     // $NON-NLS-1$
+            String osVers = getVersion();
+            if (osVers != null) {
+                os = os + "-" + osVers;                     // $NON-NLS-1$
+            }
         } else if (os.startsWith("Linux")) {                // $NON-NLS-1$
             os = "linux";                                   // $NON-NLS-1$
         } else {
@@ -272,6 +282,24 @@
     }
 
     /**
+     * Returns the version of the os if it is defined as X.Y, or null otherwise.
+     * <p/>
+     * Example of returned versions can be found at http://lopica.sourceforge.net/os.html
+     * <p/>
+     * This method removes any exiting micro versions.
+     */
+    private static String getVersion() {
+        Pattern p = Pattern.compile("(\\d+)\\.(\\d+).*"); // $NON-NLS-1$
+        String osVers = System.getProperty("os.version"); // $NON-NLS-1$
+        Matcher m = p.matcher(osVers);
+        if (m.matches()) {
+            return m.group(1) + "." + m.group(2);         // $NON-NLS-1$
+        }
+
+        return null;
+    }
+
+    /**
      * Prompt the user for whether they want to opt out of reporting.
      * @return whether the user allows reporting (they do not opt out).
      */
